Assembly 如果两个端口位相等、大于或小于,如何比较它们?

Assembly 如果两个端口位相等、大于或小于,如何比较它们?,assembly,8051,Assembly,8051,我正在研究一个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 LOO

我正在研究一个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命令吗?

不是8051上的专家,但在比较之后,如果等于分支EQ或NE,则设置零标志;如果大于CS或CC,则设置进位标志。在CJNE比较和跳转(如果不相等)之后,您可以使用JC[进位设置的目的地-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是未设置进位标志的指令-即它小于或等于,但您已经消除了等于,因此它将小于。

这里有一种方法。它绝不是有效的循环或代码,但它会满足您的要求

假设您想比较P1.0和P2.0是否与以下结果相等。P3.0、P3.1和P3.2是结果指标

P1.0=P2.0,设置P3.0,否则清除

    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
P1.0>P2.0,设置P3.1否则清除

    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
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