单片机多机通信。。小弟只有20,那位大侠帮帮忙,谢谢了
最近在开发一个单片机多机通信系统,主从式分布,请问如何给从机分配地址?主机发送广播询问地址时,从机如何校验地址?用C如何编写代码?以一主机,2从机为例,谢谢...
最近在开发一个单片机多机通信系统,主从式分布,请问如何给从机分配地址?主机发送广播询问地址时,从机如何校验地址?用C如何编写代码?以一主机,2从机为例,谢谢
展开
2个回答
展开全部
您好!
首先你需要定义通信报文的格式:一般有报头+地址+长度+命令+数据+校验+报尾。七个域构成。地址域就是用来区别各个设备的。分配地址时,只有不重复就行。超过255个设备时,用两个字节描述这个域就可以了。
广播询问,可以采用9位方式通信。主机的TB8设为1,从机默认都认为RB8为1时,才接收。所有所有的从机都会收到这个广播包的,此后只有与本地地址吻合的设备改变TB8=0,继续双机单独通信。其他设备不会中断。
简单点的话,如果广播只有命令,无需应答,用普通方式也可。
从机校验地址的问题,就变成了对地址域的解析与本地地址匹配的判断,从而决定是否要继续接收或处理。
用C写时,主要需要熟悉串口多机通信的配置,也就是初始化。还有就是串口中断服务的编写。具体怎么写,建议你自己简单点,慢慢想,慢慢写,慢慢调。
首先你需要定义通信报文的格式:一般有报头+地址+长度+命令+数据+校验+报尾。七个域构成。地址域就是用来区别各个设备的。分配地址时,只有不重复就行。超过255个设备时,用两个字节描述这个域就可以了。
广播询问,可以采用9位方式通信。主机的TB8设为1,从机默认都认为RB8为1时,才接收。所有所有的从机都会收到这个广播包的,此后只有与本地地址吻合的设备改变TB8=0,继续双机单独通信。其他设备不会中断。
简单点的话,如果广播只有命令,无需应答,用普通方式也可。
从机校验地址的问题,就变成了对地址域的解析与本地地址匹配的判断,从而决定是否要继续接收或处理。
用C写时,主要需要熟悉串口多机通信的配置,也就是初始化。还有就是串口中断服务的编写。具体怎么写,建议你自己简单点,慢慢想,慢慢写,慢慢调。
追问
有没一什么书推荐?
追答
因为协议是自定义的,基本原则只要自圆其说即可,你只需要参与一两个低调项目或者完成这个项目的挑战即可熟悉。另外每个系统产品的特点都不同,所以协议一般都是独特的,而且不对外公开的。祝你成功!比想象中的简单。
展开全部
给你提供一个普遍使用的方式。
1。从机单片机设置一个地址装置。可以用硬件开关,也可以在软件中设置自有地址(缺点是软件不通用,优点是不消耗硬件资源)
2。从机上电后始终处于监听状态。收集所有通讯数据,从中判断是否是要自己地址代码。如果是,则应答。
3。主机广播发送特定的代码,通知一个从机应答。
要注意的是,控制代码要避开有可能存在的数据代码传输。最好是收到控制代码后,返回主机进行验证。以提高可靠性。
具体的通讯协议,就自己设置吧。原则就是这样的。
1。从机单片机设置一个地址装置。可以用硬件开关,也可以在软件中设置自有地址(缺点是软件不通用,优点是不消耗硬件资源)
2。从机上电后始终处于监听状态。收集所有通讯数据,从中判断是否是要自己地址代码。如果是,则应答。
3。主机广播发送特定的代码,通知一个从机应答。
要注意的是,控制代码要避开有可能存在的数据代码传输。最好是收到控制代码后,返回主机进行验证。以提高可靠性。
具体的通讯协议,就自己设置吧。原则就是这样的。
追问
能不能讲的细一点,最好用例子来说明。谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询