搜索
bottom↓
回复: 39
打印 上一主题 下一主题

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

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 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)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2004-12-5 16:54:05 | 只看该作者
挺好!让我理清了思路。

出0入0汤圆

3
发表于 2004-12-8 13:59:28 | 只看该作者
好贴!先SAVE了!

出0入0汤圆

4
发表于 2004-12-8 14:07:17 | 只看该作者
据我了解:现在工控用到的多机通讯不是你们现在研究的那种多机通讯,它是一种现场总线

          它采用单对单通讯。

出0入0汤圆

5
发表于 2004-12-8 14:59:03 | 只看该作者
CAN.不过听说成本很高,除非要求,一般不用

出0入0汤圆

6
发表于 2004-12-23 10:20:44 | 只看该作者
串口多机通讯的硬件电路是怎样接的,马潮老师能否说明一下,谢谢

出0入0汤圆

7
发表于 2004-12-24 10:18:32 | 只看该作者
站长可否回答多机通讯的电路连接方式,希望速回
头像被屏蔽

出0入0汤圆

8
发表于 2004-12-24 10:21:08 | 只看该作者
回 ljm_bj,



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



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

出0入0汤圆

9
 楼主| 发表于 2004-12-27 00:38:04 | 只看该作者
正好手头有,传上硬件原理图,先分析硬件,然后你自己写软件练习吧。



    可实现一个上位机

与4个下位机

通过USART通信。

出0入0汤圆

10
发表于 2004-12-28 12:48:04 | 只看该作者
谢谢楼主,非常

出0入0汤圆

11
发表于 2005-1-22 09:04:44 | 只看该作者
盼望马老师给上下"TWI/I2C多机通讯模式的问题"的课...



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

出0入0汤圆

12
发表于 2005-1-22 14:55:27 | 只看该作者
好文章,收益非浅!

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

出0入0汤圆

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

出0入0汤圆

14
发表于 2006-8-12 15:58:51 | 只看该作者
马老师的帖子句句精华!~~   

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



理解理解再理解!~~~



感谢感谢再感谢!~~~

出0入0汤圆

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

出0入0汤圆

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



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

出0入0汤圆

17
 楼主| 发表于 2007-5-8 13:54:38 | 只看该作者
PC串口支持9个数据位,但程序要你自己写的。



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

出0入0汤圆

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

出0入0汤圆

19
 楼主| 发表于 2007-10-6 08:16:19 | 只看该作者
关于USART多机通信的例子和详细的介绍,在我10月底将出版的书中有。

出0入0汤圆

20
发表于 2008-3-4 13:38:44 | 只看该作者
马老师能否具体讲讲在多机通信中485的使用?以及在软件编程时在注意哪些方面?我在你的新书中发现好象没有关于485使用方面的知识。

出0入0汤圆

21
 楼主| 发表于 2008-3-4 17:51:08 | 只看该作者
书中的多机通信的程序可以直接应用于RS485

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

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

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

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

出0入0汤圆

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

出0入0汤圆

23
 楼主| 发表于 2008-3-4 22:29:25 | 只看该作者
根据我的书第13章,P398,参考文献[1]所提供的参考书的P110有电路图.

出0入0汤圆

24
发表于 2010-3-4 21:36:18 | 只看该作者
ji

出0入0汤圆

25
发表于 2010-9-15 14:18:54 | 只看该作者
23楼,请问马老师,您所说的是哪本书?

出0入0汤圆

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

出0入0汤圆

27
 楼主| 发表于 2010-9-22 15:04:24 | 只看该作者
在我的教材中,我介绍了采用USART实现多机通信的问题。

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

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

出0入0汤圆

28
发表于 2010-11-6 19:05:39 | 只看该作者
马老师,8楼图里面的主机rx引脚上的二极管为什么是这个方向?有点不明白

出0入0汤圆

29
发表于 2010-12-5 12:01:59 | 只看该作者
我也不太明白那个二极管的作用。???

出0入0汤圆

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

出0入0汤圆

31
发表于 2011-12-18 20:31:51 | 只看该作者
图看的不是很清楚,能否提供一个清楚的呢!

出0入0汤圆

32
发表于 2013-4-14 09:42:50 | 只看该作者
记录一下

出0入0汤圆

33
发表于 2013-9-10 11:00:42 | 只看该作者
正在学习,感谢马老师..

出0入0汤圆

34
发表于 2014-8-10 21:14:14 | 只看该作者
收藏了                                          

出0入8汤圆

35
发表于 2014-8-11 08:52:51 | 只看该作者
果断还是接了4个二极管隔离啊~

出0入0汤圆

36
发表于 2014-9-25 15:57:03 | 只看该作者
学习了   

出0入0汤圆

37
发表于 2014-10-3 10:06:16 | 只看该作者
学习了

出0入0汤圆

38
发表于 2014-11-11 10:43:07 | 只看该作者
mark!!!!!!

出0入0汤圆

39
发表于 2017-3-30 11:51:57 | 只看该作者
马老师,学生有个问题?你说AVR 多机通讯的时候是  RS232设备并在总线上吗?  不是RS485吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 09:39

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

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