您的位置 首页 发布

串口多机通讯的了解

在串口的工作模式2,3中是属于多机通信模式,以模式3为例;模式3,是9位数据异步通信模式(加起始,停止11位),第9位位可编程位,(RB8,T

串口的作业形式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

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/256762.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部