找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3656|回复: 1
打印 上一主题 下一主题
收起左侧

单片机双机通讯 仿真+汇编源程序

[复制链接]
跳转到指定楼层
楼主
一个51单片机做的双击通讯汇编程序  调试通过  proteus仿真+源代码   给51黑电子论坛的朋友们分享下.




所有资料下载:
单片机与单片机之间的串口通信.zip (39.38 KB, 下载次数: 30)


发送程序:
  1. ;本程序收发数据采用查询方式
  2. ORG 0000H
  3. AJMP START
  4. ORG 0030H
  5. START:MOV 30H,#0C0H   ;传送的16个数据(0~F)
  6.       MOV 31H,#0F9H
  7.       MOV 32H,#0A4H
  8.       MOV 33H,#0B0H
  9.       MOV 34H,#99H
  10.       MOV 35H,#92H
  11.       MOV 36H,#82H
  12.       MOV 37H,#0F8H
  13.       MOV 38H,#80H
  14.       MOV 39H,#90H
  15.       MOV 3AH,#88H
  16.       MOV 3BH,#83H
  17.       MOV 3CH,#0C6H
  18.       MOV 3DH,#0A1H
  19.       MOV 3EH,#086H
  20.       MOV 3FH,#08EH
  21.       MOV TMOD,#20H  ;定时器1置为方式2
  22.       MOV TH1,#0F4H  ;装载定时器初值,波特率2400
  23.       MOV TL1,#0F4H  
  24.       CLR EA         
  25.       SETB TR1       ;启动定时器
  26.       MOV PCON,#00H  
  27.       MOV SCON,#50H  ;设定串口方式1,且准备接收应答信号
  28. LOOP1:MOV SBUF,#0E1H ;发联络信号
  29.       JNB TI,[        DISCUZ_CODE_4        ]nbsp;      ;等待一帧发送完毕
  30.       CLR TI         ;允许再发送
  31.       JNB RI,[        DISCUZ_CODE_4        ]nbsp;      ;等待2号机的应答信号
  32.       CLR RI         ;允许再接收
  33.       MOV A,SBUF     ;2号机应答后,渎至A
  34.       XRL A,#0E2H    ;判断2号机是否准备完毕
  35.       JNZ LOOP1      ;2号机未准备好,继续联络
  36. LOOP2:MOV R0,#30H    ;2号机准备好,设数据块指针初值
  37.       MOV R7,#10H    ;设定数据块长度初值
  38.       MOV R6,#00H    ;清校验和单元
  39. LOOP3:MOV SBUF,@R0   ;发送一个数据字节
  40.       MOV A,R6      
  41.       ADD A,@R0      ;求校验和
  42.       MOV R6,A       ;保存校验和
  43.       INC R0
  44.       JNB TI,$
  45.       CLR TI
  46.       DJNZ R7,LOOP3  ;整个数据块是否发送完毕
  47.       MOV SBUF,R6    ;发送校验和
  48.       JNB TI,$
  49.       CLR TI
  50.       JNB RI,[        DISCUZ_CODE_4        ]nbsp;      ;等待2号机的应答信号
  51.       CLR RI
  52.       MOV A,SBUF     ;2号机应答,读至A
  53.       JNZ LOOP2      ;2号机应答”错误“,转重新发送
  54.       RET            ;2号机应答”正确“,返回                 
复制代码

接受程序:
  1. ;本程序收发数据采用查询方式
  2. ORG 0000H
  3. AJMP START
  4. ORG 0030H
  5. START:MOV TMOD,#20H  ;定时器1置为方式2
  6.       MOV TH1,#0F4H  ;装载定时器初值,波特率2400
  7.       MOV TL1,#0F4H  
  8.       CLR EA         
  9.       SETB TR1       ;启动定时器
  10.       MOV PCON,#00H  
  11.       MOV SCON,#50H  ;设定串口方式1,且准备接收
  12. LOOP1:JNB RI,[        DISCUZ_CODE_5        ]nbsp;      ;等待1号机的联络信号
  13.       CLR RI
  14.       MOV A,SBUF     ;收到1号机信号
  15.       XRL A,#0E1H    ;判是否为1号机联络信号
  16.       JNZ LOOP1      ;不是一号机联络信号,再等待
  17.       MOV SBUF,#0E2H ;是1号机联络信号,发应答信号
  18.       JNB TI,$
  19.       CLR TI
  20.       MOV R0,#30H    ;设定数据快地址指针初值
  21.       MOV R7,#10H    ;设定数据块长度初值
  22.       MOV R6,#00H    ;清校验和单元
  23. LOOP2:JNB RI,$
  24.       CLR RI
  25.       MOV A,SBUF
  26.       MOV @R0,A      ;接收数据转储
  27.       INC R0
  28.       ADD A,R6       ;求校验和
  29.       MOV R6,A
  30.       DJNZ R7,LOOP2  ;判断数据块是否接收完毕

  31.       JNB RI,[        DISCUZ_CODE_5        ]nbsp;      ;完毕,接收1号机发来的校验和
  32.       CLR RI
  33.       MOV A,SBUF
  34.       XRL A,R6       ;比较校验和
  35.       JZ END1        ;校验和相等,跳至发正确标志
  36.       MOV SBUF,#0FFH ;校验和不相等,发错误标志
  37.       JNB TI,[        DISCUZ_CODE_5        ]nbsp;      ;转重新接收
  38.       CLR TI
  39.       SJMP LOOP2
  40. END1: MOV SBUF,#00H
  41. JS1:  MOV R0,#30H     ;显示接到的数据
  42. JS3:  MOV A,@R0
  43.       MOV P0,A
  44.       ACALL DELAY
  45.       INC R0
  46.       MOV A,R0
  47.       CJNE A,#40H,JS2
  48.       AJMP JS1
  49. JS2:  AJMP JS3

  50. DELAY: MOV  R4,#04H
  51.    D1: MOV  R7,#0FFH
  52.    D2: MOV  R6,#0FFH
  53.        DJNZ R6,$
  54.        DJNZ R7,D2
  55.        DJNZ R4,D1
  56.        RET
  57.        END            
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:140275 发表于 2016-9-26 21:07 | 只看该作者
谢谢楼主!下载学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表