你的程式就這麼多嗎,是還有,沒有發上來?那序列中斷程式怎麼是個死迴圈程式,怎麼沒有返回指令RETI?這程式能接收兩個位元組就算不錯了,按你這麼寫程式應該一個都不能接收。最後還有兩行SJMP RECV,這是死迴圈了。主程式最後是一條SJMP START,這又回到了從前了,一切從頭再來,那MOV SCON,#50H,這接收中斷標誌位RI 時刻被清0,就算是接收到一個位元組,但RI 被清掉了,就不會中斷了。給你改一下吧,這樣寫,透過測試的。 LJMP START ;跳到標號START執行 ORG 0023H ;序列中斷程式入口地址 LJMP RECV ;序列中斷程式返回START:MOV SCON,#50H ;設定成串列埠1方式 MOV TMOD,#20H ;波特率發生器T1工作在模式2上 MOV TH1, #0FDH ;預置初值9600BPS MOV TL1, #0FDH ; SETB EA SETB ES SETB TR1 ;啟動定時器T1 MOV R4, #04H MOV R0, #48H SJMP $ RECV: CLR RI MOV @R0,SBUF DEC R0 DJNZ R4,FT MOV R4, #04H MOV R0, #48HFT: RETI
你的程式就這麼多嗎,是還有,沒有發上來?那序列中斷程式怎麼是個死迴圈程式,怎麼沒有返回指令RETI?這程式能接收兩個位元組就算不錯了,按你這麼寫程式應該一個都不能接收。最後還有兩行SJMP RECV,這是死迴圈了。主程式最後是一條SJMP START,這又回到了從前了,一切從頭再來,那MOV SCON,#50H,這接收中斷標誌位RI 時刻被清0,就算是接收到一個位元組,但RI 被清掉了,就不會中斷了。給你改一下吧,這樣寫,透過測試的。 LJMP START ;跳到標號START執行 ORG 0023H ;序列中斷程式入口地址 LJMP RECV ;序列中斷程式返回START:MOV SCON,#50H ;設定成串列埠1方式 MOV TMOD,#20H ;波特率發生器T1工作在模式2上 MOV TH1, #0FDH ;預置初值9600BPS MOV TL1, #0FDH ; SETB EA SETB ES SETB TR1 ;啟動定時器T1 MOV R4, #04H MOV R0, #48H SJMP $ RECV: CLR RI MOV @R0,SBUF DEC R0 DJNZ R4,FT MOV R4, #04H MOV R0, #48HFT: RETI