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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51系列單片機(jī)12M晶振與9600波特率漫談

          51系列單片機(jī)12M晶振與9600波特率漫談

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          最近寫(xiě)了個(gè)小程序,用到9600波特率,板子上是12M晶振。但在調(diào)試的時(shí)候,死活都配不出9600的波特率。于是上狗狗,狗了一下,發(fā)現(xiàn)不少朋友們都遇到了相同的問(wèn)題,而且下了板上釘釘?shù)慕Y(jié)論:51單片機(jī)在12M晶振的時(shí)候是無(wú)法實(shí)現(xiàn)9600波特率的。

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

          網(wǎng)友們大都推薦改成11.0592M晶振。當(dāng)然這個(gè)方案是絕對(duì)可行的,但我實(shí)在懶得去買這號(hào)晶振(跑一趟電子市場(chǎng)要花3小時(shí)呢)。于是重新去研究芯片手冊(cè),終于功夫不負(fù)有心人,我發(fā)現(xiàn),如果你一不小心選的是52或者54、58的芯片,這個(gè)問(wèn)題是可以解決的哦。





          51單片機(jī)通常由TIMER1來(lái)產(chǎn)生波特率,TIMER1的頻率是晶振的1/12,也就是1M。它的頻率太低導(dǎo)致它不能實(shí)現(xiàn)9600波特率。這也給我們提供了一條新的解決途徑:如果我們能提高時(shí)鐘頻率,那么也可能實(shí)現(xiàn)9600的波特率。





          提高時(shí)鐘頻率是不是一定要提高晶振頻率呢?當(dāng)然,答案是否定的(改晶振頻率那就太土了)。52及以上的單片機(jī)提供了TIMER2,可作為波特率發(fā)器。且它作為波特率發(fā)生器時(shí),它的頻率是晶振的1/2,也就是6M。其結(jié)構(gòu)如圖1。



          coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
          filled="f" stroked="f">


















          o:title=""/>



          圖1 TIMER2 的波特率發(fā)生器







          TIMER2作為波特率發(fā)生器,要注意以下幾點(diǎn):



          1.
          C/T位清零,選擇OSC/2作為時(shí)鐘;



          2.
          TH2和TL2串聯(lián)成16位時(shí)鐘,溢出后自動(dòng)重裝;重裝常數(shù)存放在RCAP2H和RCAP2L;



          3.
          置RCLK和TCLK為1,將特率生成器切換到TIMER2;



          4.
          置TR2,啟動(dòng)TIMER2。





          代碼如下:



          void Uart0_Init()



          {



          //9600波特率對(duì)應(yīng) FFD9H



          RCAP2L = 0xD9;



          RCAP2H
          = 0xFF;





          //RCLK、TCLK置1



          //TR2置1



          T2CON
          = 0x34;





          //串口工作模式1,接收使能



          SCON
          = 0x50;





          //允許串口中斷



          ES
          = 1;





          return;



          }





          void Uart0_Ist() interrupt 4



          {



          if(RI)



          {



          RI
          = 0;



          //Do
          whatever you want;



          }



          if(TI)



          {



          TI
          = 0;



          //Do
          whatever you want;



          }



          }

          以上設(shè)置,用串口調(diào)試助手調(diào)試通過(guò)。



          評(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); })();