51單片機多機通信過程_第1頁
51單片機多機通信過程_第2頁
51單片機多機通信過程_第3頁
51單片機多機通信過程_第4頁
51單片機多機通信過程_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——51單片機多機通信過程51單片機多機通信過程

51單片機具有多機通信的功能,可實現(xiàn)一臺主機于多臺從機的通信。多機通信充分利用了單片機內(nèi)部的多機通信控制位SM2。當(dāng)從機SM2=1時,從機只接收主機發(fā)出的

地址幀(第九位為1),對數(shù)據(jù)幀(第九位為0)不予理睬;而當(dāng)SM2=0時,可接收主機發(fā)送過來的所有信息。多機通信的過程如下:

(1)所有從機SM2均置1,處于只接收地址幀狀態(tài)。

(2)主機先發(fā)送一個地址幀,其中前8位數(shù)據(jù)表示地址,第9位為1表示該幀為地址幀。

(3)所有從機接收到地址幀后,進行中斷處理,把接收到的地址與自身地址相比較。地址相符時將SM2清成0,脫離多機狀態(tài),地址不相符的從機不作任何處理,即保持SM2=1。

(4)地址相符的從機SM2=0,可以接收到主機隨后發(fā)來的信息,即主機發(fā)送的所有信息。收到信息TB8=0,則表示是數(shù)據(jù)幀,而對于地址不符的從機SM2=1,收到信息TB8=0,則不予理睬,這樣就實現(xiàn)了主機與地址相符的從機之間的雙機通信。

(5)被尋址的從機通信終止后置SM2=1,恢復(fù)多機通信系統(tǒng)原有的狀態(tài)。主機:

設(shè)置為SM2=0。

這是雙機通信的形式,可以任意的發(fā)送和接收

發(fā)送:

以TB8=1發(fā)送,將發(fā)送到所有SM2=1的分機。這是呼叫某個從機。以TB8=0發(fā)送,將發(fā)送到SM2=0的分機。這是雙機通信的形式。

從機:

先設(shè)置為SM2=1。

這是多機通信的形式,只能收到RB8=1的。

接收:

僅能收到RB8=1的數(shù)據(jù),確認是呼叫本機時,令SM2=0。

設(shè)置為SM2=0后,是雙機通信的形式。追問那從機的RB8要怎么設(shè),是需要軟件設(shè)置還是單片機自己識別?在編程的時候要怎么寫?回復(fù)從機的RB8,不需要編程。

從機的RB8,是接收到的,它是主機發(fā)送出來的TB8。想要對TB8進行控制,需要在主機中編程。

單片機多機通訊

說明:該程序為多機通訊程序,最多可以掛255個從機。

該程序主機發(fā)送端與多個從機的接收端相接,主機的接收端與多個從機的發(fā)送端相接。

該程序主要的目的為給從機發(fā)送作為命令的數(shù)據(jù)。該程序調(diào)試成功,從機可正確接收。

//===========================================================//多機通訊主機程序//zhuji.c

//writer:谷雨2023年3月22日于EDA試驗室//注:主機先發(fā)送地址,接收到應(yīng)答后,再發(fā)送數(shù)據(jù)

//===========================================================#include

#defineunitunsignedint#defineucharunsignedchar

#defineaddr10x31//從機1地址#defineaddr20x32//從機2地址voidUart_Init(void){

TMOD=0x20;//定時器T1使用工作方式2TH1=250;TH0=250;

TR1=1;//開始計時PCON=0x80;//SMOD=1;

SCON=0xd0;//工作方式3,9位數(shù)據(jù)位,波特率9600bit/s,允許接收TI=1;RI=1;}

ucharReceive(void)//接收數(shù)據(jù)程序{

ucharData;

while(!RI);//等待接受完畢Data=SBUF;//接收數(shù)據(jù)RI=0;returnData;}

voidsend_addr(ucharaddr)//發(fā)送地址

{

uchartem;

while(addr!=tem)//假使發(fā)送的地址與從機應(yīng)答的地址不一樣,則一直發(fā)送地址{

while(!TI);//等待發(fā)送完畢TI=0;//軟件復(fù)位TITB8=1;//發(fā)送地址幀SBUF=addr;//發(fā)送地址tem=Receive();}}

voidsend_data(ucharddata)//發(fā)送數(shù)據(jù),但此處由于與從機的協(xié)議,阻止發(fā)送0xff{

while(!TI);//等待發(fā)送完畢TI=0;//軟件復(fù)位TITB8=0;//發(fā)送數(shù)據(jù)幀SBUF=ddata;//發(fā)送數(shù)據(jù)while(!TI);}

voidmain(){

Uart_Init();

send_addr(addr1);//向從機1發(fā)地址

send_data(0x33);

send_addr(addr2);//向從機2發(fā)地址send_data(0x34);while(1);}

//===========================================================//多機通訊從機1程序//cong1.c

//writer:谷雨2023年3月22日于EDA試驗室

//注:從機先接收地址,然后與自己的地址比較,正確了再接收數(shù)據(jù),修改地址可掛多個從機

//===========================================================#include

#defineunitunsignedint#defineucharunsignedchar

#defineaddr0x31//從機1地址voidUart_Init(void){

TMOD=0x20;//定時器T1使用工作方式2TH1=250;TH0=250;

TR1=1;//開始計時PCON=0x80;//SMOD=1;

SCON=0xd0;//工作方式3,9位數(shù)據(jù)位,波特率9600bit/s,允許接收TI=1;RI=1;

}

voidsend(ucharData)//發(fā)送數(shù)據(jù)程序{

while(!TI);//等待發(fā)送完畢SBUF=Data;TI=0;while(!TI);}

ucharrecv_data(void)//接收數(shù)據(jù){

uchardate;

while(!RI);//等待接受完畢RI=0;

if(RB8==1)//若當(dāng)前接收為地址幀則返回0xffreturn0xff;date=SBUF;while(!RI);returndate;}

voidmain(){

uchartem,Data;Uart_Init();while(1){

SM2=1;//只接收地址幀

//假使接收到的地址幀不是本機地址,則繼續(xù)等待while(tem!=addr){

while(!RI);RI=0;tem=SBUF;}

//假使是本機地址,發(fā)送應(yīng)答信號,并做好接受數(shù)據(jù)的準(zhǔn)備TB8=0;//主機不檢測該位send(addr);

SM2=0;//允許接受數(shù)據(jù)信息//接收數(shù)據(jù)Data=recv_data();if(Data==0xff)continue;switch(Data){

case0x01://在此可以寫入要完成的動作,最多可完成256個動作break;case0x33:

P1=0xaa;//為便利其間,賦值給P1口,測P1口電平來檢測該程序break;case0x02:break;case0x03:

break;default:break;}}}

主機接收從機數(shù)據(jù)主機:/*

主從通信基本步驟:

1.主機從機初始化為方式2或者3,從機都置SM2=1,允許中斷2.主機置TB8=1,發(fā)送從機地址

3.所有從機均接收主機發(fā)送要尋址的從機地址

4.被尋址的從機確認地址后,置本機SM2=0,向主機返回地址,供主機核對5.核對無誤后,主機向被尋址的從機發(fā)送命令,通知從機接受或者發(fā)送數(shù)據(jù)。6.本次通信終止后,主從機重置SM2=1,主機可再對其他從機尋址★數(shù)據(jù)的傳遞主機發(fā)送信息,可以傳送到各個從機或指定從機,各從機發(fā)送的信息只能被主機接收。

★多機通信(關(guān)鍵是地址幀的識別)

主機發(fā)送:地址幀、數(shù)據(jù)幀的鑒別是通過第9位數(shù)據(jù)確定:TB8=1,地址幀TB8=0,數(shù)據(jù)幀

從機接收:

各從機串行口工作在方式2、方式3下;多機通信標(biāo)志SM2(SCON.5)=1;

檢查接收到的第9位RB8(SCON.2),當(dāng):

RB8=1:地址幀,將地址裝入SBUF,置位RI,發(fā)出接收中斷請求;判斷主機發(fā)送地址是否與本機相符,若相符,則將從機SM2清0(變成直通方式),準(zhǔn)備接收其后傳送來的數(shù)據(jù)。

RB8=0:數(shù)據(jù)幀,對SM2=1,RB8=0的從機,接收數(shù)據(jù)丟棄,而對SM2=0的從機:直通方式,不管RB8是0還是1,都將接受到的數(shù)據(jù)送SBUF,并發(fā)出中斷請求。

多機通信的過程總結(jié)如下:

(1)全部從機串行口工作方式初始化為2或3,置位SM2,允許中斷;(2)主機置位TB8,發(fā)送要尋址的從機地址;

(3)所有的從機均接收主機發(fā)送的地址,進入中斷進行地址比較;(4)確認尋址從機,自身SM2清0,向主機返回地址供主機核對;(5)主機核對無誤,向被尋址從機發(fā)送發(fā)送命令,通知從機進行一對一數(shù)據(jù)通信。*/

#include#defineBN16

#defineucharunsignedchar#defineuintunsignedintucharslave=0x00;ucharidatardata[16];

ucharidatatdata[16]={\sbitled1=P1^1;sbitled2=P1^2;sbitled3=P1^3;voiddelay(uintn)

{

uinti;ucharj;for(i=n;i>0;i--)for(j=110;j>0;j--);}

/**************************************************/voidsend(uchardat){

SBUF=dat;while(!TI);TI=0;}

/****************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論