当前位置:首页 > 单片机 > 单片机
[导读]关于51单片机串口多机通信的实现和编程。

一、51单片机的主从模式,首先要设定工作方式3:(主从模式+波特率可变)

SCON串口功能寄存器:SM0=1;SM1=1(工作方式3)

注:主机和从机都要为工作方式3。

【工作方式2 (SM0 SM1 :1 0):串行口为11位异步通信接口。发送或接收一帧信息包括1位起始位“0”、8位数据位、1位可编程位、1位停止位“1”。发送数据:发送前,先根据通信协议由软件设置TB8为“奇偶校验位”或“数据标识位”,然后将要发送的数据写入SBUF,即能启动发送器。发送过程是由执行任何一条以SBUF为目的寄存器的指令而启动的,把8位数据装入SBUF,同时还把TB8装到发送移位寄存器的第9位上,然后从TXD(P3.1)端口输出一帧数据。接收数据:先置REN=1,使串行口为允许接收状态,同时还要将RI清“0”。然后再根据SM2的状态和所接收到的RB8的状态决定此串行口在信息到来后是否置R1=1,并申请中断,通知CPU接收数据。当SM2=0时,不管RB8为“0”还是为“1”,都置RI=1,此串行口将接收发送来的信息。当SM2=1时,且RB8=1,表示在多机通信情况下,接收的信息为“地址帧”, 此时置RI=1,串行口将接收发来的地址。当SM2=1时,且RB8=0,表示在多机通信情况下,接收的信息为“数据帧”, 但不是发给本从机的,此时RI不置为“1”,因而SBUF中接收的数据帧将丢失。

工作方式3 (SM0 SM1 :1 1):为波特率可变的11位异步通信方式,除了波特率有所区别之外,其余方式都与方式2相同。】【以上内容摘自网络】

二、主机的配置发送“地址”时,把TB8设定为1,发送数据时TB8设定为0

(类似于:主机 TB8=1发送的是地址,TB8=0发送的是数据)

发送帧结构:

假设主机将发送“1234”给地址为1的从机:调用函数:TXdata(1,"1234$");

void TXdata(uchar addr,uchar *str)

{

TB8 = 1; //发送地址

SBUF = addr; //把地址发送出去

while(!TI); //判断是否发送成功(发送成功后TI会置1,需手动清0)

TI = 0;

TB8 = 0; //发送数据

while(*str != '\0') //发送数组

{

SBUF = (*str);

while(!TI);

TI = 0;

str++;

}

}

三、从机配置

1. 从机接收时,首先串口初始化时,使SM2=1(接收地址模式,即只能接收到TB8=1的数据,才触发中断),主机发送TB=0的数据,被认为是总线上的主机发送给别机的通信数据,本机丢弃,不产生中断。

2. 接收的地址与本机地址相符后,使SM2=0(接收数据模式,接收数据正常触发中断)

(类似于:从机 SM2=1只接收地址,SM2=0只接收数据)

void chuan() interrupt 4 //串口中断服务函数

{

ES = 0; //关闭串口中断

if(RI) //再次判断,是否接收到数据(接收到数据后,RI会置1,需手动清0)

{

RXData = SBUF;

if(RXstart) //判断是否接收到过本地址

{

if(RXData != '$') //判断是否接收到 数据结束 标志 $

{

temp[j] = RXData; //没有接收到结束标志,正常保存数据至数组

j++;

}

else //接收到 结束标志 $

{

RXstart= 0; //本次接收结束

SM2 = 1; //重新 配置为:只接收地址 模式,下次发送TB8=1才中断

j = 0;

}

}

if(RXData == 1) //判断是否呼叫本机,地址范围:000 – 254(00 - FE)

{

RXstart = 1; //开始接收数据

SM2 = 0; //配置为:接收数据 模式

}

}

RI = 0; //清除接收标志位

ES = 1; //重新开启串口中断

}

四、串口初始化配置

89S51、52、STC12Cxxx + 11.0592M晶振,9600bps

void UART_init()

{

TMOD = 0x20; //定时器1,工作方式2:8位、自动重装

TH1 = 0xfd; //fd: 9600bps @ 11.0592M

TL1 = 0xfd; //e8: 1200bps @ 11.0592M

//f4: 2400bps @ 11.0592M

REN = 1; //允许串口接收

SM0 = 1;

SM1 = 1; //SM0和SM1:串口工作模式3,主从模式 + 波特率可变

SM2 = 1; //只接收地址(从机如此配置,主机不需要)

ES = 1; //开串口中断

TR1 = 1; //启动定时器1

EA = 1; //中断 总开关

}

五、接线图和注意事项

1、从机和从机之间通信,只能通过主机中转。

2、各从机的TXD输出不能设置为推挽输出,要设置为开漏输出。

3、通信总线不能过长,最好不超过2米。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

本文中,小编将对PLC予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: PLC 编程

在下述的内容中,小编将会对PLC的相关消息予以报道,如果PLC是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: PLC 编程 模块化

-Cognizant正在筹办全球最大规模的氛围编程活动,以提升数千名员工的AI素养 为抓住人工智能经济将创造的巨大机遇,Cognizant与Lovable、Windsurf、Cursor、Gemini Code Ass...

关键字: 编程 NI AN PI

上海 2025年6月23日 /美通社/ -- 日前,以"汇聚•连接•创造"为主题的2025世界移动通信大会(MWC)上海拉开帷幕。大会期间,爱立信专家围绕"5G-A","...

关键字: 爱立信 编程 网络 AI

采用51单片机最小开发板,由8位自制独立按键控制。单片机芯片为STC89C52RC,晶振为@12.000 mhz。8X8LED点阵屏模块由MAX7219驱动,MAX7219包含一个自动扫描电路。你只需要把要显示的数据发送...

关键字: 51单片机 MAX7219 寄存器

北京2025年3月6日 /美通社/ -- 2025世界移动通信大会(MWC25)期间,爱立信的5G可编程网络荣获"GTI年度大奖—移动技术创新突破奖"。此次获奖,标志着爱立信的5G可编程网络获得了GT...

关键字: 网络 爱立信 编程 TI

北京2025年3月4日 /美通社/ -- 日前,爱立信总裁兼首席执行官鲍毅康(Börje Ekholm)在巴塞罗那举行的2025年世界移动通信大会(MWC)上表示,移动连接将在实现人工智能(AI)和云技术能力方...

关键字: 爱立信 API AD 编程

上海2025年2月20日 /美通社/ -- 新品亮点 产品丰富:5个系列,9款产品,工作距离覆盖300~3000mm 性能出众:采集时间0.3s,不惧反光,精度最高0.03mm@300mm 应用广泛:支...

关键字: 3D视觉 相机 编程 机器人系统

在现代电子系统中,串口通信(UART/USART)是一种广泛应用的通信方式,尤其在微控制器(MCU)领域。STM32系列MCU以其高性能、低功耗和丰富的外设资源,成为许多嵌入式系统开发的首选。在某些情况下,硬件串口资源可...

关键字: STM32 串口通信

防御性编程是指一种预见代码可能出现问题并提前采取措施来防止这些问题发生的编程风格。在前端开发中,这尤其重要,因为你的代码直接与用户交互,任何错误都可能导致糟糕的用户体验,甚至安全漏洞。

关键字: 代码 编程
关闭