2016-03-25 2 views
1

8051と外部デバイスの間のシリアル通信用の部分コードが記載されていますが、サブルーチンX00D6についてはわかりません。コードはR7をFFに設定してから0と比較するため、プログラムはどのようにループから抜け出すのですか? P0を#10に設定してから0に設定するとどうなりますか? P0はR7にどのように関連していますか? R7はちょうど残りのコードでレジスタとして使われているようです。8051マイクロコントローラシリアルポートのループ(P0を使用)

mov r7,#0ffh ; 00cf 7f ff  
    mov sbuf,a  ; 00d1 f5 99 
    acall X00d6 ; 00d3 11 d6 
    ret    ; 00d5 22   
X00d6: 
    mov p0,#10h  ; 00d6 75 80 10 
    mov p0,#0  ; 00d9 75 80 00 
    cjne r7,#0,X00d6 ; 00dc bf 00 f7 
    ret   ; 00df 22   

答えて

1

割り込みラインは、シリアル送信ライン(SBUF上で送信されたデータ)にトリガされるまでxood6サブルーチンが待機する考え出しました。割り込みによってR7が0にリセットされ、ループが終了します。