微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 串行通信波特率的一种自动检测方法

串行通信波特率的一种自动检测方法

时间:06-06 来源:互联网 点击:

间差
(周期)

时间差
(实时间)

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’的跳变在初始化以后即刻发生。这个跳变让接收端 得到字节0x00。第二个跳变在初始化(16+16)*T9600秒以后发生,这会让接收端认 为另外一个字节开始接收了。一个二进制位的接收时间是T9600,所以串行接口电路 会在第一个跳变以后10* T9600秒提示第一个字节接收完毕,在(16+16+10)* T96 00秒以后提示第二个字节接收完毕。因此600波特时,第一个字节接收完毕和第二个字节 接收完毕的时间差是(16+16+10-10)* T9600=32* T9600秒。表2的第三列所示 是把这个时间差以T9600的个数表示。因为T9600=1/9600秒=104.16毫秒,相 乘可以得到两个字节接收完毕的实时间差。不同发送波特率的时间差如表2的最后一列所示 。有了这个时间差信息,就可以确定低传输速率时的波特率了:测定第一个和第二个字节的 接收时间差,然后在时间差常数表(表2)里查出哪个波特率下的时间差与之最相近,对应 的就是终端发送波特率。即使测定的时间差有些误差,一般也可以正确地确定波特率。

3 实现方式
  通过以上分析,各种波特率都可以通过回车符的发送和接收信息来测定,算法实现的伪 代码在本文的最后给出。应用实践证明了这种方法的有效性。
; 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]赵依军等. 单片微机接口技术[M].北京: 人民邮电出版社,1989.
[2]刘利. 软硬件技术参考大全[M].北京: 学苑出版社,1993.
[3]张世一. 数字信号处理[M]. 北京:北京工业学院出版社,1987

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top