串口通信汇编程序问题,有代码和注释,请高手入....
测试时不管电脑发什么,单片机总是发回CA,到底为什么?代码如下:
/*-------------------------------------------------------------------
stc89c51rc单片机,24M晶振,在stc isp自带的串口调试助手上测试
程序目的是实现从pc发送字符1,2,3,单片机发回相应的字母h,e,j
-----------------------------------------------------------------------*/
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SINT ;串行中断服务
ORG 0030H
MAIN:
MOV SP, #70H
LCALL COMRE ;串口初始化
SJMP $
COMRE: ;设置串口工作方式1,定时器1作为波特率发生器,波特率设置4800
MOV TMOD, #20H ;定时器T1工作方式2
MOV TH1, #0F3H
MOV TL1, TH1
SETB EA ;开总终端和串行中断
SETB ES
MOV PCON, #00H ;波特率不倍增
MOV SCON, #50H ;串口工作方式1,REN=1,允许接收
SETB TR1
RET
SINT:
CLR ES ;禁止串行中断
CLR RI ;清接受标志位
MOV A, SBUF
MOV DPTR, #TABLE
CJNE A, #0FH, IN1 ;检查数据
MOV SBUF, #0FFH ;收到联机信号,发回联机信号
JNB TI, $ ;等待发送完毕
CLR TI ;清发送标志位
SETB ES ;重开中断
RETI ;中断返回
IN1:
CJNE A, #01H, IN2 ;判断是否收到1
MOVC A, @A+DPTR ;查找表中相应的字符
MOV SBUF, A ;发送h
JNB TI, $
CLR TI
SETB ES
RETI
IN2:
CJNE A, #02H, IN3 ;下面与收到1是处理方法相同
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $
CLR TI
SETB ES
RETI
IN3:
MOV A, #03H
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $
CLR TI
SETB ES
RETI
TABLE: DB '2', 'h', 'e', 'j'
END