摘 要:给出了一种利用接收到的字符信息检测串行终端通信波特率 的方法。此方法简单、可靠、易行,并给出了实现这种检测方法的伪代码。
串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率。本文对这种方法予以详述。
1 基本方法
图1 回车符的位序列
串行通信中一个二进制位的传输时间(记为T)取决于通信的波特率,9600波特时一个 二进制位的传输时间是19200波特时一个二进制位传输时间的两倍,即:2*T19200=T 9600。因此,9600波特时一个位的传输时间,19200波特时可以传输两个位。同样地 ,9600波特传输两个位的时间在4800波特时只能传送一个位。主机设定接收波特率为9600, 终端只有也以9600波特发送的字符,主机才能正确地接收。发送波特率高于或低于9600都会 使主机接收到的字符发生错误。接收波特率为9600,终端以不同的波特率发送回车符时,主 机接收到的二进制序列如表1所示。
表1 不同波特率下的二进制序列
波特率 WWW_PLCJS_COM-PLC-技.术_网 |
接收到的二进制位序列 WWW.PLCJS.COM——可编程控制器技术门户 |
字节表示 WWW_PL※CJS_COM-PLC-技.术_网 |
19200 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) |
0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 WWW_PLC※JS_COM-PmLC-技.术_网 |
0xF? WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) |
9600 WWW_PL※CJS_COM-PLC-技.术_网 |
0 1 0 1 1 0 0 0 0 1 W1WW_P4LCJS_COM-PLC-技.术_网 |
0x0D P.L.C.技.术.网——可编程控制器技术门户 |
4800 WWW_PLCJS_COM-PLC-技.术_网 |
0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) |
0xE6 WWW_P※LCJS_COM-PLC-)技.术_网 |
2400 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) |
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) |
0x78 WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
1800 WWW_PLCJS_COM-PLC-技.术_网 |
0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1 WWW.PLCJS.COM——可编程控制器技术门户 |
0xE0 WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
1800 WW.W_PLCJS_COM-PLC-技.术_网 |
0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1 WWcW_PLCJS_COM-PLC-技.术_网 |
0xF0 WWW_PLCJS@_COM%-PLC-技.术_网 |
1200 WWW_P※LCJS_CO※M-PLC-技-.术_网 |
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 WW.W_PLCJS_COM-PLC-技.术_网 |
0x80 WW.W_PLCJS_COM-PLC-技.术_网 |
600 WWcW_PLCJS_COM-PLC-技.术_网 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) |
0x00 WWW_PLCJS@_COM%-PLC-技.术_网 |
300 plcjs.技.术_网 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 WWW_PL※CJS_COM-PLC-技.术_网 |
0x00 WWW_PLCJS_COM-PLC-技.术_网 |
150 ——可——编——程——控-制-器-技——术——门——户 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 W1WW_P4LCJS_COM-PLC-技.术_网 |
0x00 WWW_PL※CJS_COM-PLC-技.术_网 |
110 WWW.PLCJS.COM——可编程控制器技术门户 |
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 WWW_P※LCJS_CO※M-PLC-技-.术_网 |
0x00 P.L.C.技.术.网——可编程控制器技术门户 |
发送速率为1800波特时,因为
2 低波特率的检测
表2 低波特率回车符的接收方式
波特率 WWW_P※LCJS_CO※M-PLC-技-.术_网 |
9600波特二进制序列 WWW_PLC※JS_COM-PmLC-技.术_网 |
时间差 WWW_P※LCJS_COM-PLC-)技.术_网 (周期) WWW_P※LCJS_COM-PLC-)技.术_网 |
时间差 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) (实时间) WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) |
600 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 |
16 0s 16 1s 16 0s WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户) |
32 WWW_PLC※JS_COM-PmLC-技.术_网 |
3.33ms WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) |
300 W1WW_P4LCJS_COM-PLC-技.术_网 |
32 0s 32 1s 32 0s WWW.PLCJS.COM——可编程控制器技术门户 |
64 WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户) |
6.66ms WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) |
150 WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
64 0s 64 1s 64 0s WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户) |
128 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) |
13.33ms WWW.PLCJS.COM——可编程控制器技术门户 |
110 WWW_PL※CJS_COM-PLC-技.术_网 |
87 0s 87 1s 87 0s WWW_P※LCJS_CO※M-PLC-技-.术_网 |
174 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 |
18.13ms WWW_P※LCJS_CO※M-PLC-技-.术_网 |
75 WWW_PLCJS@_COM%-PLC-技.术_网 |
128 0s 128 1s 128 0s P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 |
256 W1WW_P4LCJS_COM-PLC-技.术_网 |
26.66ms WWcW_PLCJS_COM-PLC-技.术_网 |
50 P.L.C.技.术.网——可编程控制器技术门户 |
192 0s 192 1s 192 0s WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) |
384 P.L.C.技.术.网——可编程控制器技术门户 |
4 0.00ms WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) |
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 实现方式
on the b asis of a single
; RETURN (0x0D) character received from it.
参考文献:
[1]赵依军等. 单片微机接口技术[M].北京: 人民邮电出版社,1989.
回到页顶