原创 51单片机模拟串口程序

2007-11-9 15:31 3048 4 4 分类: MCU/ 嵌入式
T2作为波特率控制
;UART_RXD
是硬中断01口,如果能进入中断,说明该线有一个起始位产生,进入中断后调
;用下面的接收程序。退出硬中断之前还需要将硬中断标志重新复位。
;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        

      MOV C,UART_RXD
      MOV ACC.5,C
    
      JNB TF2,$
      CLR TF2
    
      JNB TF2,$
      CLR TF2         
      MOV C,UART_RXD
      MOV ACC.6,C
    
      JNB TF2,$
      CLR TF2
    
      JNB TF2,$
      CLR TF2         
      MOV C,UART_RXD
      MOV ACC.7,C
    
      JNB TF2,$
      CLR TF2         
      JNB UART_RXD,$      ;
等待停止位,并重新复位计数器
      SETB UART_RXD
    
      POP DPL
      POP DPH
      POP IE
      RET

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条