2016-04-28 2 views
0

Я работаю над ассемблером 8051, и мне захотелось узнать команду, которая поможет мне сравнить между двумя битами порта и найти, если они равны или нет, и поэтому я искал ее и обнаружил, что CJNE может быть полезен и поместите его в программу следующим образом ... Я не уверен, что я иду по правильному пути, возможно, команда Xnor лучше, но я не могу найти ее для нее, и я не могу ее проверить по какой-то причине.Как я могу сравнить два бита порта, если они равны, больше или меньше друг друга?

ORG 00H 
MOV R0 ,#01H 
MOV R1, #00H 
CJNE R0,#00H,LOOP 
LOOP: MOV C, P1.0 
ANL C,P3.0 
MOV P2.0,C 
SJMP LOOP 
END  

И если я хотел знать, больше ли бит порта, чем другой, я могу использовать команду ANL?

ответ

0

Не эксперт на 8051, но после сравнения флаг нуля устанавливается, если он равен (ответвление EQ или NE) и флаг переноса, если он больше (CS или CC для установки или очистки). После CJNE (сравните и перепрыгните, если не равным), вы можете проверить флаг переноса с помощью JC [destination for carry set - ie>]. Не нужно делать второе сравнение - флаги все равно будут установлены с первого.

CJNE R0,#00H,NOTEQUAL 
; equal code goes here, then branch out 
NOTEQUAL: 
JC GREATER 
; less than code goes here, then branch out 
GREATER: 
; greater code goes here 

JNC является инструкцией для флага переноса не установлен - то есть это меньше или равно, но вы уже устранен равны, поэтому было бы меньше.

0

Вот один из способов сделать это. Это ни в коем случае не эффективный цикл или код, но он делает то, о чем вы просите.

Скажем, вы хотите сравнить, если P1.0 и P2.0 равны со следующими результатами. (P3.0, P3.1 и P3.2 являются показателями результата)

P1.0 = P2.0, P3.0 установить еще очистили

P1.0> P2.0, установить P3. 1 еще очистили

P1.0 = P2.0 = 0, установить P3.2 еще очистили

org 00H 

    MOV P3DIR, #0x00 ; Set direction of P3... 

Start: 
    JB P1.0, P1Set 
    JB P2.0, P1NotSetP2Set 
    SJMP None 
P1Set: 
    JB P2.0, P1SetP2Set 
    SJMP P1SetP2NotSet 
P1SetP2Set: 
    SETB P3.0 
    CLRB P3.1 
    CLRB P3.2 
    SJMP Start 
P1SetP2NotSet: 
    CLR P3.0 
    SETB P3.1 
    CLR P3.2 
    SJMP Start 
P1NotSetP2Set: 
    CLR P3.0 
    CLR P3.1 
    CLR P3.2 
    SJMP Start 
None: 
    SETB P3.0 
    CLR P3.1 
    SETB P3.1 
    SJMP Start 

    end 
Смежные вопросы