51单片机汇编模拟串口通信程序
2012-12-06

汇编编写的模拟串口通信程序

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


可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号