📄 uar.asm
字号:
;********************UAR********************
;本程序实现USART异步方式连续接收数据并进行奇校验,在4M的主频下波特率为9600。
;入口参数:无。
;出口参数:接收到的数据在SOU中,如果出错,则TEMP3=0FFH。
;占用资源:W,STATUS,INT,023H,024H,025H,028H,029H,07FH,07EH,17FH, 二重堆栈。
;说明: 1.使用该程序需在中断入口程序中填入如下两条指令
; BTFSC PIR1,RCIF
; GOTO RCINT
IFNDEF UAR1
#DEFINE UAR1
INCLUDE "OECHK.ASM"
SAVEW EQU 07FH ;现场保护中保存W的地址
SAVES EQU 07EH
UAR BSF STATUS,RP0
MOVLW 19H
MOVWF SPBRG
BSF TXSTA,BRGH ;高速模式,波特率为9600
BCF TXSTA,SYNC ;异步模式
BSF PIE1,RCIE ;开串行口中断
BCF STATUS,RP0
BCF RCSTA,FERR
BSF RCSTA,RX9 ;接收9位数据
BSF RCSTA,CREN ;开始连续接收
BSF RCSTA,SPEN ;使能串行口
BSF INTCON,PEIE
BCF PIR1,RCIF ;清中断标志
BSF INTCON,GIE
RETURN
;*****************接收中断服务程序***************
RCINT MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保护现场
BTFSC RCSTA,FERR
GOTO ANERROR ;发生桢格式错误
CLRF TEMP3
BTFSC RCSTA,RX9D
DECF TEMP3,F ;记录奇偶校验位
MOVF RCREG,W
MOVWF SOU
MOVLW 0FFH
CALL OECHK ;奇校验
RLF TEMP3,W
SUBWF TEMP3,F
BTFSS STATUS,Z
GOTO ANERROR
BACK SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢复现场
RETFIE
ANERROR CLRF TEMP3
DECF TEMP3,F
GOTO BACK
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -