历史上的今天
返回首页

历史上的今天

今天是: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)

推荐阅读

史海拾趣

Efficient Power Conversion公司的发展小趣事

随着EPC公司在氮化镓技术领域的领先地位日益稳固,一些竞争对手开始试图通过不正当手段获取其技术。为了维护自身的合法权益,EPC公司积极寻求法律途径来保护其专利。2023年,EPC公司向美国联邦法院和美国国际贸易委员会提起诉讼,指控英诺赛科(珠海)科技有限公司及其子公司侵犯了其基础专利组合中的四项专利。这一诉讼引起了行业的广泛关注,也再次证明了EPC公司对专利保护的重视。

Everspin Technologies公司的发展小趣事

2010年,Everspin在北京召开了一场盛大的媒体发布会,正式推出了其16MB MRAM存储器产品。这款产品的推出标志着Everspin在MRAM技术领域的领先地位。该产品在市场上受到了广泛关注,不仅因其存储容量大,还因其独特的数据持久性和非易失性特性,使得关键任务数据即使在断电的情况下也能得到保护。

Crane Connectors公司的发展小趣事

Crane Connectors公司深知产品质量是企业生存和发展的根本。因此,公司始终将质量管理放在首位,建立了完善的质量管理体系。从原材料采购、生产加工到产品检验、售后服务,每一个环节都严格把控,确保产品质量符合国际标准和客户要求。同时,公司还不断引进先进的质量管理理念和技术手段,提升质量管理水平。这些举措使得公司的产品质量得到了客户的高度认可,进一步提升了公司的市场竞争力。

Cystech公司的发展小趣事

为了进一步拓展全球市场,C-TECH Co., Ltd在2009年相继成立了香港分公司和中国(深圳)分公司。通过这两家分公司,公司能够更好地了解当地市场需求,提供更加贴近客户的服务。同时,公司还积极参加国际电子展会,与国际同行交流合作,不断提升自身的品牌影响力和市场竞争力。在国际化战略的推动下,C-TECH Co., Ltd的海外市场不断拓展,为公司的发展注入了新的动力。

DAYLIGHT公司的发展小趣事

在公司的初创阶段,DAYLIGHT就意识到技术研发对于企业发展的重要性。因此,公司投入大量资金用于研发新的电子产品和技术。经过几年的努力,DAYLIGHT成功研发出一项具有革命性的电子芯片技术,这一技术大大提高了电子产品的性能和可靠性,使得DAYLIGHT的产品在市场上获得了极高的声誉。

富之光(Fujicon)公司的发展小趣事

自成立以来,富致科技始终秉持创新精神,不断投入研发,引进美国最新的PPTC技术,并结合海内外技术专家的智慧,成功开发出多款高性能的自复式保险丝产品。这些产品凭借其出色的安全性能、稳定性和可靠性,迅速在市场上获得了认可。同时,富致科技积极拓展国内外市场,与众多知名企业和行业伙伴建立了长期稳定的合作关系,进一步巩固了其在PPTC保险丝领域的领先地位。

问答坊 | AI 解惑

优秀设计的十条戒律

钱又不够了,再上新内容…

查看全部问答>

关于LM3S8962评估板的OLED驱动芯片的中文手册

目前翻译了一些,通过翻译深入理解OLED现实原理,有助于后续项目的升入开发,共享给坛友,不对之处,请指正!…

查看全部问答>

请教一个移植boa的问题

请教一个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写数据寄存器,进入死 ...…

查看全部问答>

TI官网的ADC资料

本帖最后由 dontium 于 2015-1-23 13:13 编辑 大家参考一下 …

查看全部问答>

实现记录

数码管动态扫描实现了秒表、开始、暂停功能。开始/暂停公用一个键,还有一个键用来记录之前暂停的数(之前有多个暂停),要求至少能记录4个以上。求实现记录功能。 开始/暂停函数如下: void key_1 ()  // k1函数{    & ...…

查看全部问答>

在CCS4中编译BIOS项目时出错

我在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是不是就是人们常说的器 ...…

查看全部问答>