- 帖子
- 219
- 主题
- 115
- 精华
- 2
- 积分
- 480
- 在线时间
- 285 小时
- 注册时间
- 2007-5-27
|
T2作为波特率控制
UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调
用下面的接收程序。退出硬中断之前还需要将硬中断标志重新复位。
UART_TXD 是任何其它IO即可。
- UART_SEND:
- PUSH IE
- PUSH DPH
- PUSH DPL
- PUSH PSW
- PUSH 00H
- PUSH ACC
- CLR EA
- SETB UART_TXD ;START BIT
- MOV R0,A
- CLR TR2 ;TR2置1,计数器2启动,时间计数启动。
- MOV A,RCAP2L;计数器2重新装载值
- MOV TL2,A ;置计数器2初值 ;T2需要重新装载
- MOV A,DPH
- MOV A,RCAP2H
- MOV TH2,A
- MOV A,R0
- SETB TR2 ;TR2置1,计数器
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2
- CLR UART_TXD ;START BIT
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2
- MOV R0,#08H
- UART_SEND_LOOP:
- RRC A
- MOV UART_TXD,C ;8 BIT
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2
- DJNZ R0,UART_SEND_LOOP
- SETB UART_TXD ;END BIT
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2
- POP ACC
- POP 00H
- POP PSW
- POP DPL
- POP DPH
- POP IE
- RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- UART_REC:
- PUSH IE
- PUSH DPH
- PUSH DPL
- CLR EA
- CLR TR2 ;TR2置1,计数器2启动,时间计数启动。
- MOV A,RCAP2L;计数器2重新装载值
- MOV TL2,A ;置计数器2初值 ;T2需要重新装载
- MOV A,DPH
- MOV A,RCAP2H
- MOV TH2,A
- JB UART_RXD,$ ;REC
- SETB TR2 ;TR2置1,计数器2启动,时间计数启动。
- JNB TF2,$
- CLR TF2 ;0.5 BIT
- JNB TF2,$
- CLR TF2 ;1 BIT
- JNB TF2,$
- CLR TF2 ;1.5 BIT
- MOV C,UART_RXD
- MOV ACC.0,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;2.5
- MOV C,UART_RXD
- MOV ACC.1,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;3.5
- MOV C,UART_RXD
- MOV ACC.2,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;4.5
- MOV C,UART_RXD
- MOV ACC.3,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;5.5
- MOV C,UART_RXD
- MOV ACC.4,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;6.5
- MOV C,UART_RXD
- MOV ACC.5,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;7.5
- MOV C,UART_RXD
- MOV ACC.6,C
- JNB TF2,$
- CLR TF2
- JNB TF2,$
- CLR TF2 ;8.5
- MOV C,UART_RXD
- MOV ACC.7,C
- JNB TF2,$
- CLR TF2 ;9.5
- JNB UART_RXD,$ ;等待停止位,并重新复位计数器
- SETB UART_RXD
- POP DPL
- POP DPH
- POP IE
- RET
复制代码 |
|