串口多机通讯的理解-u球体育app下载

嵌入式 > 嵌入式开发 > 详情

串口多机通讯的理解

发布时间:2025-07-24 发布时间:
|
串口的工作模式2,3中是属于多机通信模式,以模式3为例;

模式3,是9位数据异步通信模式(加起始,停止11位),第9位位可编程位,(rb8,tb8).比特率可变

在模式3中多了一位sm2控制位;

原理:在通讯模式2,3中,发射端设置tb8的状态区别发送的是地址还是数据,1(地址),0(数据)。接收端通过rb8的接受进行识别,当sm2=1时,若接收到rb8=1,则确认主机发送的是地址帧,数据会进入sbuf区,并置为ri,会产生中断,若接受的是rb8=0,则为数据帧,将不予理睬,舍弃。当sm2=1时,不管接受到的rb8为0或者1,都会存入sbuf中,产生中断,故利于用此原理可以多机通讯

工作过程如下:

1、将从机sm2置为1,处于只接受地址帧的状态;

2、主机发送地址帧,将tb8设为位1,表示发送的是地址;

3、所有的从机接受的地址帧后,将接受的数据与本机的地址对比,相等,则为寻址从机,将sm2设为0,接受从机发来的数据,直到接受完主机发来的所有数据,判断是否数据发送完,完了将sm2设为1;

4、主机在发完地址之后,会发送一组数据(将tb8设为0),表示发送的是数据;

5、主机发完一组数据后,再发新的地址,重复上述步骤;

程序实例:

1、主机程序

#include"reg51.h"

//初始化串口设置

void init(void)
{
tmod=0x20;
th1=0xfd;
tl1=0xfd;
pcon=0x00;
tr1=1;
scon=0xd0; //设置工作模式3,1101,0000,sm0=1,sm1=1;(工作模式3)ren=1(允许接受标志)
}

//主机发送信息函数,,简单模拟

void send(uchar addr,uchar dat[])
{ uchar i;

tb8=1;
sbuf=addr;//发送地址信息
while(ti==0)
{
;
}
ti=0;

while(ri==0)//等待从机回应
{
;
}
data1=sbuf;
ri=0;
if(data1!=addr)/ /是否与发送地址一致,不一样则重发
{
flag2=0;

}
else{//一致则发送一组数据
tb8=0;//tb8设为0,发数据

for(i=0;i<4;i )//发送数据块

{
sbuf=dat[i];

while(ti==0)
{
;
}
ti=0;

}
void main()

{

init();

while(1)

{

send(addr,dat[]);

}

}

从机部分

#define addr 0xxx;主机地址

void init(void)
{
tmod=0x20;
th1=0xfd;
tl1=0xfd;
pcon=0x00;
tr1=1;
scon=0xd0;
}

void receive(void)
{
sm2=1;
while(ri==0)
{
;
}
data1=sbuf;
ri=0;
if(data1!=addr)//不是,则舍弃 返回主函数,等待下次的呼唤
{


}
else {//是呼唤的本机,对主机返回地址
ti=0;
tb8=1;//表示发出的是地址
sm2=0;
key2=1;
sbuf=addr;
while(ti==0)
{
;
}
ti=0;
tb8=0;

for(i=0;i<4;i )

{

while(!ri);

r1=0;

dat[i]=sbuff;

}

sm2=1;//接受完数据将sm2设为1

}

}



『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
intel 独立显卡iris xe max亮相.性能超越mx450
网站地图