📄 ex8-2aa.asm
字号:
$include (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件
ADDRT EQU 0100H
ORG 0000H
LJMP MAINT ;跳至主程序入口地址
ORG 0023H ;串行口中断服务程序入口
LJMP INTSET
MAINT:MOV SP,#60H
MOV PCON,#80H ;波特率加倍
MOV SCON,#10010000B ;置工作方式2,并允许接收
MOV DPTR,#ADDRT ;设置数据块首址ADDRT的地址指针
MOV R0,#00H ;设置发送字节初值
SETB ES ;允许串行口中断
SETB EA ;CPU开中断
MOVX A, @DPTR ;取第一个发送数据
MOV C,P ;数据补偶
MOV TB8,C
MOV SBUF,A ;启动串行口,发送数据
SJMP $
;中断服务程序
INTSET:JB RI,LOOPT1 ;判断是否接收中断,若RI=1,则转接收乙机发送的应答信息
CLR TI ;因RI=0,则TI=1,表明是甲机发送数据的中断请求
LJMP ENDT ;甲机发送一数据完毕跳至中断返回程序
LOOPT1:CLR RI ;清接收中断标志
MOV A,SBUF ;取乙机的应答数据
SUBB A,#01H ;若乙机应答信息为"00H",数据传送正确,则转LOOPT2
JC LOOPT2
MOVX A,@DPTR ;若乙机应答信息为"0FFH",数据传送不正确,要求重新发送
MOV C,P
MOV TB8,C
MOV SBUF,A ;启动串行口,重发一次数据
LJMP ENDT ;跳至中断返回程序
LOOPT2:INC DPTR ;修改地址指针
INC R0 ;修改发送字节数计数值
MOVX A,@DPTR ;下一个数据补偶
MOV C,P
MOV TB8,C ;不能直接使用MOV TB8,P
MOV SBUF,A ;启动串行口,发送新的数据
CJNE R0,#80H,ENDT;判断128B数据是否发送完,若没有发送完,则中断返回
CLR ES ;全部发送完毕,禁止串行口中断
ENDT:RETI ;中断返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -