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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串行通信波特率的一種自動檢測方法

          串行通信波特率的一種自動檢測方法

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

          2 低的檢測
            當低于1200波特時,接收端收到的字節(jié)都是0x00,因此只能確定其速率低于12 00波特,而不可能再得到更多的信息。為了解決這個問題,可以在9600波特的速率下繼續(xù)接 收下一個字節(jié)信息。為600波特或更低時,一個位的發(fā)送時間要大于9600波特時整 個字節(jié)的接收時間。因此,發(fā)送端每一個從‘1’(終止位)到‘0’(起始位)的跳變都會 讓接收端認為一個新的字節(jié)開始了。表2所示為600波特或更低的傳輸速率時接收端回車符的 二進制序列(只給出開始的一些位)。

          表2  低回車符的接收方式

          9600波特二進制序列

          時間差
          (周期)

          時間差
          (實時間)

          600

          16 0's 16 1's 16 0's

          32

          3.33ms

          300

          32 0's 32 1's 32 0's

          64

          6.66ms

          150

          64 0's 64 1's 64 0's

          128

          13.33ms

          110

          87 0's 87 1's 87 0's

          174

          18.13ms

          75

          128 0's 128 1's 128 0's

          256

          26.66ms

          50

          192 0's 192 1's 192 0's

          384

          4 0.00ms

            600波特時,第一個從‘1’到‘0’的跳變在初始化以后即刻發(fā)生。這個跳變讓接收端 得到字節(jié)0x00。第二個跳變在初始化(16+16)*T9600秒以后發(fā)生,這會讓接收端認 為另外一個字節(jié)開始接收了。一個二進制位的接收時間是T9600,所以串行接口電路 會在第一個跳變以后10* T9600秒提示第一個字節(jié)接收完畢,在(16+16+10)* T96 00秒以后提示第二個字節(jié)接收完畢。因此600波特時,第一個字節(jié)接收完畢和第二個字節(jié) 接收完畢的時間差是(16+16+10-10)* T9600=32* T9600秒。表2的第三列所示 是把這個時間差以T9600的個數(shù)表示。因為T9600=1/9600秒=104.16毫秒,相 乘可以得到兩個字節(jié)接收完畢的實時間差。不同發(fā)送波特率的時間差如表2的最后一列所示 。有了這個時間差信息,就可以確定低傳輸速率時的波特率了:測定第一個和第二個字節(jié)的 接收時間差,然后在時間差常數(shù)表(表2)里查出哪個波特率下的時間差與之最相近,對應(yīng) 的就是終端發(fā)送波特率。即使測定的時間差有些誤差,一般也可以正確地確定波特率。

          3 實現(xiàn)方式
            通過以上分析,各種波特率都可以通過回車符的發(fā)送和接收信息來測定,算法實現(xiàn)的偽 代碼在本文的最后給出。應(yīng)用實踐證明了這種方法的有效性。
          ; Pseudo code to determine what baud rate a transmitter is at,

          on the b asis of a single

          ; RETURN (0x0D) character received from it.

          Initialise receive baud rate to 9600
          Wait for Byte to be received
          IF Byte = 0x00 THEN
             Start Timer
             REPEAT
             UNTIL (Timer > 50 ms OR New Byte Received)
             CASE Timer IN
              1 ms-4 ms: 600 Baud
              5 ms-10 ms: 300 Baud
                11 ms-15 ms: 150 Baud
                16 ms-22 ms: 110 Baud
                23 ms-32 ms: 75 Baud
                33 ms-49 ms: 50 Baud
                 ELSE: Timed out; reset
            END CASE;
          ELSIF Byte >= 0xF1 THEN
             19200 Baud
          ELSE
            CASE Byte IN
              0x0D: 9600 Baud
              0xE6: 4800 Baud
              0x78: 2400 Baud
            0xE0,0xF0: 1800 Baud
              0x80: 1200 Baud
              ELSE: Line noise; reset
            END CASE
          END IF■

          參考文獻:

          [1]趙依軍等. 單片微機接口技術(shù)[M].北京: 人民郵電出版社,1989.
          [2]劉利. 軟硬件技術(shù)參考大全[M].北京: 學(xué)苑出版社,1993.
          [3]張世一. 數(shù)字信號處理[M]. 北京:北京工業(yè)學(xué)院出版社,1987


          上一頁 1 2 下一頁

          評論


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