<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è)方法

          串行通信波特率的一種自動(dòng)檢測(cè)方法

          作者: 時(shí)間:2012-06-06 來源:網(wǎng)絡(luò) 收藏

            串行通信是終端和主機(jī)之間的主要通信方式,通信一般選擇1800、4800、9600和 19200等。終端的類型有很多種,其通信速率也有很多種選擇。主機(jī)怎樣確定終端的通信速率呢?本文給出了一種簡(jiǎn)單、易行的方法:設(shè)定主機(jī)的接收(以9600波特為例),終端發(fā)送一個(gè)特定的字符(以回車符為例),主機(jī)根據(jù)接收到的字符信息就可以確定終端的通信。本文對(duì)這種方法予以詳述。

          1 基本方法
            回車符的ASCII值為0x0D。串行通信時(shí)附加一個(gè)起始位和終止位,位的傳輸順序一般是 先傳低位再傳高位。此時(shí)回車符的二進(jìn)制表示方式為:

          串行通信波特率的一種自動(dòng)檢測(cè)方法

          圖1 回車符的位序列

            串行通信中一個(gè)二進(jìn)制位的傳輸時(shí)間(記為T)取決于通信的波特率,9600波特時(shí)一個(gè) 二進(jìn)制位的傳輸時(shí)間是19200波特時(shí)一個(gè)二進(jìn)制位傳輸時(shí)間的兩倍,即:2*T19200=T 9600。因此,9600波特時(shí)一個(gè)位的傳輸時(shí)間,19200波特時(shí)可以傳輸兩個(gè)位。同樣地 ,9600波特傳輸兩個(gè)位的時(shí)間在4800波特時(shí)只能傳送一個(gè)位。主機(jī)設(shè)定接收波特率為9600, 終端只有也以9600波特發(fā)送的字符,主機(jī)才能正確地接收。發(fā)送波特率高于或低于9600都會(huì) 使主機(jī)接收到的字符發(fā)生錯(cuò)誤。接收波特率為9600,終端以不同的波特率發(fā)送回車符時(shí),主 機(jī)接收到的二進(jìn)制序列如表1所示。
            從表1中可以看出,除了19200和1800波特時(shí)兩種特例情況,其他情形的二進(jìn)制序列都是 9600波特時(shí)二進(jìn)制序列的變換。取前十個(gè)二進(jìn)制位與9600波特時(shí)的二進(jìn)制位相對(duì)應(yīng)。忽略缺 少停止位‘1’引發(fā)的數(shù)據(jù)幀錯(cuò)誤,把接收到的字符表示成字節(jié)方式(如表1的最右列所示) 。例如:在為1200波特,接收速率為9600波特時(shí),主機(jī)得到的字節(jié)是0x80,而不 是正確的回車符0x0D。因?yàn)樵诓煌?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/發(fā)送速率">發(fā)送速率下(9600,4800,2400,1200)得到的字節(jié) 不同,所以通過接收字符的判定就可以確定發(fā)送波特率。
            發(fā)送波特率為19200時(shí),其發(fā)送速度正好是接收速度(9600波特)的兩倍,因此發(fā)送端 的兩個(gè)二進(jìn)制位會(huì)被接收端看作一個(gè)。取決于不同的串行接口硬件,‘01’和‘10’這兩種 二進(jìn)制位組合可能被認(rèn)為是‘1’或者‘0’。幸運(yùn)的是,只有0~4位存在這樣的歧義問題, 后面的位因?yàn)槎际峭V刮?,所以都是?’。因此,為19200波特時(shí)接收到的字符其高半個(gè)字節(jié)為0xF。低半個(gè)字節(jié)可能是多個(gè)值中的一個(gè),但不會(huì)是0x0,因?yàn)?x0D中有相鄰 的兩個(gè)‘1’,這就會(huì)至少在低半個(gè)字節(jié)中產(chǎn)生一個(gè)‘1’。因此,整個(gè)字節(jié)的形式為0xF?, 且低半個(gè)字節(jié)不為0。

          表1  不同波特率下的二進(jìn)制序列

          波特率

          接收到的二進(jìn)制位序列

          字節(jié)表示

          19200

          0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1

          0xF?

          9600

          0 1  0 1  1 0  0  0 0  1 

          0x0D

          4800

          0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1

          0xE6

          2400

          0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1

          0x78

          1800

          0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1

          0xE0

          1800

          0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1

          0xF0

          1200

          0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0

          0x80

          600

          0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

          0x00

          300

          0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

          0x00

          150

          0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

          0x00

          110

          0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

          0x00

            發(fā)送速率為1800波特時(shí),因?yàn)?BR>  T1800=T9600*16/3,
          而16/3不是整數(shù),接收端二進(jìn)制位的狀態(tài)轉(zhuǎn)換時(shí)刻和9600波特不一一對(duì)應(yīng),引起在接收端 的一個(gè)位接收周期內(nèi)有狀態(tài)發(fā)生變化的可能。表1中給出的第六個(gè)位(表示為x)就是這種情 況。因?yàn)閤有可能被看作‘1’,也有可能被看作‘0’,所以發(fā)送速率為1800波特時(shí)接收到 的字節(jié)可能是0xE0或者0xF0。波特率為3600和7200時(shí)也有同樣的問題,也可以采用同樣的方 法,但不確定的位數(shù)會(huì)增加,需要檢測(cè)的字節(jié)種類也會(huì)更多。3600波特和7200波特的傳輸速 率幾乎不采用,因此這個(gè)問題并不嚴(yán)重。只要發(fā)送波特率在1200~19200之間,我們都可以 通過接收到的一個(gè)字符對(duì)此波特率進(jìn)行唯一的判定。


          上一頁(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); })();