新聞中心

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

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

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

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

        表2  低回車符的接收方式

        9600波特二進(jìn)制序列

        時(shí)間差
        (周期)

        時(shí)間差
        (實(shí)時(shí)間)

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

        3 實(shí)現(xiàn)方式
          通過(guò)以上分析,各種波特率都可以通過(guò)回車符的發(fā)送和接收信息來(lái)測(cè)定,算法實(shí)現(xiàn)的偽 代碼在本文的最后給出。應(yīng)用實(shí)踐證明了這種方法的有效性。
        ; 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■

        參考文獻(xiàn):

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


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

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 冕宁县| 平武县| 长泰县| 新竹市| 铁岭县| 新余市| 肇东市| 繁峙县| 都江堰市| 华池县| 德州市| 德惠市| 精河县| 宁乡县| 灵石县| 嵩明县| 鸡西市| 长宁县| 博罗县| 都匀市| 鄂托克旗| 罗江县| 贞丰县| 沿河| 锡林郭勒盟| 伊通| 陈巴尔虎旗| 渝中区| 松潘县| 咸阳市| 类乌齐县| 五家渠市| 定西市| 平南县| 宁德市| 崇文区| 小金县| 稷山县| 华宁县| 丰县| 澄城县|