UARTと割り込みを使った8051でのシリアル通信を勉強しています。今日、私はこのコードに出くわしました。作者は、ポート 0 で受信するデータを常に転送していると言っています。転送が行われている方法は、8051 のシリアル通信の規則に違反していると思います。
org 00h
ljmp main
org 23h
ljmp serial_ISR
org 30h
main:
mov TMOD,#20h
mov TH1,#-03h
mov SCON,#50h
setb IE.7
setb IE.4
setb TR1
back:
mov A,P0
mov SBUF,A
sjmp back
serial_ISR:
jb TI,trans
mov R0,SBUF
clr RI
RETI
trans:
clr TI
RETI
私を混乱させているのは、back
ラベルで SBUF レジスタに常に書き込みを行っているため、前のデータが送信されるまで (TI フラグによって通知される) SBUF に書き込むべきではないという規則に違反していることです。
上記のコードで SBUF レジスタに常にデータを書き込むことは有効ですか? UART は正しいデータを送信しますか?
よろしく