在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

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

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

            原理:在通訊模式2,3中,發(fā)射端設(shè)置TB8的狀態(tài)區(qū)別發(fā)送的是地址還是數(shù)據(jù),1(地址),0(數(shù)據(jù))。接收端通過(guò)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ī)通訊;

            工作過(guò)程如下:

            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ā)來(lái)的數(shù)據(jù),直到接受完主機(jī)發(fā)來(lái)的所有數(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ù),,簡(jiǎn)單模擬

            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)閉