单片机多对多通信如何解决发送和接收混乱的问题
我想要用10个单片机板子进行串口通信,所有的单片机都可以作为发送和接收,没有绝对的主从机之分。就是想让这个10个板子自己的信息进行共享。意思就是,我可以查到其他单片机的状...
我想要用10个单片机板子进行串口通信,所有的单片机都可以作为发送和接收,没有绝对的主从机之分。就是想让这个10个板子自己的信息进行共享。意思就是,我可以查到其他单片机的状态,其他单片机也可以查到我的状态。所有的信息都是共享的。但是程序遇到的问题是如何让避免发射接收的混乱。我的思路就是比如1单片机要发送数据了,其他的单片机都要变成接收。2单片机发送了其他单片机变成接收。以此类推。但是程序入和实现以此类推。因为各个单片机板子的程序都是独立的。有时会几个单片机一起发送,那样就是产生了混乱。望大神给个解决的方法,思路。
展开
1个回答
展开全部
首先,这必须采用RS485总线,才可以组成多机的通信网络。
其次,就要设计一个比较严密的通信协议,以解决在任何一个时刻都只能有一个单片机向总线发送数据。
在无数据发送时,所有单片机都处于接收状态。每个单片机都要时刻监测总线的状态,当总线上有数据发送时,即检测到发送的起始位时,就产生中断,立即设置总线忙标志位,这时,只能接收,不能进入发送状态,就算是有数据需要发送也要等待总线进入闲置状态以后再发送。通信协议中包括每发送一帧数据的字节数,或确定一个结束标志字节,当所有处于接收状态的单片机收到结束字节后,即可解除总线忙状态,就可以发送数据了。
最后,为了避免多个等待发送数据的单片机,在解除总线忙状态后出现同时抢占总线进入发送状态,每个等待发送数据的单片机,在解除总线忙状态后,随机延时一点时间再发送,这样,多个等待发送的因延时不同,应该只有一个先进入发送状态,而其它的则接收到数据后再次进入总线忙状态而再次等待。
其次,就要设计一个比较严密的通信协议,以解决在任何一个时刻都只能有一个单片机向总线发送数据。
在无数据发送时,所有单片机都处于接收状态。每个单片机都要时刻监测总线的状态,当总线上有数据发送时,即检测到发送的起始位时,就产生中断,立即设置总线忙标志位,这时,只能接收,不能进入发送状态,就算是有数据需要发送也要等待总线进入闲置状态以后再发送。通信协议中包括每发送一帧数据的字节数,或确定一个结束标志字节,当所有处于接收状态的单片机收到结束字节后,即可解除总线忙状态,就可以发送数据了。
最后,为了避免多个等待发送数据的单片机,在解除总线忙状态后出现同时抢占总线进入发送状态,每个等待发送数据的单片机,在解除总线忙状态后,随机延时一点时间再发送,这样,多个等待发送的因延时不同,应该只有一个先进入发送状态,而其它的则接收到数据后再次进入总线忙状态而再次等待。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询