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


評論