标题: 单片机双机通讯 仿真+汇编源程序 [打印本页]

作者: 51黑ff    时间: 2016-9-26 12:47
标题: 单片机双机通讯 仿真+汇编源程序
一个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            
复制代码




作者: 1534545848    时间: 2016-9-26 21:07
谢谢楼主!下载学习




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1