在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機串口通信的注記

            51單片機串口通信的注記

            作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
            最近折騰51單片機,當然學到的都是比較基礎的東西,可能我認為比較復雜的概念有“中斷” 和“串口通信”,這篇主要是講串口通信

            使用的自然是山大王STC89C52RC的芯片來學習

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

            串口通信主要是C51單片機的RXD 和TXD 與上位機進行通信,由于上位機一般是電腦,所以要TTL轉成電腦能讀出的RS232的電路來支持 一般使用MAX232 芯片 串口通信電路如下


            之后就可以電腦的串口與這里的串口頭子接了,注意 串口先要交叉一下 即電腦的TXD 對應下位機的RXD

            C信模式有4種,最常用的是第一種

            方式0 同步移位寄存器方式 ,一般用來擴展I/O口,

            方式1 10位異步收發(fā)(8位數(shù)據(jù)),波特率可變(由定時器1的溢出率控制)

            方式2 11位異步收發(fā)(9位數(shù)據(jù)),波特率固定

            方式4 11位異步收發(fā),波特率可變(定時器1溢出率決定)


            各種需要配置的參數(shù)如下所示


            TI
            發(fā)送中斷標志位
            當發(fā)送一幀完畢后,由硬件使TI=1,向外部發(fā)送中斷申請,在中斷服務程序中,必須用軟件手動TI = 0,否則一直卡在中斷里(測試一下)

            RI
            接受中斷標志位
            當接收一幀完畢后,由硬件使RI = 1, 向外部發(fā)送中斷申請,也必須要在中斷服務程序中,用軟件將其清0,取消此次中斷申請

            ES
            串行中斷允許位
            1 為開打 0為關閉

            REN
            允許串行接受位
            1 為打開 0 為關閉

            SBUF
            串口緩存
            在讀寫完畢后,存儲的是相應的讀/寫值(注意,SUBF實際有兩個寄存器,一個放寫一個放讀)

            SM0/1
            串口設置工作方式
            設置4種工作方式,注意,最好是設置好工作方式再開串口傳授

            EA
            終端總開關

            TR1
            定時器1開關

            TH1/TL1
            定時器初值
            為了滿足9600 的波特率 所以需要將TH1 TL1 設置為0xfd

            TMOD
            定時器運行模式
            在串口通信的1號方式的時候 需要打開T1的串口通信 TMOD= 0x20 ,即第二種方式,8位自動重裝

            ET0/1
            中斷允許開關
            time0 time1

            之后是我的印象筆記的兩篇關于串口通信筆記的分享

            http://app.yinxiang.com/shard/s20/sh/6abe8da0-d4b8-4407-9848-3142dde1bed5/ba2a0a6debaab317aaca09185ce65c71
            http://app.yinxiang.com/shard/s20/sh/0faa2671-1e95-4d08-9d12-b1bdedc0eadd/13e7a915ea347b0daf3aca30fd9a6a74

            我自己寫的個簡單的串口通信

            #include
            #define uint unsigned int
            #define uchar unsigned char
            uchar code table[] = "Hi ";

            uchar receiveFlag=0;

            void init(){
            TMOD = 0x20;
            TH1 = 0xfd;
            TL1 = 0xfd;

            SM0 = 0;
            SM1 = 1;
            REN = 1;


            EA = 1;
            TR1 = 1;
            }

            void main(){
            uchar serVal,i;
            init();
            receiveFlag = 1;

            while(1){
            if(receiveFlag == 1){
            ES = 1;
            while(RI==0);
            serVal = SBUF;

            RI = 0;
            receiveFlag = 0;
            }
            if(receiveFlag==0){ //need to send msg;
            for(i =0;i<3;i++){
            SBUF = table[i];
            while(TI==0);
            TI = 0;
            }
            SBUF = serVal;
            while(TI ==0);
            TI = 0;
            receiveFlag = 1;
            }
            }

            }


            void receive_data() interrupt 4{
            RI = 0;//手動清0
            ES = 0;
            receiveFlag = 0;

            }



            關鍵詞: 51單片機串口通

            評論


            技術專區(qū)

            關閉