打印
[经验分享]

51单片机多机通信实验 代码

[复制链接]
252|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51单片机多机通信实验
下面通过一个案例,介绍如何来实现单片机的多机通信。

例8-7 实现主单片机分别与 3 个从单片机的串行通信,原理电路如图 8-31 所示。用户通过分别按下开关 k1、k2 或 k3 来选择主机与对应的 1#、2# 或 3# 从机进行串行通信,当黄色 LED 点亮,表示主机与相应的从机连接成功;该从机的 8 个绿色 LED 闪亮,表示主机与从机正在进行串行数据通信。如果断开 k1、k2 或 k3,则主机与相应从机的串行通信中断。

本例实现主、从机的串行通信,各从机的程序都是相同的,只是地址不同。串行通信的约定如下。

(1) 3 台从机的地址为 01 H ∼ 03 H 01H \sim 03H01H∼03H。

(2) 主机发出的 0 x F F 0xFF0xFF 为控制命令,使所有从机都处于 S M 2 = 1 SM2=1SM2=1 的状态。

(3) 其余的控制命令:00 H 00H00H 为接收命令,01 H 01H01H 为发送命令。这两条命令是以数据帧的形式发送的。

(4) 从机的状态字如图 8-32 所示。其中:

E R R ( D 7 位 ) = 1 ERR (D7 位) = 1ERR(D7位)=1,表示收到非法命令。
T R D Y ( D 1 位 ) = 1 TRDY (D1 位) = 1TRDY(D1位)=1,表示发送准备完毕。
R R D Y ( D 0 位 ) = 1 RRDY (D0 位) = 1RRDY(D0位)=1,表示接收准备完毕。
串行通信时,主机采用查询方式,从机采用中断方式。主机串行口设为方式 3,允许接收,并将 T B 8 TB8TB8 置为 “1”。因为只有 1 个主机,所以主机的 S C O N SCONSCON 控制寄存器中的 S M 2 SM2SM2 不要置 “1”,故控制字为 11011000 1101100011011000,即 0 x D 8 0xD80xD8。



图 8-32 从机状态字的格式约定

程序文件
主机程序
详见文件:zhu/main.c

从机1程序
详见文件:cong1/main.c

从机2程序
详见文件:cong2/main.c

从机3程序
详见文件:cong3/main.c

程序说明
主机功能
通过按键k1、k2、k3分别控制与从机1、2、3的通信
首先发送控制命令0 x F F 0xFF0xFF让所有从机进入S M 2 = 1 SM2=1SM2=1状态
发送地址帧(T B 8 = 1 TB8=1TB8=1)选择目标从机
发送数据帧(T B 8 = 0 TB8=0TB8=0)进行数据通信
从机功能
接收控制命令0 x F F 0xFF0xFF并进入多机通信模式
检测地址帧,匹配自身地址时设置S M 2 = 0 SM2=0SM2=0并点亮黄色LED
接收数据帧并在绿色LED上显示
通信结束后重新进入S M 2 = 1 SM2=1SM2=1状态
通信协议
主机发送0 x F F 0xFF0xFF控制命令
主机发送目标从机地址(地址帧,T B 8 = 1 TB8=1TB8=1)
目标从机响应并准备接收数据
主机发送数据(数据帧,T B 8 = 0 TB8=0TB8=0)
从机接收数据并进行相应处理
硬件连接
主机按键:k1(P0.0)、k2(P0.1)、k3(P0.2)
从机LED:黄色LED(P2.0)、绿色LED(P1口)
串口通信:波特率9600,方式3,9位数据
这个多机通信系统实现了一主三从的串行通信网络,通过地址识别和SM2控制位实现了可靠的点对点通信。

代码:https://wwsm.lanzn.com/i3LnP2y3phuh
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/x1131230123/article/details/148451082

使用特权

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

本版积分规则

112

主题

4266

帖子

3

粉丝