AVR串口多机通讯模式的问题
NE5532 发表于 2004-1-24 21:36AVR的串口说有多机通讯功能,就是在第一帧发送从机的地址,再发数据,呢么请问,从机的地址是在什么地方写的呢?是从机自己就包含地址(硬件)还是在软件上给从机赋值?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) 挺好!让我理清了思路。 好贴!先SAVE了! 据我了解:现在工控用到的多机通讯不是你们现在研究的那种多机通讯,它是一种现场总线
它采用单对单通讯。 CAN.不过听说成本很高,除非要求,一般不用 串口多机通讯的硬件电路是怎样接的,马潮老师能否说明一下,谢谢 站长可否回答多机通讯的电路连接方式,希望速回 回 ljm_bj,
抱歉,本网站目前没有这方面的资料。我这方面的经验也不足。
我一直呼呼玩过这个方面的人提供应用范例,但可惜目前仍没有人提供。看来只能耐心等一下了。 正好手头有,传上硬件原理图,先分析硬件,然后你自己写软件练习吧。
可实现一个上位机http://cache.amobbs.com/bbs_upload782111/files_1/armok0121762.jpg
与4个下位机http://cache.amobbs.com/bbs_upload782111/files_1/armok0121763.jpg
通过USART通信。 谢谢楼主,非常 盼望马老师给上下"TWI/I2C多机通讯模式的问题"的课...
USART,SPI马老师都讲了,好象TWI通信没讲...再搜搜看... 好文章,收益非浅!
前段作了一个类似的项目,上位机用ATMEG162,两个USART(一个和PC联系,另外一个和下位机联系),并且用到RS485的IC(MAX1482),可以传送较远的距离。 请教高人:AVR用MODBUS通讯连接触摸屏时,AVR为从站,触摸屏为主站,那么从站AVR的地址应该为多少啊,如何定义从站地址啊,我很不明白,望各位大侠多多赐教! 马老师的帖子句句精华!~~
弄了半天M16与M48的485通讯,一直都没连上。再看这个帖子,发现还是理解的不够啊!~~
理解理解再理解!~~~
感谢感谢再感谢!~~~ 回10楼:twi多机通信重要的是了解协议,AVR可以实现多主通信,因为AVR的硬件具备总线仲裁的功能,关键是了解TWI协议编写TWI的中断处理程序。在M128上册中给出了一个典型的TWI中断服务的框架,采用了状态机的机制。 请教马老师,若直接用PC串口来实现一主多从,用多个AVR MCU(如M8)做从机,PC做主机,可以吗? PC串口好象不支持9个数据位,那怎样区分地址帧和数据帧呢?或者用485总线可以实现吗?
“对于在多机通信系统中的主机MCU,可以设置使用9位数据帧结构(UCSZ=7)。当发送地址帧时,置第9位为“1”;发送数据帧时,置第9位为“0”。在这种情况下,从机也必须设置成接收9位数据帧结构。” PC串口支持9个数据位,但程序要你自己写的。
那怎样区分地址帧和数据帧呢?或者用485总线可以实现吗?都可以实现,但你需要先对USART、RS-232、RS-485等协议进行认真的学习。 9位通讯,是不是意味着,用作地址帧时,只有8位表示地址,也就是说,最大有256(00-ff)个从机? 关于USART多机通信的例子和详细的介绍,在我10月底将出版的书中有。 马老师能否具体讲讲在多机通信中485的使用?以及在软件编程时在注意哪些方面?我在你的新书中发现好象没有关于485使用方面的知识。 书中的多机通信的程序可以直接应用于RS485
RS485在物理层面上与RS232不同,上层协议也是采用异步通信方式的,另外RS485通常采用半双工通信.
我书中RS232的多机通信例程采用半双工方式,因此可以在RS485中使用.
建议你找本介绍RS485的书看看,主要了解物理层如何连接.硬件上除了RXD,TXD外,还有一个方向控制.因此程序中需要增加方向控制.
原来计划在书中介绍RS485的,由于内容已经太多了,所以就去掉了. 马老师能否推荐一本介绍485的书或上传一下未在你新书中添加的关于485的内容?学生最近在编写基于RS485协议的多机通信程序,搞了几天都没什么头绪,恳请马老师帮帮忙!!! 根据我的书第13章,P398,参考文献所提供的参考书的P110有电路图. ji 23楼,请问马老师,您所说的是哪本书? 我做的多机通讯没有采用9位通讯方式,而且采用的普通8N1的串口模式,自己设计的通讯协议。
支持1主253从,1个广播地址。可用PC作主机控制所有从机。支持TXD RXD双线通讯模式和TXD RXD并在一根线上的单线通讯模式。 在我的教材中,我介绍了采用USART实现多机通信的问题。
当然,对于采用第9位的方式,我还是要介绍的。但我还是极力推荐26楼采用的方式,采用普通8N1的串口模式,自己设计的通讯协议。而且实际的例子也是采用这个方法的。
尽管可以使用9位通讯方式实现多机通信,但对于新的系统,我认为和推荐采用的普通8N1的串口模式,自己设计的通讯协议为好。 马老师,8楼图里面的主机rx引脚上的二极管为什么是这个方向?有点不明白 我也不太明白那个二极管的作用。??? 楼上2位,二极管是起隔离作用的,自己分析一下它的作用。很多书上没有,或者方向不对,误了多少良家子弟。 图看的不是很清楚,能否提供一个清楚的呢! 记录一下 正在学习,感谢马老师.. 收藏了 果断还是接了4个二极管隔离啊~ 学习了 学习了{:smile:} mark!!!!!! 马老师,学生有个问题?你说AVR 多机通讯的时候是RS232设备并在总线上吗?不是RS485吗?
页:
[1]