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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 模擬串口自動(dòng)測(cè)量波特率的單片機(jī)程序

          模擬串口自動(dòng)測(cè)量波特率的單片機(jī)程序

          作者: 時(shí)間:2012-08-02 來(lái)源:網(wǎng)絡(luò) 收藏

          我這個(gè)程序能夠測(cè)量串口的,并且將自身的設(shè)置到通訊。
          這個(gè)在STC89C52/STC15F104(其實(shí)主要針對(duì)STC15F104,因?yàn)樗鼪](méi)有串口)上面通過(guò)。不過(guò)因?yàn)槭?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/模擬串口">模擬串口,在11.0592 12T的情況下,最多到19200。
          然后在STC15F104上面,要適量的減少補(bǔ)償值……
          順便說(shuō)一句,編譯器建議使用sdcc。keil的SB printf函數(shù)搞死我了……在22.1184 6T的情況下大約能到57600.
          當(dāng)然在STC15F系列到115200毫無(wú)壓力,可是是半雙工的。要做全雙工只能減倍波特率……
          測(cè)量波特率的方法很簡(jiǎn)單。校準(zhǔn)他的波特率的方法就是發(fā)送沒(méi)有連續(xù)低電平的字符,類似0x55/0xff/0x7f之類的。使用這個(gè)特性還可以將它用在STC自動(dòng)冷啟動(dòng)下載器中。不過(guò)注意要限制校準(zhǔn)波特率。否則你的正常串口通訊可能會(huì)被干擾,因?yàn)槟惚热?15200通訊的時(shí)候,正好波形類似57600的7F,校準(zhǔn)上去了把你的連接掐了,估計(jì)很多人都會(huì)看看程序是不是跑飛了……所以一定要把同步波特率降到4800以下,因?yàn)镾TC-ISP的默認(rèn)最低波特率是從1200~4800.
          這個(gè)也可以適用于不準(zhǔn)晶振的單片機(jī)和計(jì)算機(jī)通訊。方法就是計(jì)算機(jī)以不同波特率發(fā)送校準(zhǔn)信號(hào),找出誤碼率最低的波特率,然后發(fā)送確認(rèn),讓單片機(jī)在這個(gè)重載值下運(yùn)行,也適用于時(shí)鐘速度可能變化的單片機(jī)/懶得計(jì)算重載值的人使用。
          然后低于4800的波特率在11.0592的速度下面只能分頻,這也是不得已的……
          上代碼:

          /*
          * 自適應(yīng)波特率程序,
          * BY 萬(wàn)致遠(yuǎn)@rwzy.co.cc
          * CRYSTAL:任意
          */
          #include hwconfig.h>
          #include type-def.h>
          #include stdio.h>
          #define MIS_0 0
          #define MIS_2 1
          #define MIS_4 2
          #define MIS_8 3
          #define MIS_16 4
          #define TX1 P1_0 //發(fā)送數(shù)據(jù)端口
          #define RX1 P1_1 //接收數(shù)據(jù)端口
          BYTE min_mode;//減倍模式
          void WaitTF1()
          {
          while(!TF1);
          TF1=0;
          if(min_mode==MIS_2)
          {// /2
          while(!TF1);
          TF1=0;
          }
          else if(min_mode == MIS_4)
          {// /4
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          }
          else if(min_mode == MIS_8)
          {// /8
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          }
          else if(min_mode == MIS_16)
          {// /16
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          while(!TF1);
          TF1=0;
          }
          }


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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