新人求助51汇编串行通信问题
时间:10-02
整理:3721RD
点击:
本人小菜一枚,利用51假期学习51汇编,程序如下,结果是当上位机发送数据后,再读回来时显示00,跪求大神解答。
ORG 0000H
START: AJMP MAIN
ORG 0023H
AJMP COM_INT
MAIN: MOV SP,#30H ;设置堆栈指针位置
MOV P2,#00H ;关闭所有LED,用于检测问题
ACALL InitISR ;初始化串行中断
HEAR: SETB P2.7 ;检测代码段的执行情况
AJMP HEAR
InitISR: MOV TMOD,#20H ;定时器1工作于方式2
MOV TH0,#0F3H ;设置波特率为4800bps
MOV TL0,#0F3H
MOV PCON,#80H ;波特率加倍
MOV SCON,#50H ;串行口方式1
SETB EA ;开总中断
SETB TR1 ;打开定时器T1
SETB ES ;开串行中断
SETB P2.6 ;检测代码段的执行情况(OK)
RET
COM_INT:SETB P2.5 ;检测代码段的执行情况(从PC端读取数据)
JNB RI,$ ;等待接收完成
CLR RI ;等待下次读取数据
MOV R0,SBUF ;读SBUF数据
MOV SBUF,R0 ;立即向SBUF写数据
JNB TI,$ ;等待发送完成
CLR TI
SETB P2.4 ;检测代码段的执行情况(写数据)
RETI
END
ORG 0000H
START: AJMP MAIN
ORG 0023H
AJMP COM_INT
MAIN: MOV SP,#30H ;设置堆栈指针位置
MOV P2,#00H ;关闭所有LED,用于检测问题
ACALL InitISR ;初始化串行中断
HEAR: SETB P2.7 ;检测代码段的执行情况
AJMP HEAR
InitISR: MOV TMOD,#20H ;定时器1工作于方式2
MOV TH0,#0F3H ;设置波特率为4800bps
MOV TL0,#0F3H
MOV PCON,#80H ;波特率加倍
MOV SCON,#50H ;串行口方式1
SETB EA ;开总中断
SETB TR1 ;打开定时器T1
SETB ES ;开串行中断
SETB P2.6 ;检测代码段的执行情况(OK)
RET
COM_INT:SETB P2.5 ;检测代码段的执行情况(从PC端读取数据)
JNB RI,$ ;等待接收完成
CLR RI ;等待下次读取数据
MOV R0,SBUF ;读SBUF数据
MOV SBUF,R0 ;立即向SBUF写数据
JNB TI,$ ;等待发送完成
CLR TI
SETB P2.4 ;检测代码段的执行情况(写数据)
RETI
END
新人不知道怎么关贴,是定时器初始化成T0了,真是悲了个剧的说~