吴忠躺衫网络科技有限公司

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>競賽實驗
    集结号棋牌下载| 大发888在线娱乐城| 做生意门朝哪个方向好| 百家乐官网代理博彩正网| 大发888投注| 威尼斯人娱乐城骰宝| 南宁百家乐赌机| 网上百家乐官网群的微博| 百家乐官网赌场牌路分析| 赙彩百家乐官网游戏规则| 石河子市| 优博娱乐网站| 362百家乐官网的玩法技巧和规则| 网上百家乐官网有没有假| 嘉善县| 百家乐手机游戏下载| 百家乐补牌规律| 网上百家乐骗人| 百家乐赌博怎么玩| 百家乐视频百家乐| 百家乐注册送彩金平台| 百家乐机器二手| 百家乐官网软件| 百家乐必胜法hk| 百家乐投注杀手| 百家乐制胜秘| 威尼斯人娱乐棋牌app| 全讯网新2开户| 现金网系统出租| 爱博彩论坛| 寿光市| 解析百家乐官网投注法| 澳门百家乐官网技巧| 缅甸黄金赌场| 百家乐官网视频金币| 新利88国际娱乐网| 肯博百家乐官网游戏| 百家乐官网赢赌场百家乐官网| 百家乐官网赌场彩| 免费百家乐官网过滤软件| 玩百家乐678娱乐城|