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

            新聞中心

            51單片機(jī)-串口

            作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
            SM0,SM1工作方式選擇位,SM2多機(jī)通信控制位,REN允許串行接收位,TI發(fā)送中斷標(biāo)志位,RI接
            收中斷標(biāo)志位。串行發(fā)送停止位的開始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)出中斷申請(qǐng)。在中斷服務(wù)
            程序中,必須用軟件將其清0,取消此中斷申請(qǐng)。
            電源管理寄存器PCON也是一個(gè)特殊功能寄存器,字節(jié)地址為87H,不能位尋址,PCON用來管理單片
            機(jī)的電源部分,包括上電復(fù)位檢測,掉電模式,空閑模式等。單片機(jī)復(fù)位時(shí)PCON全部被清0。
            SMOD該位與串口波特率有關(guān),SMOD=0,串口方式1,2,3時(shí),波特率正常。SMOD=1,串口方式1,2,3時(shí),波特率加倍。
            用軟件置REN為1時(shí),接收器會(huì)以所選擇波特率的16倍速采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生
            負(fù)跳變時(shí),則說明起始位有效,將其移入輸入移位寄存器,并開始接受這一幀信息的其余位。接受過
            程中,數(shù)據(jù)從輸入移位寄存器的右邊輸入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最后
            一次移位。當(dāng)RI = 0,且SMOD = 0(或接受到的停止位為1)時(shí),將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)
            裝入接受SBUF,第9位進(jìn)入RB8,并置RI=1,向CPU中斷請(qǐng)求。
            在具體操作串行口之前,需要對(duì)單片機(jī)一些與串行口有關(guān)的特殊功能寄存器進(jìn)行初始化設(shè)置:
            確定T1的工作方式(編程TMOD寄存器)
            計(jì)算T1的初值,裝載TH1,TL1
            開啟T1(編程TCON中的TR1位)
            設(shè)置串口的工作方式(編程SCON寄存器)
            串行口工作在中斷方式下,要進(jìn)行中斷設(shè)置(IE寄存器)
            波特率計(jì)算公式:
            方式0的波特率=fosc/12。
            方式1的波特率=(2^smod/32)*(T1溢出率)。
            方式2的波特率=(2smod/64)*fosc。
            方式3的波特率=(2smod/32)*(T1溢出率)。
            T1溢出率=fosc/{12*[256-(TH1)]}
            fosc為系統(tǒng)晶振頻率,通常為12MHZ或11.05926MHZ
            異步串口通信兩種方式:輪詢和中斷
            下面是一個(gè)中斷程序,使用串口調(diào)試工具發(fā)出什么返回什么。
            #include <reg52.h>
            unsigned char a,flag;
            void main(){
            TMOD = 0x20; //工作方式2,8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器
            TH1 = 0xfd; //波特率為9600bps,系統(tǒng)晶振頻率為11.0592MHZ時(shí)需要裝入的
            TL1 = 0xfd; //TH1,TL1的值可以通過公式 T1溢出率=fosc/{12*[256-(TH1)]}
            EA = 1; //開啟CPU中斷允許位
            ES = 1; //開始串口中斷允許位
            SM1 = 1; //設(shè)置串口的工作方式為01即方式1,10位異步收發(fā)(8位數(shù)據(jù))
            TR1 = 1; //T1開啟
            REN = 1; //允許串行接受位
            while(1){
            if(flag == 1){
            ES = 0; //關(guān)閉串口中斷,防止發(fā)送數(shù)據(jù)時(shí)產(chǎn)生中斷
            SBUF = a; //將數(shù)據(jù)送到發(fā)送緩沖寄存器
            while(!TI); //發(fā)送當(dāng)停止位開始時(shí),會(huì)產(chǎn)生中斷,把TI置1
            TI = 0;
            flag = 0;
            ES = 1; //允許中斷
            }
            }
            }
            void uart() interrupt 4{
            a = SBUF; //當(dāng)產(chǎn)生RI中斷時(shí)說明數(shù)據(jù)接收完畢,把數(shù)據(jù)賦給變量a
            RI = 0; //軟件方法把RI置0
            flag = 1;
            }
            輪詢方式,如果有數(shù)據(jù)輸入發(fā)送給串口,當(dāng)停止位開始時(shí),蜂鳴器響起。
            #include <reg52.h>
            #define uchar unsigned char
            sbit buzzer=P3^4;
            void delay(uchar z)
            {
            uchar x,y;
            for(x=1000;x>1;x--)
            for(y=z;y>1;y--);

            關(guān)鍵詞: 51單片機(jī)串口信息交

            評(píng)論


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

            關(guān)閉