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

          新聞中心

          51單片機(jī)-串口

          作者: 時(shí)間:2016-12-02 來(lái)源:網(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用來(lái)管理單片
          機(jī)的電源部分,包括上電復(fù)位檢測(cè),掉電模式,空閑模式等。單片機(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引腳電平,檢測(cè)到RXD引腳輸入電平發(fā)生
          負(fù)跳變時(shí),則說(shuō)明起始位有效,將其移入輸入移位寄存器,并開始接受這一幀信息的其余位。接受過(guò)
          程中,數(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的值可以通過(guò)公式 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í)說(shuō)明數(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)閉
          看屁屁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); })();