曩里 堡垒 塑
Software ImD1emention of RS-485 Bus Multi-computer Communication
查洪球
Zha Hongqiu
(江西联创通信有限公司,江西 南昌 330096)
(Jiamgxi Lian Chuang Communication Corporation,Jiangxi Nanchang 330096)
摘 要:RS-485总线在工业控制及通信领域受到广泛的应用,本文提出一个具体的RS一485总线多机通信的软件实现
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,供大家参考使用。
关键词:地址字节:数据字节:时间片:中断
中图分类号: TP336 文献标识码:B 文献编号:1671—4792一(2008)7-Ol03一O3
Abstract:RS-485 Bus is widely applied in industrial control and communication areas.A detailed implement
ionmethod adopted software is proposed in order to offer a reference.
Kevwords:Address Byte;Data Byte;Time S1 ice; Interrupt
0 RS-485工作原理简介
所谓多机通信主要是指两台以上计算机之间的数据传
输。在单片机多机应用系统中,单片机之间的通信方式为主
从式。主从式多机通信要求主机发送的信息可以传送到各个
从机,而从机发送的信息只能为主机接收,各个从机之间不
能直接通信,须通过主机实现。系统工作时,主机与被选中
从机之间的数据交换一一对应,被选中的从机接收数据,其
它从机将数据丢失。RS-485总线工作原理框图如图一所示。
图一 RS-485总线控制原理框图
在上述原理框图中,SN75176为~总线收、发驱动芯片,
由CPU的P1.7引脚完成对其进行收发控制,当P1.7为。时,
该芯片处于发送状态;当P1.7为1时,该芯片处于接收状态,
并由该芯片来控制总线的收、发方向。
在上述原理中,主机与从机的CPU可采用MCS-51系列的
单片机,也可采用其他支持多机通信的ARM CPU等。
在RS一485总线工作过程中,必须要始终保持主、从机
收、发状态的一致性,这也是多机通信的主要与核心内容。
即当主机处于发送状态时,各从机必须处于接收状态,而当
从机处于发送状态时,主机必须处于接收状态。否则会引起
总线冲突,甚至造成通信瘫痪。这个主、从双方的协调工作
应当由主机与从机的通信协议来完成,并最好由主机来控制
主、从机的收、发转换。为此,我们应当在通信协议上下工夫。
1 通信协议内容
我们知道,当MCS-51串口工作在方式2和3时,具有如
下的特点:若位SM2=I且接收到的第9位数据为0时,则不能
激活接收中断标志RI,接收数据无效;若SM2=I且接收到的第
9位数据为1时,则RI不仅被激活而且还可以向CPU请求中
断;若SM2=O则无论接收到的第9位数据为0还是 1,TI、RI
都以正常方式激活并可向CPU请求中断。
当MC$--S1串口工作在方式2和3时,TB8中保存的就是
串口即将要发送的第9位数据,而RB8中保存的就是串口接
收到的第 9位数据。
因此,我们可充分利用MCS-51的这种特点来实现Rs一
485位总线多机通信,为实现此目的,我们先做如下设定:
(1)在每个从机上,都提供一个软件设置,用于设置本
从机的地址( 7最大8个从机),每个从机的地址不能设置
成相同,否则会造成地址冲突。
(2)将主、从机的串口设置为工作方式2或方式3,并
使用相同的波特率。
(3)将主机发送的第9位TB8设为地址帧和数据帧的标
志位。TB8=O,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示数据帧;TB8=I,表示地址帧。
(4)将主、从机的REN位设置为1(主、从机都可接收
及发送数据),所有从机的SM2设置为1(表示从机首先只接
收地址帧),主机的SM2设置为0(表示主机可接收任何数据)。
维普资讯 http://www.cqvip.com
至此,我们就完成了对主、从机工作方式的设置及初始 方应提供一个20MS的定时器,由该定时器来完成对从机的定
化操作,接下来便可进行具体的软件通信过程实现 (制定通 时扫描与处理,在从机方须提供一个硬件接口,通过该接口
信协议)。 来获取从机的地址。在收发数据流量控制上,我们采用主机 卫
由于在多机通信过程中,一般都只有一台主机,多台从 方进行发送字节总数控制,而在从机方不进行发送字节总数 C,) I
机。而各从机又都处于平等状态,并由主机去完成对各从机 的控制 (默认从机方发送数据量比较少)。当然,如果有兴趣 厶 ∞
的收发控制,故采用分时法来实现该过程比较合适。 的话也可对该协议进行修改,对从机方也实行收、发流量控 cn 总
为此,我们制定了如下通信协议,其具体思想及实现步骤 制。 线
如下 : 2 软件实现流程 多
机 (
1)将160MS的时间平均分成8个时间片,每个时间片 以主机串口中断收发流程为例,从机串口中断收发流程 通
占用20MS,用于主机与对应从机的通信,主机与对应从机的 与主机相似。主机的数据收、发主要在串口中断中完成与实 信
当前数据必须在该20MS时问片内交互完成。在这20MS的时 现,当产生串口接收中断时,则串口接收缓冲区的数据为从机 的
软
问片内,首先由主机发送数据,从机接收数据,主机发送完 发送过来的数据,可直接进行接收与处理,主机串口中断收 件
数据后再由从机发送数据,主机接收数据。 发流程如图二所示。 实
(2)主机与对应从机通信时,由主机方协凋主、从双方 { ⋯ ⋯ 现
的通信,从机方处于被动接收状态,受主机方的控制。20MS 主 .
时问片开始时,首先由主机发送地址字节(该地址字节的低 /— 强& \ 1壹 楚孥 }
送数据(从机此时必须处于接收状态)。最高位为 表示主机 、r
辛 享整据垄 . 此日寸 ),该地址字节 羔、二
,口、 -b
’
: 11 素n:甬 莹碍斗-, #7 — ,十士n士、古*轩 / 岩嚣 嚣嚣十 士、古黼 / 躐豫凌盘瞎 蟹缳d静知 繇 箍 篓
璇 跨赣譬蹿鞲黼能嚣 臻拳蕊
据发往相应的从机方,则先将从机方的编号写入地址字节变 \ / l 鲰箍避龋瓣
量的低4位,再将地址字节变量的最高位置0(表示主机方
有数据发送到相应的从机方),并将TB8置I(表示这是地址 主
字节),然后将该地址字节发送出去。若本方 (主机方)无 / \
数据发律相廊的从机方.则同样 将从机方的编号写入七fh±I / 饕妻 \ , , 船馥{ 萍碡姥瓣 凳穗蒜神鞋黯瞧I
主机方无数据发送到相应的从机方,此时从机可发送数据), 、 ,
并将TB8置 1(表示这是地址字节 ),同时将该地址字节发送 l
出去o
, 、 ⋯ ⋯ 。。 ⋯ ⋯ ⋯ ⋯ ⋯ 、 .
i鼗 蠢
(4)在20MS时间片内,若主机有数据要发送,且主机 . 1
方数据已发送完成,则主机方需再将从机方的编号写入地址 厂■
子 重 1 4位,开秆地址_子 币,殳量 明鼓 向位置 1【表不 —— —
主机方数据已发送完,此时从机可发送数据),并将TB8置I 图二 主机串口中断收发程序流程图
(表示这是地址字节),然后将该地址字节发送出去。从机收 3 程序代码实现
到该地址字节后,便可由收状态转换为发状态,并发送相应的 本人将使用808I作为CPU的通信主机板与8个使用
数据,从而实现在20MS时间内的主、从收发转换。 ATMEL 89C52作为CPU的从机板,采用485总线相连,利用
(5)由于初始化时,所有从机的SM2=1,故它们都只接 PLM51单片机高级程序设计语言作为编程语言,实现了上述
收地址字节。当它们接收到该地址字节后 (RB8=I),与自己 主、从多机通信过程(其中主、从机采用相同的晶振及时钟)。
的地址进行比较,若相等,则置SM2=0,表示可继续接收其 因主、从机采用相同的晶振及时钟,故将它们都设置在串口
它后续数据;若不相等,则保持SM2=1不变,不能接收后续的 工作方式2,使得它们具有相同的串口通信波特率fosc/64。
数据字节。这样就保证了主机只与自己选中的从机进行通 以下以主机串口收发为例介绍程序代码的实现。
信。 DECLARE bSlaverecHead(MAX
_ SLAVE) BYTE PUBLIC
(6)为保证在20MS时间片内,主、从机双方都有数据 AUXILIARY;
发送的机会,须对主从双方在20MS时间片内发送的数据字 DECLARE bS1aveRecTail(MAX SLAVE) BYTE PUBLIC
节总数进行数量控制(总数的多少可跟据通信速率及单位时 AUXILIARY:
间内产生数据量的多少来确定)。一般来说,若根据具体情 //分别定义主机当前数据接收区的头、尾指针
, 当头指针不
况可判断出主从双方收发的数据量都比较少,且收发数据的 等于尾指针时表示主机可接收相应从机的数据
产生也比较均匀,数据收发时双方通信的速率也比较高,这 DECLARE MAX BYTE LITERALLY ‘64’:
时候也可不进行收发数据的数量控制,使用时应尽量做到具 //定义主机20MS允许发送的最大字节数
体情况具体分析,根据不同的情况灵活处理。 DECLARE MAX BUF LEN LITERALLY c 128,
为实现上述软件通信协议,我们在软件设计时,在主机 //定义主机收、发缓冲区大小
1 R7
维普资讯 http://www.cqvip.com
~
】88
D0;
TB8=I;//表示要发送的是地址字节
bTempAddr=bs1aveInde)( I 80H;
//置地址字节最高位为1,表示从机现在可发送数据,
SBUF=bTempAddr;//发送地址字节
CAI TIME(50);//延时,让地址字节发送出去
P1
—
7=1;//置主机为接收状态,准备接收从机数据
END;
END;
ELSE//主机数据已发送完,从机现在可以发送
DO;
TB8:I;//表示要发送的是地址字节
bTempAddr=bs1aveIndex 1 80H;
//置地址字节最高位为1,表示从机现在可发送数据,
SBUF=bTempAddr;//发送地址字节
CAI L TIME(so);延时,让地址字节发送出去
P1
— 7=1;//置主机为接收状态,准备接收从机数据
END;
END;
END ;
4 结束语
以上程序代码在 MCS-51单片机上成功地实现了多台设
备的互连互通,因此RS-485总线为各个设备的连接及组网提
供了可能。但RS-485总线也有其自身固有的缺点,例如:数
据传输速率低、传输距离有限、软件设计复杂、容易造成通
信瘫痪等。但目前由于其价格成本低,使用简单方便,使得
其在数据通信量要求不是很大的情况下,仍有很大的_i『场,
这就要求我们在其硬件及软件设计上 F功夫,使该RS-485总
线始终保持一种 良好、稳定的工作状态。
参考文献
[1 J李晓荃,魏立东.陈立芳单片机原理与应用[M].北
京:电子工业 版社,2000.
[2]2陈力钧,刘英.单片机高级程序设计语言 PL/M-51
与PI /M.g6[M_I.西安:两安电子科技大学冉版社,1994.
[3]邹继军,饶运涛.基于SJA1000的CAN总线系统智
能接点设计【J].单片机与嵌人式系统应用,2001,(12).
[4J刘和平.PIC18Fxxx单片机原理与接口程序设计[MJ.
北京:北京航空航天出版社,2004.
[5]周立功等.ARM微控制器基础与实战M .北京:北京航
空航天出版社,2003.
[6]nRF24Z1 Headphone Reference Design 1,nRF24Z1一
HPR1[EB/OI J.http://www.nvlsi.no,2006-11—20.
作者简介
查洪球,南昌大学本科毕业,南昌大学硕士研究生,目
前从事嵌人式产品研发工作。
维普资讯 http://www.cqvip.com