新闻中心

EEPW首页>嵌入式系统>设计应用> 基于89C2051单片机的热表通讯模块的开发

基于89C2051单片机的热表通讯模块的开发

作者: 时间:2012-11-03 来源:网络 收藏


3.2  串行通信软件
普通I/ O 口模拟串口的软件编程实质上就是模拟异步通讯规程。异步通信规程是把一个字符看作一个独立的信息单元,并且字符出现在数据流中的相对时间是任意的。而每个字符中各数据位以固定的时间传送,因此这种传送在同一字符内部是同步的,而字符间是异步的。异步通信收发取得同步的方法,是采用在字符格式中设置起始位和停止位。但由于发送器和接收器不是使用同一个时钟,而是以各自时钟来划分每位的宽度,收发时钟的误差必然影响数据的正确采样,所以要求准确识别起始位的前沿。实际的做法是利用1 个16 倍波特率的时钟,在1 个位周期的1/ 16 时间内确定出字符的开始,接收器在每个时钟的上升沿采样数据输入线。若发现低电平,紧接着又连续采样到8 次均为低电平,则认定为起始位,以后每隔16 个时钟采样1 次数据。字符再同步过程见图4。
基于89C2051单片机的热表通讯模块的开发
图4  f = 16 倍波特率的字符再同步过程
在软件编程中,根据热表发送数据的波特率计算出数据位周期,而后再根据的晶振频率编写数据位周期延迟程序和半位周期延迟程序。当检测到INT0 (即P3. 2 端口) 为低电平时,外部中断触发,进入中断处理程序。首先,调用半位周期延时程序,判断是否为起始位,若是则再调用位周期延时程序,进行数据位的判断与接收,最后判断接收停止位。只要延时程序能准确地保证延时时间,就能完成对图4 中工作时序的模拟。另外,在接收数据帧各个位时,都连续地采样3 次,并遵循3 中取2 的原则来确定所检测的值。这样做很大程度上抑制了干扰,提高了信
号传输的可靠性。同理,发送数据时只要调整好发送数据帧各数据位之间的传输时间间隔,满足热表接收数据的波特率,就能完成热表对单片机发送数据的接收,程序流程图如图5 所示。
基于89C2051单片机的热表通讯模块的开发

3.3  通信协议
单片机的串行口工作于方式2 或方式3 时,数据帧由11 位数据组成:1 位起始位、9 位数据位、1 位停止位。在这两种方式下,第9 位数据是可控的标志位,只有第9 位的数据是“1”(代表地址帧) 时,串行口接口电路才会在接收完1 个数据后,向CPU 请求中断。因为PC 机的异步通信功能没有这样的通信格式,所以这种方式只适合单片机之间的多机通信。一般情况下,实现两种异型机之间的通信常采用以下几种方式:
(1) 用1 台单片机作为上位PC 机和下位单片机之间的“桥梁”,实现数据格式的转换;
(2) 在PC 机内安装异步通信适配卡,通过设计可编程芯片的运行方式,使之与单片机的多机通信方式一致;
(3) 设置上位机编程环境提供的串行通讯控件的属性来区分寻址指令和数据传送指令,进而实现通讯。
方法1 和方法2 硬件结构复杂,方法3 软件代码编写繁琐。在系统不复杂、任务不重、通信数据量不大的情况下,这些方法还不会有明显的缺陷,否则方法1 中的“桥梁”单片机和方法2 中的通信异步适配器将会成为通信信道的瓶颈,而方法3 中数据帧中的奇偶校验位通常用作发送地址码(通道号) 或数据的特征位,这样数据通信的校核会采用累加和校验的方法,采用这种方法不但软件开销和进行通信的数据量增加了,而且实时性也受到影响。
根据实际情况,采用了通信信息帧不区分数据帧和地址帧的方法,这样做不必使单片机工作在11 位异步收发方式下,使单片机和PC 机的串口工作方式一致。受到通信格式的启发,设计信息帧见图6 ,用1~3 个字节作为数据通信的“报头”,起同步作用;用1个或多个字节作为单片机的地址区别码来标识某个单片机(根据系统中下位机的个数决定) ;用来标志下位机工作性质的信息码可根据实际的情况在信息帧中灵活设置。


评论


相关推荐

技术专区

关闭