千家论坛_弱电智能化技术与工程讨论(建筑智能,家居智能,人工智能)

路由交换
收藏本版 (7) |订阅

路由交换 今日: 3703 |主题: 18312|排名: 28 

发新帖
打印 上一主题 下一主题

51单片机汇编模拟串口通信程序...

[复制链接]
扶清灭洋 发布于: 2007-4-9 22:32 879 次浏览 1 位用户参与讨论
跳转到指定楼层

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

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

回复

使用道具 举报

已有1人评论

新浪微博达人勋

千家认证

沙发
SmartVDO 发表于 2007-4-15 18:16:00

觉得这个也许更好些,可以多线程

http://www.mcustudio.com/hwtj/2003427164150.asp 
[此贴子已经被作者于2007-4-15 18:18:03编辑过]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆 千家通行证登陆

本版积分规则

千家智客微信号
千家智客微信
玩物说商城
玩物说商城