C51 汇编程序 循环问题 不能实现

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:38:40
下面一个程序我们调试了很久,主要是要实现串行口的通信问题,在主机发送给单片机信号ff(十六进制)后,单片机向主机发送16个“K”字符,但是始终不能实现,困扰了很多天后,决定向网络求教,希望各位高手不吝赐教,万分感谢~~

C51程序如下:
ORG 0000H
AJMP START
ORG 0023H
LJMP SEND1
ORG 0030H
START: MOV SP,#5FH
MOV TMOD,#20H
MOV TH1,#0FAH
MOV SCON,#50H
MOV PCON,#80H
MOV B,#10H
SETB TR1
SETB TI
SETB EA
SETB ES
AJMP $
SEND1: CLR EA
MOV A,#55H
JNB TI,$
CLR TI
MOV SBUF,A
WAIT: JNB RI,$
CLR RI
MOV A,SBUF
XRL A,#0FFH
JNZ WAIT
SJMP SEND2
SEND2: CLR RI
CLR TI
MOV A,#'K'
MOV SBUF,A
DJNZ B,SEND2
RETI
END

ORG 0023H
LJMP SEND1

开放中断后,每当“接收到了”一个字节、或者“发送完了”一个字节,程序会自动转移到SEND1。
在SEND1程序中,应该保存刚刚收到的“一个字节”、或者发送“下一个字节”。但是你在SEND1程序中,做了太多的事情。

此外:
SEND2:
CLR TI
MOV A,#'K'
MOV SBUF,A
JNB TI,$ ;应该等待发送结束
DJNZ B,SEND2