新聞中心

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é)開始了。表2所示為600波特或更低的傳輸速率時(shí)接收端回車符的 二進(jìn)制序列(只給出開始的一些位)。

表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é)開始接收了。一個(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)閉