<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 串口多機(jī)通訊的理解

          串口多機(jī)通訊的理解

          作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          串口的工作模式2,3中是屬于多機(jī)通信模式,以模式3為例;

          模式3,是9位數(shù)據(jù)異步通信模式(加起始,停止11位),第9位位可編程位,(RB8,TB8).比特率可變

          本文引用地址:http://www.ex-cimer.com/article/201611/322084.htm

          在模式3中多了一位SM2控制位;

          原理:在通訊模式2,3中,發(fā)射端設(shè)置TB8的狀態(tài)區(qū)別發(fā)送的是地址還是數(shù)據(jù),1(地址),0(數(shù)據(jù))。接收端通過RB8的接受進(jìn)行識(shí)別,當(dāng)SM2=1時(shí),若接收到RB8=1,則確認(rèn)主機(jī)發(fā)送的是地址幀,數(shù)據(jù)會(huì)進(jìn)入SBUF區(qū),并置為RI,會(huì)產(chǎn)生中斷,若接受的是RB8=0,則為數(shù)據(jù)幀,將不予理睬,舍棄。當(dāng)SM2=1時(shí),不管接受到的RB8為0或者1,都會(huì)存入SBUF中,產(chǎn)生中斷,故利于用此原理可以多機(jī)通訊

          工作過程如下:

          1、將從機(jī)SM2置為1,處于只接受地址幀的狀態(tài);

          2、主機(jī)發(fā)送地址幀,將TB8設(shè)為位1,表示發(fā)送的是地址;

          3、所有的從機(jī)接受的地址幀后,將接受的數(shù)據(jù)與本機(jī)的地址對(duì)比,相等,則為尋址從機(jī),將SM2設(shè)為0,接受從機(jī)發(fā)來的數(shù)據(jù),直到接受完主機(jī)發(fā)來的所有數(shù)據(jù),判斷是否數(shù)據(jù)發(fā)送完,完了將SM2設(shè)為1;

          4、主機(jī)在發(fā)完地址之后,會(huì)發(fā)送一組數(shù)據(jù)(將TB8設(shè)為0),表示發(fā)送的是數(shù)據(jù);

          5、主機(jī)發(fā)完一組數(shù)據(jù)后,再發(fā)新的地址,重復(fù)上述步驟;

          程序?qū)嵗?/p>

          1、主機(jī)程序

          #include"reg51.h"

          //初始化串口設(shè)置

          void init(void)
          {
          TMOD=0x20;
          TH1=0xfd;
          TL1=0xfd;
          PCON=0x00;
          TR1=1;
          SCON=0xd0; //設(shè)置工作模式3,1101,0000,SM0=1,SM1=1;(工作模式3)REN=1(允許接受標(biāo)志)
          }

          //主機(jī)發(fā)送信息函數(shù),,簡單模擬

          void send(uchar addr,uchar dat[])
          { uchar i;

          TB8=1;
          SBUF=addr;//發(fā)送地址信息
          while(TI==0)
          {
          ;
          }
          TI=0;

          while(RI==0)//等待從機(jī)回應(yīng)
          {
          ;
          }
          data1=SBUF;
          RI=0;
          if(data1!=addr)/ /是否與發(fā)送地址一致,不一樣則重發(fā)
          {
          flag2=0;

          }
          else{//一致則發(fā)送一組數(shù)據(jù)
          TB8=0;//tb8設(shè)為0,發(fā)數(shù)據(jù)

          for(i=0;i<4;i++)//發(fā)送數(shù)據(jù)塊

          {
          SBUF=dat[i];

          while(TI==0)
          {
          ;
          }
          TI=0;

          }
          void main()

          {

          init();

          while(1)

          {

          send(addr,dat[]);

          }

          }

          從機(jī)部分

          #define addr 0xxx;主機(jī)地址

          void init(void)
          {
          TMOD=0x20;
          TH1=0xfd;
          TL1=0xfd;
          PCON=0x00;
          TR1=1;
          SCON=0Xd0;
          }

          void receive(void)
          {
          SM2=1;
          while(RI==0)
          {
          ;
          }
          data1=SBUF;
          RI=0;
          if(data1!=addr)//不是,則舍棄 返回主函數(shù),等待下次的呼喚
          {


          }
          else {//是呼喚的本機(jī),對(duì)主機(jī)返回地址
          TI=0;
          TB8=1;//表示發(fā)出的是地址
          SM2=0;
          key2=1;
          SBUF=addr;
          while(TI==0)
          {
          ;
          }
          TI=0;
          TB8=0;

          for(i=0;i<4;i++)

          {

          While(!RI);

          R1=0;

          dat[i]=sbuff;

          }

          SM2=1;//接受完數(shù)據(jù)將SM2設(shè)為1

          }

          }



          關(guān)鍵詞: 串口多機(jī)通

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();