基于AT89C51的单线双机通信协议

2008-03-07 18:39:50来源: 互联网 关键字:MOV  POP  外部中断  PSW  空操作  符号说明  单片机系统  通信协议  CTP

  一、绪言

  因工作需要,设计一单线双向双机通讯协议。要求主机通过其所带的键盘能控制主机和从机的显示,从机也能通过所带的键盘控制主机和从机的显示,主机和从机键盘所起的控制作用完全一致,显示也完全一致。

  另外,从机可以随时脱离主机。当从机从脱机状态连上主机时,要求从机能立即显示主机的键盘信息,即双机显示一致。

  二、设计概况

  1.整体时序:

  2.主机接收数据从机发送数据的时序:

  3.主机发送数据从机接收数据的时序:

 

  4.符号说明:

  S :开始位

  A :响应位

  E :结束位

  R :读端口

  W :写端口

  Dx:数据

  5.主从机同步原理:

  由图可知,主从机的读写是互不冲突的,任意时刻只允许一个写,但允许两个都处于读状态。从整体上讲,数据是按帧传输的,但从定时器中断方面来说,数据是按位传输的,因为一次定时器中断只传送一个位,而不是完整的一帧数据。在数据未开始传输前,从机IO口处于边沿中断接收状态,其定时器中断是关闭的。主机永远处于定时中断状态。当主机发出开始位之后,若存在从机,则从机会发出一个低电平响应;否则表示通讯失败,几个时钟周期之后,主机会接着发起下一次数据传输的开始位。在通讯过程中,任意一个响应位不成立均宣告通讯失败,同时此次通讯结束。

  综上所述,在数据传输开始时,靠“外部边沿中断”同步,在数据传输开始之后,靠“定时器中断”同步。

  6.协议的稳健性

  (1)速度问题:

  以单放机、CD机等的现控为例,由于处理器的主要任务为信号处理,所以要求通讯占用的时间越少越好,而且通讯数据量也不大,该协议正是基于该类设计的。由于每次只发送一位数据,故占用的MCU时间非常少.

  (2)可靠性问题:

  在该协议中,存在两个响应位、一个结束位,还有标志位,这些为数据的合法性的检测提供了依据。另外,由于主从通讯只需传输单放机、CD机等的“按键”或“工作状态”数据,故数据量根本用不着8位,多余的位可用于校验,例如采用奇偶校验、汉明码等。

  (3)效果检测

  通过由两块AT89C51组成的单片机系统试验,该协议工作完全正常,并具备即插即用功能,即在主机工作时,从机可以随时拔下插上而不会影响主从机工作状态及其显示。该协议已于国内某知名企业的单放机的大批量生产中采用。

  1.主机源程序

  ;主机程序

  KBUF0 EQU 24H ;键值临时缓冲

  KBUF1 EQU 25H ;键值缓冲

  KCNTEQU 26H ;键盘重复计数

  DLYD0 EQU 27H ;延迟变量

  DLYD1 EQU 28H ;延迟变量

  DLYD2 EQU 29H ;延迟变量

  

  RSCNT EQU 2AH

  

  RSI BIT 00H ;收发开始标志

  RSF BIT 01H ;收/发标志

  RSF0BIT 02H ;收发标志0

  RSF1BIT 03H ;收发标志1

  ;SDFBIT 04H ;有数据发送标志

  RDF BIT 05H ;有接收数据标志

  

  STATE EQU 2BH

  SDATX EQU 22H

  RDATX EQU 23H

  

  

  CTPIO BIT 0B2H

  TSIOBIT 0B3H

  

  ORG 00H

  AJMPMAIN

  

  ORG 0BH

  AJMPINT_T0

  

  ORG 100H

  MAIN:

  MOV SP,#50H

  MOV KBUF0,#00H

  MOV KBUF1,#00H

  MOV KCNT,#00H

  MOV STATE,#00H

  MOV SDATX,#00H

  MOV RDATX,#00H

  MOV RSCNT,#00H

  MOV 20H,#00H

  MOV P0,#00H

  CLR RSF

  MOV TH0,#00H

  MOV TL0,#00H

  MOV TMOD,#02H ;工作模式为定时方式2

  MOV TCON,#10H ;允许定时器0工作

  MOV IE,#82H

  LOOPX:

  CALLKEYREAD ;读键盘

  CALLDLY2MS;延迟2ms

  JMP LOOPX

  ;按键功能入口

  FUNCTION:

  MOV A,KBUF1

  CJNEA,#07FH,FUN1;+1

  ;MOVA,STATE

  ;ADDA,#01H

  MOV A,#01H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN1:

  CJNEA,#0F7H,FUN2;+2

  ;MOVA,STATE

  ;ADDA,#02H

  MOV A,#02H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN2:

  CJNEA,#0BFH,FUN3;+4

  ;MOVA,STATE

  ;ADDA,#04H

  MOV A,#03H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN3:

  CJNEA,#0FBH,FUN4;+8

  ;MOVA,STATE

  ;ADDA,#08H

  MOV A,#04H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN4:

  CJNEA,#0DFH,FUN5;+16

  ;MOVA,STATE

  ;ADDA,#10H

  MOV A,#05H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN5:

  CJNEA,#0FDH,FUN6;+32

  MOV A,STATE

  ;ADDA,#20H

  XRL A,#08H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN6:

  CJNEA,#0EFH,FUN7;+64

  MOV A,STATE

  ADD A,#40H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN7:

  CJNEA,#0FEH,FUN8;+128

  MOV A,STATE

  ADD A,#80H

  MOV STATE,A

  CPL A

  MOV P0,A

  ;SETB SDF

  JMP LOOPX

  FUN8:

  JMP LOOPX

  ;==================================================================

  KEYREAD:

  CLR P2.7

  SETBP2.6

  MOV A,P2

  ANL A,#0FH

  MOV KBUF0,A

  SETBP2.7

  CLR P2.6

  MOV A,P2

  ANL A,#0FH

  SWAPA

  ORL A,KBUF0

  MOV KBUF0,A

  CJNEA,KBUF1,KEYRD4

  MOV A,KCNT

  CJNEA,#03H,KEYRD1

  RET

  KEYRD1:

  INC A

  INC KCNT

  CJNEA,#03H,KEYRD5

  MOV A,KBUF1

  CJNEA,#0FFH,KEYRD2

  RET

  KEYRD2:

  POP A

  POP A

  ;MOVP0,A

  KEYRD3:

  JMP FUNCTION

  KEYRD4:

  MOV KBUF1,A

  MOV KCNT,#00H

  KEYRD5:

  RET

  ;===============================================================

  INT_T0:

  PUSHPSW

  PUSHA

  JBRSI,INT_T01

  SETBRSI

  MOV RSCNT,#00H

  POP A

  POP PSW

  RETI

  INT_T01 :

  MOV DPTR,#T0_ENTRY

  MOV A,RSCNT

  INC RSCNT

  RLA

  JMP @A+DPTR

  T0_ENTRY:

  AJMPINT_T010;设置开始位

  AJMPINT_T0N0

  AJMPINT_T020;终止开始位

  AJMPINT_T030;读响应

  AJMPINT_T0N0

  AJMPINT_T040;读标志0

  AJMPINT_T0N0

  AJMPINT_T050;读标志1

  AJMPINT_T0W0

  AJMPINT_T0R0

  AJMPINT_T0W1

  AJMPINT_T0R1

  AJMPINT_T0W2

  AJMPINT_T0R2

  AJMPINT_T0W3

  AJMPINT_T0R3

  AJMPINT_T0W4

  AJMPINT_T0R4

  AJMPINT_T0W5

  AJMPINT_T0R5

  AJMPINT_T0W6

  AJMPINT_T0R6

  AJMPINT_T0W7

  AJMPINT_T0R7

  ;AJMP INT_T0W8

  ;AJMP INT_T0R8

  ;AJMP INT_T0W9

  ;AJMP INT_T0R9

  AJMPINT_T0WE;写结束位(写数据)

  AJMPINT_T0RE;读结束位(读数据)

  AJMPINT_T0WAL ;写响应位(读数据)/终止结束位(写数据)

  AJMPINT_T0RA;读响应位(写数据)写结束

  AJMPINT_T0WAH ;终止响应位(读数据)读结束

  ;==============================================================

  INT_T0N0: ;空操作

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T010: ;发送开始位

  ;CLRCTPIO

  ;CLRTSIO

  MOV P3,#00H

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T020: ;终止开始位

  ;SETB CTPIO

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T030: ;读响应

  JNB CTPIO,INT_T031

  JMP ERROR1

  INT_T031:

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T040: ;读标志0

  JBCTPIO,INT_T041

  CLR RSF0;RSF0=0

  POP A

  POP PSW

  RETI

  INT_T041:

  SETBRSF0;RSF0=1

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T050: ;读标志1

  JBCTPIO,INT_051

  CLR RSF1;RSF1=0

  JBRSF0,INT_052

  JMP ERROR2;RSF:00错

  INT_052 :

  SETBRSF ;RSF:10主发从收

  MOV SDATX,STATE

  POP A

  POP PSW

  RETI

  INT_051 :

  SETBRSF1;RSF1=1

  JNB RSF0,INT_053

  JMP ERROR3;RSF:11错

  INT_053 :

  CLR RSF ;RSF:01主收从发

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T0W0:

  JNB RSF,T0W02

  JNB SDATX.0,T0W01

  ;SETB CTPIO

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  T0W01 :

  ;CLRCTPIO

;CLR

[1] [2] [3] [4]

关键字:MOV  POP  外部中断  PSW  空操作  符号说明  单片机系统  通信协议  CTP

编辑:ssb 引用地址:http://www.eeworld.com.cn/afdz/2008/0307/article_417.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:楼宇对讲系统中音频电路的设计
下一篇:基于单片机与Lonworks的可视对讲系统设计

论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
MOV
POP
外部中断
PSW
空操作
符号说明
单片机系统
通信协议
CTP

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved