历史上的今天
今天是:2025年02月17日(星期一)
2020年02月17日 | PC机与PIC单片机主从式多机通讯及其在数据检测系统
2020-02-17 来源:eefocus
简介:主要针对煤气报警器检测系统的数据传输问题,提出一种PC机与多台PIC单片机主从式串行异步通讯的方式,给出硬件电路图、通信协议、软件流程图及其在实际的数据检测系统中应用时的注意事项。
在煤气报警器的出厂检验中,需要对其关键部件气体传感器的工作情况进行监测。系统框图如图1所示。

在这个气体传感器监测系统中,使用了多台PIC单片机作为下位机采集气体传感器的工作状态数据及环境参数(环境温度,环境湿度等参数),并按照上位机的要求将采得的数据传送给PC机。上位机与各下位机之间采用主从式的异步串行通讯方式,即下位机接到上位机的通讯信号时才做出响应,否则将一直做采集数据的工作。所采用的下位机型号为PIC16C711,它体积小,功能强,并集成了A/D转换器,但是它没有专门的串行通讯口及相关的控制字和标志位,因此,采用普通I/O口,并参照MSC-51单片机的串行通讯控制字SM2的功能和本通讯系统的特点,提出一种新的通讯协议,实现了主从式的多机串行通讯,实际应用中取得了良好的效果。
1硬件电路
由于该监测系统处于非工业环境中,干扰相对较小,并且上位机与下位机之间距离较近,因此数据传输的可靠性可以保证。双方通讯通过软件握手,因此只使用3根线即可。电路图如图2所示。

由于PIC16C711没有串行通讯口,因此,我们是用PIC16C711的RA4脚作为接收脚,RA2作为发送脚,通过编程来模拟串行通讯的接收和发送的。之所以采用RA4作为接收脚,是因为下位机总是在采集数据,因此接收上位机的通讯信号采用的是中断方式,为此必须准确有效地检测到上位机发来的命令字的起始位。虽然PIC单片机B口的高4位也有电平变化可引起中断的功能,但是在本系统中,B口作为本机地址信息,其电平高低已被固定,因此必须使用RA4脚作为接收引脚。PIC16C711的RA4脚是双功能端口,既可以作为普通I/O脚,也是RTCC(定时器/计数器)的外部时钟引脚,因此,可将RTCC设置为计数器方式,并由OPTION寄存器将RTCC设置为由外部时钟的下降沿触发,使其增量,再将RTCC寄存器得初始值设为FFh。这样,当上位机发来的命令字的起始位的下降沿使RTCC从FFh变为00的同时,产生了中断,进入中断程序后,再次对RA4脚采样以确保RA4脚上的跳变不是闪变,这样就可以准确地接收上位机的命令了。
2通讯协议
由于PIC16C711没有专门的串行通讯的控制字和标志位,因此我们在分析MSC-51单片机的有关多机通讯的控制字和标志位的工作原理的基础上,结合本监测系统数据传输的特点,提出一种简便的通讯协议。
鉴于上位机对下位机发送的命令只有3种:呼叫、发送、停止发送。呼叫命令即是上位机欲与之通讯的下位机的编号,而发送和停止发送命令只要不与呼叫命令重复,即可以将下位机的地址编号,同样作为数据(命令)来发送。具体方法是,在单片机的程序中,设置一个标志寄存器FLAG,将它的某一位(如第7位,即FLAG(7))作为控制位,先将其设为0。各下位机在接收到上位机命令之后,首先查看FLAG(7)为1还是为0,如果FLAG(7)为1,则转入通讯程序段继续执行;若为0则将接收到的命令与本机地址相比较,若不同,则不做任何动作返回,FLAG(7)仍为0,即不论上位机发送的是何种命令,都与自己无关(呼叫命令与其他命令已约定好不相重复);若相同(这种情况说明上位机此时确实发送的是呼叫命令)则将FLAG(7)置为1,表示已得知上位机要与自己通讯,同时将本机地址传给上位机作为回应。当上位机再次发来命令时,即可实现一对一的通讯,程序流程图如图3所示。

上位机与下位机通讯采用CRC循环冗余码进行校验,此处不再赘述。
3注意事项
如图1所示,环境参数采集模块与器件参数采集模块所需采集数据的对象不同,因此,上位机对这两个模块数据的采集时序安排也不同。在程序设计中充分利用定时器Timer的触发事件的时间,即可使两种类型的数据不致混淆 并且也不影响数据的实时更新。
上位机程序用VB 6.0语言编写,使用的是MSComm控件,它有许多重要属性,如settings属性、Rthreshold属性、InputMode属性、InputLen属性等, 这些属性设置的正确与否关系到通讯的质量和成败。
另外,由于单片机发送的是16进制数,每一个数占用1个字节,因此,上位机应按照二进制数的方式接收数据,即InputMode属性设定为Input ModeBinary,同时为使接收正确,程序代码编写如下:

4结语
结合煤气报警器检测系统数据通讯中的实际情况,提出一种方便实用的PC机与PIC单片机主从式多机通讯的通讯协议,据检测系统的数据传输中取得了良好的效果。
参考文献
1范逸之,陈立元,等.利用Visual Basic实现串并行通信技术.北京:清华大学出版社,2001
2[美]Jan Axelson著,精英科技译 串行端口大全.北京:中国电力出版社,2001
3窦振中.PIC系列单片机原理和程序设计.北京:北京航空航天大学出版社,2000
4林巧玲,兰浩,谢国栋.用VB实现PC机与MCS-51单片机的主从式通信.电工技术学报,1999,14(6)
上一篇:PIC单片机在线调试中的一些题目
下一篇:基于PIC单片机的测温网络的开发
史海拾趣
|
请教一个boa的问题 cgi串口程序在arm上单独运行可以,但是用boa服务器调用该串口程序时,程序报错:不能打开串口。 还有一个问题就是我怎么不能使用post传递数据,user已经改为root 谢谢 … 查看全部问答> |
|
keil MDK启动文件分析---基于LPC2100系列(其实都是相通的) 转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性。MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS1.2编译为25.4KB(都是bin格式),但用MDK编译出来仅有19.5KB( ...… 查看全部问答> |
|
关于MC9S12XS128 单片机之间 SPI通信的一些问题 最近在做一个东西,上面用到了两篇XS128之间的主从机通信一片主机一片从机。下面用A(主机) B(从机)代替单功形式,A通过直接写数据寄存器吧数据发送到B,B生成中断响应 接收数据。完全好用在尝试A接收B的数据时。首先B写数据寄存器,进入死 ...… 查看全部问答> |
|
我在CCS4中创建了一个“swi_example”的项目(其实是CCS4自带的示例)。再将NewTargetConfiguration.ccxml文件添加,以及 .cmd 文件(复制以前在非dsp/bios项目用过的cmd文件)。 这样,编译时,CCS显示: .......... --preproc_with_co ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:40 编辑 我在一个电路上看到一个芯片,应该是TI的,贴片封装,10个引脚,上面第一行写着72 TI,第二行写着JAAQ,大家是否知道啊,还有就是我不太明白这个贴片上写的JAAQ代表什么意思,72是不是就是人们常说的器 ...… 查看全部问答> |




