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

2008-03-07 18:39:50来源: 互联网

  一、绪言

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

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

  二、设计概况

  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
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
MOV
POP
外部中断
PSW
空操作
符号说明
单片机系统
通信协议
CTP

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

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

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

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

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