衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機多機通信原理

GReq_mcu168 ? 來源:未知 ? 作者:胡薇 ? 2018-05-15 09:51 ? 次閱讀

一、多機通信原理

在多機通信中,主機必須要能對各個從機進行識別,在51系列單片機中可以通過SCON寄存器的SM2位來實現。當串口以方式2或方式3發送數據時,每一幀信息都是11位,第9位是數據可編程位,通過給TB8置1或置0來區別地址幀和數據幀,當該位為1時,發送地址幀;該位為0時,發送數據幀。

在多機通信過程中,主機先發送某一從機的地址,等待從機的應答,所有的從機接收到地址幀后與本機地址進行比較,若相同,則將SM2置0準備接收數據;若不同,則丟棄當前數據,SM2位不變。

二、多機通信電路圖

51單片機多機通信原理

此處,U1作為主機,U2為從機1,U3為從機2。

三、C語言程序

(1)主機程序

#include#include

#define _SUCC_0x0f//數據傳送成功#define _ERR_0xf0//數據傳送失敗unsigned char Table[9]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};unsigned char Buff[20];//數據緩沖區unsigned char temp=0xff;sbit KEY1=P1^6;sbit KEY2=P1^7;//unsigned char addr;

//延時1ms函數void delay_1ms(unsigned int t){unsigned int x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);}//緩沖區初始化void Buff_init(){unsigned char i;//將Table里的數據放到緩沖區里for(i=0;i<9;i++)???{??Buff[i]= Table[i];??delay_1ms(100);?}?}//串口初始化函數void serial_init(){?TMOD=0x20;?//定時器1工作于方式2?TH1=0xfd;???TL1=0xfd;?//波特率為9600?PCON=0;?SCON=0xd0;??//串口工作于方式3?TR1=1;??//開啟定時器?TI=0;?RI=0;}//發送數據函數void SEND_data(unsigned char *Buff){?unsigned char i;?unsigned char lenth;?unsigned char check;?lenth=strlen(Buff);??????//計算數據長度?check=lenth;

TI=0;//發送數據長度TB8=0;//發送數據幀SBUF=lenth;while(!TI);TI=0;for(i=0;i;i++)>

TB8=0;//發送校驗字節SBUF=check;while(!TI);TI=0;}//向指定從機地址發送數據void ADDR_data(unsigned addr){while(temp!=addr)//主機等待從機返回其地址作為應答信號{TI=0;//發送從機地址TB8=1;//發送地址幀SBUF=addr;while(!TI);TI=0;RI=0;while(!RI);temp=SBUF;RI=0;}

temp=_ERR_;//主機等待從機數據接收成功信號while(temp!=_SUCC_){SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;}}

void main(){Buff_init();serial_init();while(1){if(KEY1==0){delay_1ms(5);if(KEY1==0){while(!KEY1);ADDR_data(0x01);}}if(KEY2==0){delay_1ms(5);if(KEY2==0){while(!KEY2);ADDR_data(0x02);}}

}}

(2)從機1程序

#include#include

#define addr0x01//從機1的地址#define _SUCC_0x0f//數據傳送成功#define _ERR_0xf0//數據傳送失敗unsigned char aa=0xff;//主機與從機之間通信標志unsigned char Buff[20];//數據緩沖區

//串口初始化函數void serial_init(){TMOD=0x20;//定時器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時器TI=0;RI=0;}//接收數據函數unsigned char RECE_data(unsigned char *Buff){unsigned char i,temp;unsigned char lenth;unsigned char check;

RI=0;//接收數據長度while(!RI);if(RB8==1)//若接收到地址幀,則返回0xfereturn 0xfe;lenth=SBUF;RI=0;check=lenth;for(i=0;i;i++)>

while(!RI);//接收校驗字節if(RB8==1)//若接收到地址幀,則返回0xfereturn 0xfe;temp=SBUF;RI=0;check=temp^check;//將從主機接收到的校驗碼與自己計算的校驗碼比對if(check!=0)//校驗碼不一致,表明數據接收錯誤,向主機發送錯誤信號,函數返回0xff{TI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;}TI=0;//校驗碼一致,表明數據接收正確,向主機發送成功信號,函數返回0x00TB8=0;SBUF=_SUCC_;while(!TI);TI=0;return 0;}

void main(){serial_init();while(1){SM2=1;//接收地址幀while(aa!=addr)//從機等待主機請求自己的地址{RI=0;while(!RI);aa=SBUF;RI=0;}

TI=0;//一旦被請求,從機返回自己的地址作為應答,等待接收數據TB8=0;SBUF=addr;while(!TI);TI=0;

SM2=0;//接收數據幀aa=0xff;//從機接收數據,并將數據保存到數據緩沖區while(aa==0xff){aa=RECE_data(Buff);}if(aa==0xfe)continue;P1=Buff[1];//查看接收到的數據}}

(3)從機2程序

#include#include

#define addr0x02//從機2的地址#define _SUCC_0x0f//數據傳送成功#define _ERR_0xf0//數據傳送失敗unsigned char aa=0xff;//主機與從機之間通信標志unsigned char Buff[20];//數據緩沖區

//串口初始化函數void serial_init(){TMOD=0x20;//定時器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時器TI=0;RI=0;}//接收數據函數unsigned char RECE_data(unsigned char *Buff){unsigned char i,temp;unsigned char lenth;unsigned char check;

RI=0;//接收數據長度while(!RI);if(RB8==1)//若接收到地址幀,則返回0xfereturn 0xfe;lenth=SBUF;RI=0;check=lenth;for(i=0;i;i++)>

while(!RI);//接收校驗字節if(RB8==1)//若接收到地址幀,則返回0xfereturn 0xfe;temp=SBUF;RI=0;check=temp^check;//將從主機接收到的校驗碼與自己計算的校驗碼比對if(check!=0)//校驗碼不一致,表明數據接收錯誤,向主機發送錯誤信號,函數返回0xff{TI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;}TI=0;//校驗碼一致,表明數據接收正確,向主機發送成功信號,函數返回0x00TB8=0;SBUF=_SUCC_;while(!TI);TI=0;return 0;}

void main(){serial_init();while(1){SM2=1;//接收地址幀while(aa!=addr)//從機等待主機請求自己的地址{RI=0;while(!RI);aa=SBUF;RI=0;}

TI=0;//一旦被請求,從機返回自己地址作為應答,等待接收數據TB8=0;SBUF=addr;while(!TI);TI=0;

SM2=0;//接收數據幀aa=0xff;//從機接收數據,并將數據保存到數據緩沖區while(aa==0xff){aa=RECE_data(Buff);}if(aa==0xfe)continue;P1=Buff[2];//查看接收到的數據}}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 51單片機
    +關注

    關注

    274

    文章

    5705

    瀏覽量

    124294
  • 多機通信
    +關注

    關注

    0

    文章

    16

    瀏覽量

    9240

原文標題:51單片機多機通信

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    51單片機通信問題

    求教各位大哥,我想用幾塊51單片機實現一對通信,一個主機多個從,但是有一個問題,單片機連接的
    發表于 02-29 17:28

    51單片機通信問題

    本人剛接觸單片機串口通信,雙機通信可以實現,但是通信就搞不懂了,看了很多資料還是不明白,在此
    發表于 04-21 12:23

    基于51單片機通信的設計+源代碼

    通信的電器特性、邏輯電平和各種信息都有其自身的特點。89C51 系列單片機之間通過多通信進行數據交換時,將串口設置為工作方式2 或者3,數
    發表于 03-10 21:49

    簡述51單片機通信的特點

    簡述51單片機通信的特點,一、題目要求使用51單片機
    發表于 07-20 07:48

    PCMCS-51單片機間的串行通信設計?

    【摘 要】 主要講解了IBM-PC與MCS-51單片機系統的通信原理,給出了其硬件接口框圖
    發表于 05-16 19:43 ?1922次閱讀
    PC<b class='flag-5'>機</b>與<b class='flag-5'>多</b>MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機</b>間的串行<b class='flag-5'>通信</b>設計?

    51單片機通信過程

    發表于 12-31 11:55 ?52次下載

    單片機之間通信演示電路設計

    本文介紹的是基于單片機的串行通信演示電路系統設計。本設計研究的是三個AT89C51單片機通過串行通信技術實現相互之間的
    發表于 04-14 16:53 ?1次下載

    通信單片機和pc

    通信單片機和pc
    發表于 11-04 11:38 ?7次下載

    8031單片機系統的實時通信

    隨著單片機技術的發展,其應用已從單機逐漸轉向或聯網.而應用的關鍵在于相互的通信、互傳數據
    發表于 02-02 16:46 ?0次下載

    如何使用51單片機進行通信的資料和程序及電路圖免費下載

    51 單片機通信,有些特殊。它專有一個控制位 SM2 。當把 SM2 設置為 1 后,單片機
    發表于 08-13 17:32 ?8次下載
    如何使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>進行<b class='flag-5'>多</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>的資料和程序及電路圖免費下載

    單片機通信系統的設計

    51單片機進行通信時,串口要工作在方式2和方式3。假設當前
    發表于 07-11 15:04 ?4407次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>多</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>系統的設計

    MCS-51單片機通信的工作原理解析

    串行口以方式2或方式3接收時,若SM2為1,則僅當接收到的第9位數據RB8為1時,數據才裝入SBUF,置位RI,請求CPU對數據進行處理;如果接收到的第9位數據RB8為0,則不產生中斷標志RI,信息丟失,CPU不作任何處理。
    發表于 10-22 16:18 ?1.3w次閱讀
    MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>多</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>的工作原理解析

    51單片機串口通信

    51單片機串口通信文章目錄51單片機串口通信串口介紹硬件電路電平標準常見
    發表于 11-18 14:06 ?22次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>串口<b class='flag-5'>通信</b>

    51單片機串口通信

    51單片機串口通信文章目錄51單片機串口通信串口介紹硬件電路電平標準常見
    發表于 11-21 20:36 ?64次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>串口<b class='flag-5'>通信</b>

    關于51單片機通信競賽實驗

    發表于 08-24 09:01 ?0次下載
    關于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>多</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>競賽實驗
    百家乐官网体育nba| 老虎机价格| 百家乐官网赌场论坛在线| 百家乐食杂店| 百家乐官网打线| 大发888娱乐城手机| 真人百家乐官网软件云南景| 君豪棋牌是真的吗| 百家乐专业赌徒| 威远县| 网上百家乐真坑人| 24山消砂| 百家乐官网路单破解器| LV百家乐娱乐城| 百家乐官网大赌场娱乐网规则| 大发888帐号注册| 百家乐概率计算过程| 百家乐官网庄闲分布概率| 威尼斯人娱乐场官网48008| 博彩网百家乐官网的玩法技巧和规则 | 澳门百家乐官网棋牌游戏| 大发888娱乐场电话| 百家乐赌博导航| 百家乐官网网站赌钱吗| 桃园县| 博彩百家乐官网最新优惠 | 赌博百家乐秘笈| 乐百家百家乐游戏| 网络百家乐官网赌博赢钱| 百家乐官网连开6把小| 龙博线上娱乐| 属狗人做生意店铺朝向| 百家乐官网浴盆博彩通排名| 新浪棋牌竞技风暴| 博彩百家乐画谜网| 做百家乐网上投注| 百家乐开户送18元| 百家乐视频打麻将| 澳门百家乐打法精华| 澳门百家乐博彩能做到不输吗| 网络百家乐会作假吗|