📄 ex8-2ba.asm
字号:
$include (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件
ADDRR EQU 0100H
ORG 0000H
LJMP MAINR ;主程序入口
ORG 0023H ;串行中断入口地址
LJMP INTSER ;转至串行口中断服务程序
ORG 0100H
MAINR:MOV SP,#60H
MOV PCON,#80H ;波特率加倍
MOV SCON,#10010000B ;置串行口为工作方式2,允许接收
MOV DPTR,#ADDRR ;数据指针首址
MOV R0,#00H ;接收数据字节数初值
SETB ES ;串行口开中断
SETB EA ;CPU开中断
SJMP $ ;等待中断串行口中断服务程序:
INTSER:JB RI,LOOPR1 ;判断是否接收中断,若RI=1,则转接收程序入口
CLR TI ;若RI=0,必有TI=1,是发送中断,故应清零
LJMP ENDR ;跳至中断返回程序
LOOPR1:CLR RI ;清接收中断标志
MOV A,SBUF ;读取接收的数据
MOV C,P ;奇偶校验
JC LOOPR2 ;如8位数为奇,则转LOOPR2再检测RB8位
ORL C,RB8 ;8位数为偶,若RB8=1,则奇偶校验错误,转LOOPR3
JC LOOPR3
LJMP LOOPR4 ;补偶正确,转LOOPR4
LOOPR2:ANL C,RB8 ;8位数为奇,再检测RB8位
JC LOOPR4 ;RB8=1,补偶正确,转LOOPR4
LOOPR3:MOV A,#0FFH ;发出应答信息"0FFH"给甲机,表明数据不正确
MOV SBUF,A
LJMP ENDR ;跳至中断返回程序
LOOPR4:MOVX @DPTR,A ;将接收的正确数据送数据缓冲区
MOV A,#00H ;发出应答信息"00H"给甲机,表明数据传送正确,
;甲机应发送下一个数据
MOV SBUF,A
INC R0 ;修改指针
INC DPTR
CJNE R0,#80H,ENDR;若128B数据没有接收完毕,则跳至中断返回
CLR ES ;接收完毕,关串行口中断
ENDR:RETI ;中断返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -