machao 发表于 2004-12-5 08:12:23

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

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)

godzhangyu 发表于 2004-12-5 16:54:05

挺好!让我理清了思路。

tianyahaer 发表于 2004-12-8 13:59:28

好贴!先SAVE了!

zhzzh18 发表于 2004-12-8 14:07:17

据我了解:现在工控用到的多机通讯不是你们现在研究的那种多机通讯,它是一种现场总线

          它采用单对单通讯。

lanmp 发表于 2004-12-8 14:59:03

CAN.不过听说成本很高,除非要求,一般不用

LJM_BJ_228 发表于 2004-12-23 10:20:44

串口多机通讯的硬件电路是怎样接的,马潮老师能否说明一下,谢谢

ljm_bj 发表于 2004-12-24 10:18:32

站长可否回答多机通讯的电路连接方式,希望速回

armok 发表于 2004-12-24 10:21:08

回 ljm_bj,



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



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

machao 发表于 2004-12-27 00:38:04

正好手头有,传上硬件原理图,先分析硬件,然后你自己写软件练习吧。



    可实现一个上位机http://cache.amobbs.com/bbs_upload782111/files_1/armok0121762.jpg

与4个下位机http://cache.amobbs.com/bbs_upload782111/files_1/armok0121763.jpg

通过USART通信。

ljm_bj 发表于 2004-12-28 12:48:04

谢谢楼主,非常

hotpower 发表于 2005-1-22 09:04:44

盼望马老师给上下"TWI/I2C多机通讯模式的问题"的课...



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

testcode 发表于 2005-1-22 14:55:27

好文章,收益非浅!

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

bdlhj 发表于 2006-5-19 10:56:40

请教高人:AVR用MODBUS通讯连接触摸屏时,AVR为从站,触摸屏为主站,那么从站AVR的地址应该为多少啊,如何定义从站地址啊,我很不明白,望各位大侠多多赐教!

handssmith 发表于 2006-8-12 15:58:51

马老师的帖子句句精华!~~   

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



理解理解再理解!~~~



感谢感谢再感谢!~~~

machao 发表于 2006-8-18 12:58:37

回10楼:twi多机通信重要的是了解协议,AVR可以实现多主通信,因为AVR的硬件具备总线仲裁的功能,关键是了解TWI协议编写TWI的中断处理程序。在M128上册中给出了一个典型的TWI中断服务的框架,采用了状态机的机制。

left 发表于 2007-5-4 01:43:50

请教马老师,若直接用PC串口来实现一主多从,用多个AVR MCU(如M8)做从机,PC做主机,可以吗? PC串口好象不支持9个数据位,那怎样区分地址帧和数据帧呢?或者用485总线可以实现吗?



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

machao 发表于 2007-5-8 13:54:38

PC串口支持9个数据位,但程序要你自己写的。



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

ganghu1111 发表于 2007-10-4 15:22:22

9位通讯,是不是意味着,用作地址帧时,只有8位表示地址,也就是说,最大有256(00-ff)个从机?

machao 发表于 2007-10-6 08:16:19

关于USART多机通信的例子和详细的介绍,在我10月底将出版的书中有。

WF1120034357 发表于 2008-3-4 13:38:44

马老师能否具体讲讲在多机通信中485的使用?以及在软件编程时在注意哪些方面?我在你的新书中发现好象没有关于485使用方面的知识。

machao 发表于 2008-3-4 17:51:08

书中的多机通信的程序可以直接应用于RS485

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

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

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

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

WF1120034357 发表于 2008-3-4 21:58:04

马老师能否推荐一本介绍485的书或上传一下未在你新书中添加的关于485的内容?学生最近在编写基于RS485协议的多机通信程序,搞了几天都没什么头绪,恳请马老师帮帮忙!!!

machao 发表于 2008-3-4 22:29:25

根据我的书第13章,P398,参考文献所提供的参考书的P110有电路图.

yinhe 发表于 2010-3-4 21:36:18

ji

jialiang 发表于 2010-9-15 14:18:54

23楼,请问马老师,您所说的是哪本书?

Delong_z 发表于 2010-9-21 14:26:32

我做的多机通讯没有采用9位通讯方式,而且采用的普通8N1的串口模式,自己设计的通讯协议。
支持1主253从,1个广播地址。可用PC作主机控制所有从机。支持TXD RXD双线通讯模式和TXD RXD并在一根线上的单线通讯模式。

machao 发表于 2010-9-22 15:04:24

在我的教材中,我介绍了采用USART实现多机通信的问题。

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

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

lsclsc27 发表于 2010-11-6 19:05:39

马老师,8楼图里面的主机rx引脚上的二极管为什么是这个方向?有点不明白

cana11225 发表于 2010-12-5 12:01:59

我也不太明白那个二极管的作用。???

machao 发表于 2010-12-5 12:21:47

楼上2位,二极管是起隔离作用的,自己分析一下它的作用。很多书上没有,或者方向不对,误了多少良家子弟。

taocongrong 发表于 2011-12-18 20:31:51

图看的不是很清楚,能否提供一个清楚的呢!

yinhe 发表于 2013-4-14 09:42:50

记录一下

wushifeng 发表于 2013-9-10 11:00:42

正在学习,感谢马老师..

lanzi3105 发表于 2014-8-10 21:14:14

收藏了                                          

蓝蓝的恋 发表于 2014-8-11 08:52:51

果断还是接了4个二极管隔离啊~

DepravedLucien 发表于 2014-9-25 15:57:03

学习了   

crazylata 发表于 2014-10-3 10:06:16

学习了{:smile:}

mk_avatar 发表于 2014-11-11 10:43:07

mark!!!!!!

pillar2060 发表于 2017-3-30 11:51:57

马老师,学生有个问题?你说AVR 多机通讯的时候是RS232设备并在总线上吗?不是RS485吗?
页: [1]
查看完整版本: AVR串口多机通讯模式的问题