关 闭

新闻中心

EEPW首页 > 安全与国防 > 设计应用 > 基于AT89C51的单线双机通信协议

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

作者:时间:2008-03-07来源:网络收藏

  一、绪言

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

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

  二、设计概况

  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

  

  

   BIT 0B2H

  TSIOBIT 0B3H

  

  ORG 00H

  AJMPMAIN

  

  ORG 0BH

  AJMPINT_T0

  

  ORG 100H

  MAIN:

   SP,#50H

   KBUF0,#00H

   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:

   A

   A

  ;MOVP0,A

  KEYRD3:

  JMP FUNCTION

  KEYRD4:

  MOV KBUF1,A


上一页 1 2 3 4 5 6 下一页

评论


相关推荐

技术专区

关闭