打印

多机主动发数据给串口时中断或传输中冲突怎么避免?

[复制链接]
4962|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liaoyaohui|  楼主 | 2010-8-23 08:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现有多个从机都是主动给主机发数据,假如一个已经产生串口中断,再有一个给主机发数据是不是数据混乱,从机多的话是不是好多数据都没接到,是新的覆盖旧的?会不会出现两个的数据交替传输,到时接到效验值只能都舍弃,那样有什么的好的办法避免么?望高手不吝指教!!

相关帖子

沙发
yewuyi| | 2010-8-23 08:43 | 只看该作者
主从结构何来从机主动发送数据?

主机寻址从机,从机响应后返回数据,建议找书认真学习基本知识。

使用特权

评论回复
板凳
ayb_ice| | 2010-8-23 09:08 | 只看该作者
何为从机?
主动发数据就不叫从机了...

使用特权

评论回复
地板
liaoyaohui|  楼主 | 2010-8-23 10:50 | 只看该作者
呵呵、、、 定义搞混了,就是一个接收多个主动发送,保持它们之间相互通讯

使用特权

评论回复
5
liaoyaohui|  楼主 | 2010-8-23 11:00 | 只看该作者
相信高手们明白我的意思,只是小弟用语言表达不是很准确而已,那通俗点,就是一个单片机专门用来接收多个单片机发过来的数据,但是多个单片机 都是不定时的,只要有信号就向那个专门的单片机发数据,所以当几个单片机同时向那个专门的单片机发数据时就会出现串口冲突。

使用特权

评论回复
6
望断云山| | 2010-8-23 11:06 | 只看该作者
增加一条线作为“忙”信号线

使用特权

评论回复
7
ayb_ice| | 2010-8-23 11:06 | 只看该作者
这样的情况要用多主通信
51的那个UART是不支持的,要用IIC之类的多主通信才行

使用特权

评论回复
8
caijin| | 2010-8-23 14:36 | 只看该作者
用可以设置I2C地址的单片机即可,
如philips的有

使用特权

评论回复
9
tomhe666| | 2010-8-23 16:55 | 只看该作者
我有一个应用类似于此,   直接使用12V逻辑电平线与的方法,  只要数据不是同时产生, 没问题.数据同时发送, 会收到错误的数据, 但不会影响器件功能

使用特权

评论回复
10
liaoyaohui|  楼主 | 2010-8-23 17:07 | 只看该作者
“直接使用12V逻辑电平线与的方法”,在下愚钝,还得请这位仁兄详细说下。 9# tomhe666

使用特权

评论回复
11
tomhe666| | 2010-8-23 17:33 | 只看该作者
“直接使用12V逻辑电平线与的方法”,在下愚钝,还得请这位仁兄详细说下。 9# tomhe666
liaoyaohui 发表于 2010-8-23 17:07


所有的发射端都做成OC门的形式连接在一起, 然后使用一个合适电阻上拉, 另一端经过电平转换后送到MCU中就可以, 如果你对传输距离没要求,用5VTTL电平也可

使用特权

评论回复
12
potter| | 2010-8-23 21:00 | 只看该作者
本帖最后由 potter 于 2010-8-23 21:17 编辑

信道复用   
分时间片或者碰撞检测

使用特权

评论回复
13
liujigan| | 2010-8-23 22:05 | 只看该作者
轮询的方式,比方老师告诉1号同学回答,这时1号同学站起发言,完后老师告诉2号同学回答,这时2号同学站起回答,.......以次类推,最后一位同学回答完再从第一个同学回开始新的一轮。这样总线上就有绪了。

使用特权

评论回复
14
hgjinwei| | 2010-8-24 07:42 | 只看该作者
多主肯定要总线仲裁并加数据帧传输方式。

使用特权

评论回复
15
在心一方| | 2010-8-24 08:15 | 只看该作者
没想出个好主意,感觉用串口即使实现了也不会太稳定

使用特权

评论回复
16
MakeBetter| | 2010-8-24 09:07 | 只看该作者
这个简单啊,类似于TCP的多次握手,从机要发数据时,先发个请求包,主机接收到请求包后,回发确认包,从机接收到确认后,发送数据,主机接收到后,再次发送确认包。
设有A、B、C三个点,A为主机,B为从机1,C为从机2。B要与主机通信,则过程如下:
B:发送RTS,内容为:B->A的请求通信。     其它机器接收到此包后,在一个小片时间内不发数据包,给主机留下响应的时间。若B发送RTS后无回应,则以二进度退避形式再次发送N次。
A:接收到RTS,回应CTS:A->B的确认通信以及通信需要的时间。    其它机器接收到此包后,知道了需要退避的时间,则在此时间内不在发起通信,直至时间结束或再次接收到A的数据发送完的确认包。
B:接收到CTS后,发送数据包。....
A:......
过程不要多说了吧?

使用特权

评论回复
17
ylsiw| | 2010-8-24 09:08 | 只看该作者
轮询的方式主机占用了一半的总线时间,效率不高。依次定义好从机地址,主机先发送一帧,并等待各从机回执,从机按照自身的地址依次回执,如:1号从机接收到主机信号后回执,2号从机接收到主机信号延时10M后回执(10MS为一帧的数据传输时间,具体应计算得出),依此类推。可以理解成一组队员排队报数,互相听不到对方的声音,只能听到教官喊:报数!

使用特权

评论回复
18
MakeBetter| | 2010-8-24 09:08 | 只看该作者
当然,数据包要有校验机制,被碰后要知道其是非合法数据包。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:听说21ic里面大虾多,我来学习学习。

18

主题

67

帖子

0

粉丝