




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省威海乳山市2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試題(含答案)
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識基礎(chǔ)試題庫和答案要點
- 景觀橋分析面試題及答案
- 2023-2024學(xué)年廣東省廣州市越秀區(qū)執(zhí)信中學(xué)七年級(下)期中數(shù)學(xué)試卷(含答案)
- 廣東省廣州市中大附中2023-2024學(xué)年八年級下學(xué)期期中物理試題(含答案)
- 采購合同范本(2篇)
- 電器知識技能培訓(xùn)班課件
- 關(guān)于調(diào)整工作時間與資源配置的通知
- 租賃協(xié)議合同
- 山東省青島萊西市(五四制)2024-2025學(xué)年八年級上學(xué)期期末生物學(xué)試題(含答案)
- 計算機網(wǎng)絡(luò)知到智慧樹章節(jié)測試課后答案2024年秋貴州財經(jīng)大學(xué)
- 酒店2025年應(yīng)急疏散演練計劃
- 數(shù)學(xué)-廣東省2025年深圳市高三年級第一次調(diào)研考試(深圳一模)試題和答案
- 第一單元第2課《生活之美》課件-七年級美術(shù)下冊(人教版)
- 2025年高考作文備考之題目解析及4篇范文:“生活是否還需要游戲”
- 2025年中國秸稈發(fā)電行業(yè)市場前瞻與投資預(yù)測分析報告
- 2025年七下道德與法治教材習(xí)題答案
- 新教科版一年級科學(xué)下冊第二單元第5課《它們吃什么》課件
- 坡面土壤侵蝕過程模擬-深度研究
- 互聯(lián)網(wǎng)護理服務(wù)典型案例
- 礦泉水購銷合同范本2025年
評論
0/150
提交評論