2016-04-28 10 views
0

私は8051アセンブラで作業しています.2つのポートビットを比較し、それらが等しいかどうかを調べるのに役立つコマンドを知りたかったので、CJNEが役に立ち、試してみました。次のようにプログラムに入れて...私は正しいパスに行くかどうかわからないXnorコマンドが良いかもしれないが、私はそれを見つけることができないと私は何らかの理由でそれをテストすることはできません。2つのポートビットが等しいか、それより大きいか小さいかを比較するにはどうすればよいですか?

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 [キャリーセットの宛先 - >]でキャリーフラグをチェックすることができます。 2回目の比較は必要ありません。フラグは最初から設定されます。

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

これを実行する方法が1つあります。決してサイクルやコードは効果的ではありませんが、それはあなたが求めるものです。

P1.0とP2.0が次の結果と等しいかどうかを比較したいとします。他

P1.0 = P2.0、P3.0セットは

P1.0> P2.0、セットP3をクリア(P3.0、P3.1、及びP3.2は、結果の指標です)。 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 
をクリア