串口多機(jī)通訊的理解
模式3,是9位數(shù)據(jù)異步通信模式(加起始,停止11位),第9位位可編程位,(RB8,TB8).比特率可變
本文引用地址:http://m.butianyuan.cn/article/201611/322084.htm在模式3中多了一位SM2控制位;
原理:在通訊模式2,3中,發(fā)射端設(shè)置TB8的狀態(tài)區(qū)別發(fā)送的是地址還是數(shù)據(jù),1(地址),0(數(shù)據(jù))。接收端通過RB8的接受進(jìn)行識別,當(dāng)SM2=1時(shí),若接收到RB8=1,則確認(rèn)主機(jī)發(fā)送的是地址幀,數(shù)據(jù)會進(jìn)入SBUF區(qū),并置為RI,會產(chǎn)生中斷,若接受的是RB8=0,則為數(shù)據(jù)幀,將不予理睬,舍棄。當(dāng)SM2=1時(shí),不管接受到的RB8為0或者1,都會存入SBUF中,產(chǎn)生中斷,故利于用此原理可以多機(jī)通訊;
工作過程如下:
1、將從機(jī)SM2置為1,處于只接受地址幀的狀態(tài);
2、主機(jī)發(fā)送地址幀,將TB8設(shè)為位1,表示發(fā)送的是地址;
3、所有的從機(jī)接受的地址幀后,將接受的數(shù)據(jù)與本機(jī)的地址對比,相等,則為尋址從機(jī),將SM2設(shè)為0,接受從機(jī)發(fā)來的數(shù)據(jù),直到接受完主機(jī)發(fā)來的所有數(shù)據(jù),判斷是否數(shù)據(jù)發(fā)送完,完了將SM2設(shè)為1;
4、主機(jī)在發(fā)完地址之后,會發(fā)送一組數(shù)據(jù)(將TB8設(shè)為0),表示發(fā)送的是數(shù)據(jù);
5、主機(jī)發(fā)完一組數(shù)據(jù)后,再發(fā)新的地址,重復(fù)上述步驟;
程序?qū)嵗?/p>
1、主機(jī)程序
#include"reg51.h"
//初始化串口設(shè)置
void init(void)
{
}
//主機(jī)發(fā)送信息函數(shù),,簡單模擬
void send(uchar addr,uchar dat[])
{ uchar i;
{
{
init();
while(1)
{
}
}
從機(jī)部分
#define addr 0xxx;
void init(void)
{
}
void receive(void)
{
}
評論