搜索
bottom↓
回复: 39

AVR串口多机通讯模式的问题

[复制链接]
(525054130)

出0入0汤圆

发表于 2004-12-5 08:12:23 | 显示全部楼层 |阅读模式
NE5532 发表于 2004-1-24 21:36



AVR的串口说有多机通讯功能,就是在第一帧发送从机的地址,再发数据,呢么请问,从机的地址是在什么地方写的呢?是从机自己就包含地址(硬件)还是在软件上给从机赋值?DATASHEET里面好像没写啊。






答:



根据你提的问题看,你对串口多机通信的过程是不清楚的,应该先深入了解和掌握多机通信的过程。

在多机通信过程中,所有设备的RS232接口是并在通信线上的,其中只能有一个设备为主机,其他为从机,通信由主机发起。数据帧一般采用1位起始位、9位数据位,其中第9位(RXB8)被用作为表征该帧是地址帧还是数据帧。当帧类型表征位为“1”时,表示该帧数据为一个地址帧;当帧类型表征位为“0”时,表示这个帧为一个数据帧。

在AVR中,通过设置从机的UCSRA寄存器中标志位MPCM,可以使能USART接收器对接收的数据帧进行过滤的功能。如果使能了过滤功能,从机接收器对接收到的那些不是地址信息帧的数据帧将进行过滤,不将其放入接收缓冲器中,这在多机通信中有效的方便了从机MCU处理数据帧程序的编写(同标准51结构相比)。而发送器则不受MPCM位设置的影响。

多机通信模式允许多个从机并在通信线路上,接收一个主机发出的数据。通过对接收到的地址帧中的地址进行解码,确定哪个从机被主机寻址。如果某个从机被主机寻址,它将接收接下来主机发出的数据帧,而其它的从机将忽略数据帧,直到再次接收到一个地址帧。(从机地址是由各个从机自己的软件决定的)。

对于在多机通信系统中的主机MCU,可以设置使用9位数据帧结构(UCSZ=7)。当发送地址帧时,置第9位为“1”;发送数据帧时,置第9位为“0”。在这种情况下,从机也必须设置成接收9位数据帧结构。

多机通信方式的数据交换过程如下:

1)设置所有从机工作在多机通信模式(MPCM=1)。

2)通信开始是由主机先发送一个地址帧,如8位数据为0X01(1号从机地址),第9位=“1”,呼叫1号从机。

3)所有从机都接收和读取该主机发出的地址帧。在所有从机的MCU中,RXC标志位被置位,表示接收到地址帧。

4)每一个从机MCU读UDR寄存器,并判断自己是否被主机寻址。如果被寻址,清UCSAR寄存器中的MPCM位,等待接收数据;否则保持MPCM为“1”,等待下一个地址帧的接收(该步应由用户软件处理实现):

   A)作为1号从机的MCU处理过程为:收到地址帧后,判定读取UDR数据0X01为自己的地址,将MPCM位置“0”,接收之后所有主机下发的数据帧,直到下一个地址帧为止。

   B)其它从机MCU的处理过程:收到地址帧后,判定读取UDR数据0X01不是自己的地址,将MPCM位置“1”,这样他们将忽略主机随后发送的数据帧,直到主机再次发送地址帧。

5)当被寻址的从机MCU接收完最后一个数据帧后,将MPCM位置位,等待下一个地址帧的出现(该步也应由用户软件处理实现),然后从步骤2开始重复。



(首次发表:21ic bbs)
(525022828)

出0入0汤圆

发表于 2004-12-5 16:54:05 | 显示全部楼层
挺好!让我理清了思路。
(524774105)

出0入0汤圆

发表于 2004-12-8 13:59:28 | 显示全部楼层
好贴!先SAVE了!
(524773636)

出0入0汤圆

发表于 2004-12-8 14:07:17 | 显示全部楼层
据我了解:现在工控用到的多机通讯不是你们现在研究的那种多机通讯,它是一种现场总线

          它采用单对单通讯。
(524770530)

出0入0汤圆

发表于 2004-12-8 14:59:03 | 显示全部楼层
CAN.不过听说成本很高,除非要求,一般不用
(523491229)

出0入0汤圆

发表于 2004-12-23 10:20:44 | 显示全部楼层
串口多机通讯的硬件电路是怎样接的,马潮老师能否说明一下,谢谢
(523404961)

出0入0汤圆

发表于 2004-12-24 10:18:32 | 显示全部楼层
站长可否回答多机通讯的电路连接方式,希望速回
头像被屏蔽
(523404805)

出0入0汤圆

发表于 2004-12-24 10:21:08 | 显示全部楼层
回 ljm_bj,



抱歉,本网站目前没有这方面的资料。我这方面的经验也不足。



我一直呼呼玩过这个方面的人提供应用范例,但可惜目前仍没有人提供。看来只能耐心等一下了。
(523180589)

出0入0汤圆

 楼主| 发表于 2004-12-27 00:38:04 | 显示全部楼层
正好手头有,传上硬件原理图,先分析硬件,然后你自己写软件练习吧。



    可实现一个上位机

与4个下位机

通过USART通信。
(523050389)

出0入0汤圆

发表于 2004-12-28 12:48:04 | 显示全部楼层
谢谢楼主,非常
(520903789)

出0入0汤圆

发表于 2005-1-22 09:04:44 | 显示全部楼层
盼望马老师给上下"TWI/I2C多机通讯模式的问题"的课...



USART,SPI马老师都讲了,好象TWI通信没讲...再搜搜看...
(520882746)

出0入0汤圆

发表于 2005-1-22 14:55:27 | 显示全部楼层
好文章,收益非浅!

前段作了一个类似的项目,上位机用ATMEG162,两个USART(一个和PC联系,另外一个和下位机联系),并且用到RS485的IC(MAX1482),可以传送较远的距离。
(479252273)

出0入0汤圆

发表于 2006-5-19 10:56:40 | 显示全部楼层
请教高人:AVR用MODBUS通讯连接触摸屏时,AVR为从站,触摸屏为主站,那么从站AVR的地址应该为多少啊,如何定义从站地址啊,我很不明白,望各位大侠多多赐教!
(471890142)

出0入0汤圆

发表于 2006-8-12 15:58:51 | 显示全部楼层
马老师的帖子句句精华!~~   

弄了半天M16与M48的485通讯,一直都没连上。再看这个帖子,发现还是理解的不够啊!~~



理解理解再理解!~~~



感谢感谢再感谢!~~~
(471382556)

出0入0汤圆

 楼主| 发表于 2006-8-18 12:58:37 | 显示全部楼层
回10楼:twi多机通信重要的是了解协议,AVR可以实现多主通信,因为AVR的硬件具备总线仲裁的功能,关键是了解TWI协议编写TWI的中断处理程序。在M128上册中给出了一个典型的TWI中断服务的框架,采用了状态机的机制。
(449045443)

出0入0汤圆

发表于 2007-5-4 01:43:50 | 显示全部楼层
请教马老师,若直接用PC串口来实现一主多从,用多个AVR MCU(如M8)做从机,PC做主机,可以吗? PC串口好象不支持9个数据位,那怎样区分地址帧和数据帧呢?或者用485总线可以实现吗?  



“对于在多机通信系统中的主机MCU,可以设置使用9位数据帧结构(UCSZ=7)。当发送地址帧时,置第9位为“1”;发送数据帧时,置第9位为“0”。在这种情况下,从机也必须设置成接收9位数据帧结构。”
(448655995)

出0入0汤圆

 楼主| 发表于 2007-5-8 13:54:38 | 显示全部楼层
PC串口支持9个数据位,但程序要你自己写的。



那怎样区分地址帧和数据帧呢?或者用485总线可以实现吗?都可以实现,但你需要先对USART、RS-232、RS-485等协议进行认真的学习。
(435777131)

出0入0汤圆

发表于 2007-10-4 15:22:22 | 显示全部楼层
9位通讯,是不是意味着,用作地址帧时,只有8位表示地址,也就是说,最大有256(00-ff)个从机?
(435629894)

出0入0汤圆

 楼主| 发表于 2007-10-6 08:16:19 | 显示全部楼层
关于USART多机通信的例子和详细的介绍,在我10月底将出版的书中有。
(422650549)

出0入0汤圆

发表于 2008-3-4 13:38:44 | 显示全部楼层
马老师能否具体讲讲在多机通信中485的使用?以及在软件编程时在注意哪些方面?我在你的新书中发现好象没有关于485使用方面的知识。
(422635405)

出0入0汤圆

 楼主| 发表于 2008-3-4 17:51:08 | 显示全部楼层
书中的多机通信的程序可以直接应用于RS485

RS485在物理层面上与RS232不同,上层协议也是采用异步通信方式的,另外RS485通常采用半双工通信.

我书中RS232的多机通信例程采用半双工方式,因此可以在RS485中使用.

建议你找本介绍RS485的书看看,主要了解物理层如何连接.硬件上除了RXD,TXD外,还有一个方向控制.因此程序中需要增加方向控制.

原来计划在书中介绍RS485的,由于内容已经太多了,所以就去掉了.
(422620589)

出0入0汤圆

发表于 2008-3-4 21:58:04 | 显示全部楼层
马老师能否推荐一本介绍485的书或上传一下未在你新书中添加的关于485的内容?学生最近在编写基于RS485协议的多机通信程序,搞了几天都没什么头绪,恳请马老师帮帮忙!!!
(422618708)

出0入0汤圆

 楼主| 发表于 2008-3-4 22:29:25 | 显示全部楼层
根据我的书第13章,P398,参考文献[1]所提供的参考书的P110有电路图.
(359549895)

出0入0汤圆

发表于 2010-3-4 21:36:18 | 显示全部楼层
ji
(342728139)

出0入0汤圆

发表于 2010-9-15 14:18:54 | 显示全部楼层
23楼,请问马老师,您所说的是哪本书?
(342209281)

出0入0汤圆

发表于 2010-9-21 14:26:32 | 显示全部楼层
我做的多机通讯没有采用9位通讯方式,而且采用的普通8N1的串口模式,自己设计的通讯协议。
支持1主253从,1个广播地址。可用PC作主机控制所有从机。支持TXD RXD双线通讯模式和TXD RXD并在一根线上的单线通讯模式。
(342120609)

出0入0汤圆

 楼主| 发表于 2010-9-22 15:04:24 | 显示全部楼层
在我的教材中,我介绍了采用USART实现多机通信的问题。

当然,对于采用第9位的方式,我还是要介绍的。但我还是极力推荐26楼采用的方式,采用普通8N1的串口模式,自己设计的通讯协议。而且实际的例子也是采用这个方法的。

尽管可以使用9位通讯方式实现多机通信,但对于新的系统,我认为和推荐采用的普通8N1的串口模式,自己设计的通讯协议为好。
(338218134)

出0入0汤圆

发表于 2010-11-6 19:05:39 | 显示全部楼层
马老师,8楼图里面的主机rx引脚上的二极管为什么是这个方向?有点不明白
(335737954)

出0入0汤圆

发表于 2010-12-5 12:01:59 | 显示全部楼层
我也不太明白那个二极管的作用。???
(335736766)

出0入0汤圆

 楼主| 发表于 2010-12-5 12:21:47 | 显示全部楼层
楼上2位,二极管是起隔离作用的,自己分析一下它的作用。很多书上没有,或者方向不对,误了多少良家子弟。
头像被屏蔽
(303048162)

出0入0汤圆

发表于 2011-12-18 20:31:51 | 显示全部楼层
图看的不是很清楚,能否提供一个清楚的呢!
(261355903)

出0入0汤圆

发表于 2013-4-14 09:42:50 | 显示全部楼层
记录一下
(248477631)

出0入0汤圆

发表于 2013-9-10 11:00:42 | 显示全部楼层
正在学习,感谢马老师..
(219583219)

出0入0汤圆

发表于 2014-8-10 21:14:14 | 显示全部楼层
收藏了                                          
(219541302)

出0入0汤圆

发表于 2014-8-11 08:52:51 | 显示全部楼层
果断还是接了4个二极管隔离啊~
(215627850)

出0入0汤圆

发表于 2014-9-25 15:57:03 | 显示全部楼层
学习了   
(214957697)

出0入0汤圆

发表于 2014-10-3 10:06:16 | 显示全部楼层
学习了
(211585886)

出0入0汤圆

发表于 2014-11-11 10:43:07 | 显示全部楼层
mark!!!!!!
(136413756)

出0入0汤圆

发表于 2017-3-30 11:51:57 | 显示全部楼层
马老师,学生有个问题?你说AVR 多机通讯的时候是  RS232设备并在总线上吗?  不是RS485吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-7-26 08:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表