;-----------------------------------------
;本示例已通过实际测试OK,可以照搬运用
;-----------------------------------------
ERRFLAG EQU 00H
UART_IP EQU 01H
;----------------------------------------------------
;UARTCON标志位定义
TB8 BIT UARTCON.3
RB8 BIT UARTCON.2
TIE BIT UARTCON.0
RIE BIT UARTCON.1
RPE BIT UARTPND.4 ;奇偶校验位检查标示
;UARTPND标志位定义
UTIP BIT UARTPND.0
URIP BIT UARTPND.1
TIP BIT UART_IP.0
RIP BIT UART_IP.1
ERRFLAG EQU 00H
UART_IP EQU 01H
;-----------------------------------------------------
;注意事项:
;如果P3.1作为RXD输入,则必须设定其为RXD_INPUT MODE
LD P3CONH,#11111010B ;set P3.6,P3.5 as open-drain output
LD P3CONL,#01100010B ;set P3.4,P3.3 as push-pull output
;set P3.2 as TXD
;set P3.1 as RXD
;set P3.0 as input with pull-up
;配置芯片各复用功能
;注意设置波特率必须切换到RAM BANK1页面
LD SYM,#01H ;选择REG PAGE1
LD 14H,#00H ;BRDATAH
LD 15H,#0FH ;BRDATAL
;10MHZ clock,set BAUT=38400 bit/s
LD SYM,#00H ;选择REG PAGE0
LD UARTPND,#00100000B ;enable parity bit
LD UARTCON,#10010011B ;set 9bit UART,BAUT=Fxx/16*(BRDATA+1)
;set Even parity,enable tx/rx interrupt
LD TACON,#01H ;set TA input clock=Fosc/1024=102.4us
;set TA as interval timer mode
;最大计时26MS
;disable TA interrupt
;-------------------------------------------------------------
;接收一个数据的过程,最长接收等待时间为1MS*100=100MS
;接收成功则数据在R0中
RX_ONE_DATA:
PUSH R5
EI
CLR ERRFLAG
OR TACON,#08H ;复位TA定时器
LD R5,#64H
WAIT_RX_DATA:
LD BTCON,#02H
TMBIT RIP
JR NZ,CHK_RX_DATA
;检查接收定时
CP TACNT,#0AH
JR ULE,WAIT_RX_DATA
OR TACON,#08H ;复位TA定时器
DEC R5
JR NZ,WAIT_RX_DATA
JR RX_FAIL_BACK ;如果时间溢出,接收失败
CHK_RX_DATA:
;检查奇偶校验位是否错
TMBIT RPE
JR NZ,RX_FAIL_BACK
CLRBIT RIP
LD R0,RX_DATA
;接收数据成功返回
CLR ERRFLAG
JR RX_DATA_EXIT
RX_FAIL_BACK:
LD ERRFLAG,#ER_COM
RX_DATA_EXIT:
POP R5
RET
;-------------------------------------------------------------
;向主机发送一个字节数据的过程,该字节可以是任何二进制数据
;数据在R0中
TX_ONE_DATA:
CLRBIT TIP
EI
LD UDATA,R0
WAIT_TX:
LD BTCON,#02H
LD WDTCON,#0AH
TMBIT TIP
JR Z,WAIT_TX
CLRBIT TIP
DI
RET
;---------------------------------------------------------------
UART_INT:
TMBIT URIP
JR NZ,RX_INT
TMBIT UTIP
JR NZ,TX_INT
JR END_INT
RX_INT:
LD RX_DATA,UDATA
CLRBIT URIP ;清接收中断标志
SETBIT RIP ;设置已接收标志
JR END_INT
TX_INT:
CLRBIT UTIP ;清发送中断标志
SETBIT TIP ;设置已发送完成标志
END_INT:
LD WDTCON,#0AH
LD BTCON,#02H
IRET
;--------------------------------------------------------------
|
相关备注: |
本示例已经实际测试通过 |
|