c51单片机实用通信协议
- 格式:doc
- 大小:61.00 KB
- 文档页数:4
c51单片机实用通信协议
一、 基本格式:
通信头->巴克码->地址字->长度字->命令字->信息位->校准字
1. 通信头:占1~8个字节,表通信开始(0x00、0xff不能用作通信头);
2.巴克码:占1字节,一般为0x72,表通信头结束;
3.地址字:表终端的地址,占1字节(0x00作为广播地址);
4.长度字:占1字节,表示从地址字到信息位之间的字节数;
5.命令字:占1字节,指示终端的不同操作;
6.信息位:不定长,从0~252字节;
7.校验位:两个字节,采用和校验及CRC校验。
二、应答
1.如果终端接收正确,则应答ACK;如果终端接收错误,则应答NAK;
2.发送方收到ACK,此次通信结束;
3.发送方收到NAK,重发刚才的命令字(最多7次);
4.如果发送方发完数据后无应答,隔0.5~1S后重发(最多7次)。
三、ACK/NAK的格式
通信头->巴克码->地址字->长度字->命令字->0x06、0x06、、0x06(1~8个)
(若信息位长时,分包传输,信息位的第一位是包号0x01,最后1包为0xff)
=============================================================
=============================================================
单片机多机并行通讯的一种方法
1 简介
本文介绍的单片机多机并行通讯系统,使用89C51作为主机,多片89C2051作为从机。
(89C2051为20脚300MIL封装,带有2K FLASH E2PROM的单片机,除了少了两个并口外,具备
MCS-51系列单片机所有功能。因为其体积小,功能强,必将在单片机应用领域内广泛使用)。
这种并行通讯方法适用于在多站点,多层次的检测和控制系统中充当通信控制器的角色;也适合
于用作单片机串行口扩充电路。
图1 芯片的逻辑图及四种工作状态
图2 单片机并行通信原理框图
2 三态总线缓冲寄存器74HC646
在单片机构成的多机并行通讯系统中,总线上的信息交换一般采用PIO(并行接口)和双端
口寄存器等方法,并辅助以总线仲裁电路。通常使用的并行接口芯片有8155,8255等。本文介
绍一种简单的并行接口电路,它既能取代8255等芯片,还能使电路结构更加简单和紧凑。该电
路由一片74HC74和一片74HC646(300MIL窄封装)构成。
74HC646是三态总线缓冲寄存器,其实也是一个双端口共享存储器,只是共享存储区很小的,
仅有一个数据输入寄存器与一个数据输出寄存器,用它作为单字节通信数据的临时中转站,每传
送一个字节,主从机间握手一次,把数据取走后再继续下一字节的通信。74HC646可以将两条总
线的数据分别锁存,再由芯片内部总线进行数据交换。74HC646具有四种工作状态,利用对这四
种工作状态的控制,可以实现多个单片机利用数据口进行数据交换,省下其余口线做其他的工作,
如驱动LED,控制开关等。74HC646芯片的逻辑图及四种工作状态如图1所示。
3 单片机并行通信原理
74HC646对数据进行的锁存只为完成数据交换作了信息准备工作,单片机多机之间通讯的实
现还必须具备通讯联络手段,以使单片机了解总线上的工作状态,避免发生总线冲突。这里采用
四线握手联络:两条由发送方送接收方,通知接收方数据已经准备好(如图2中的TFNE*,RFNE*);
两条由接收方送发送方,通知发送方数据已经收到(如图2中的TFNF*,RFNF*)通信联络信号是
由74HC74电路产生。单片机并行通信原理框图如图2所示。
4 多机并行通信协议
上面的并行通讯的单片机没有封锁电路以防止主从机向74HC646同时写数或同时读数,因此
各单机在双向传输时,必须根据状态信息来控制自己的下一步操作,即进行联络,通过软件、硬
件通讯协议配合才能避免造成错误,保证对74HC646不会造成竞争冲突。因此,除了上面所讲的
联络电路之外,在编制软件时,还必须遵从以下协议:
. 主机向74HC646发送数据时,必须保证74HC646接收寄存器为空。
. 主机与从机间的数据传输要通过74HC646,协议不允许双方同时对74HC646进行操作,必
须根据状态信息来控制自己的操作。
5 通讯协议的格式与执行过程
5.1 信息格式
在并行通讯的异步通信传输时,也同样存在帧的类型及格式问题,可以采用串行通讯类似的
帧格式:
特征字
长度
数据1
数据2
...
校验码
5.2 通讯协议的执行过程
下面以检测方式为例说明通讯协议的执行过程。
5.2.1 主机向从机写数过程:(主机写, 从机读)
主机向74HC646写数据,然后通知从机有数据来,从机从74HC646中读取数据。
① 主机读取状态位,检测TFNF*位是否为零。
②若TFNF*=1,主机暂时等待;若TFNF*=0,主机向74HC646写数据,使TFNF*=1,同时
使TFNE*=0。
③ 从机读取状态位,检测TFNE*位是否为零。若TFNE*=1,从机暂时等待;若TFNE*=0,
从机从74HC646读数据,使TFNE*=1,同时使TFNF*=0。
④ 主机再次检测状态位TFNF*是否为零,若为“0”,说明从机已将数据从74HC646中取走,
主机可发送下一数据。
5.2.2 主机读从机过程:(从机写, 主机读)
从机向74HC646写数据,然后通知主机有数据来,主机收到信号后,将数据从74HC646中取
走。
① 从机读取状态位,检测RFNF*位是否为零。
②若RFNF*=1,从机暂时等待;若RFNF*=0,从机向74HC646写数据,使RFNF*=1,同时使
RFNE*=0。
③ 主机读取状态位,检测RFNE*位是否为零。若RFNE*=1,主机暂时等待;若RFNE*=0,
主机从74HC646读数据,使RFNE*=1,同时使RFNF*=0。
④ 从机再次检测状态位RFNF*是否为零,若为“0”,说明从机已将数据从74HC646中取走,
主机可发送下一数据。
6 流程图(检测方式)
采用检测方式的程序流程如图3所示。
图3 采用检测方式的程序流程图
若使用中断方式, 只需对执行过程和流程图稍加修改即可。