欢迎来到天天文库
浏览记录
ID:32404011
大小:59.00 KB
页数:4页
时间:2019-02-04
《串口波特率自动检测》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、串行通信波特率的一种自动检测方法(哈尔滨工业大学控制工程系 150001)任贵勇 屈彦成 王常虹摘 要:给出了一种利用接收到的字符信息检测串行终端通信波特率的方法。此方法简单、可靠、易行,并给出了实现这种检测方法的伪代码。关键词:自动检测;波特率 串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字
2、符信息就可以确定终端的通信波特率。本文对这种方法予以详述。1 基本方法 回车符的ASCII值为0x0D。串行通信时附加一个起始位和终止位,位的传输顺序一般是先传低位再传高位。此时回车符的二进制表示方式为:图1 回车符的位序列 串行通信中一个二进制位的传输时间(记为T)取决于通信的波特率,9600波特时一个二进制位的传输时间是19200波特时一个二进制位传输时间的两倍,即:2*T19200=T9600。因此,9600波特时一个位的传输时间,19200波特时可以传输两个位。同样地,9600波特传输两个位的时间在4800波特时只能传送一个位。主机设定接收波特
3、率为9600,终端只有也以9600波特发送的字符,主机才能正确地接收。发送波特率高于或低于9600都会使主机接收到的字符发生错误。接收波特率为9600,终端以不同的波特率发送回车符时,主机接收到的二进制序列如表1所示。 从表1中可以看出,除了19200和1800波特时两种特例情况,其他情形的二进制序列都是9600波特时二进制序列的变换。取前十个二进制位与9600波特时的二进制位相对应。忽略缺少停止位‘1’引发的数据帧错误,把接收到的字符表示成字节方式(如表1的最右列所示)。例如:在发送速率为1200波特,接收速率为9600波特时,主机得到的字节是0x80
4、,而不是正确的回车符0x0D。因为在不同的发送速率下(9600,4800,2400,1200)得到的字节不同,所以通过接收字符的判定就可以确定发送波特率。 发送波特率为19200时,其发送速度正好是接收速度(9600波特)的两倍,因此发送端的两个二进制位会被接收端看作一个。取决于不同的串行接口硬件,‘01’和‘10’这两种二进制位组合可能被认为是‘1’或者‘0’。幸运的是,只有0~4位存在这样的歧义问题,后面的位因为都是停止位,所以都是‘1’。因此,发送速率为19200波特时接收到的字符其高半个字节为0xF。低半个字节可能是多个值中的一个,但不会是0x0
5、,因为0x0D中有相邻的两个‘1’,这就会至少在低半个字节中产生一个‘1’。因此,整个字节的形式为0xF?,且低半个字节不为0。表1 不同波特率下的二进制序列波特率接收到的二进制位序列字节表示19200010110000111111111110xF?96000 1 0 1 1 0 0 0 0 1 0x0D4800001100111100000000110xE62400000011110000111111110x78180000000x1111x0000011110xE0180000000x1111x0000011110xF01200000000001111
6、111100000x80600000000000000000011110x00300000000000000000000000x00150000000000000000000000x00110000000000000000000000x00 发送速率为1800波特时,因为 T1800=T9600*16/3,而16/3不是整数,接收端二进制位的状态转换时刻和9600波特不一一对应,引起在接收端的一个位接收周期内有状态发生变化的可能。表1中给出的第六个位(表示为x)就是这种情况。因为x有可能被看作‘1’,也有可能被看作‘0’,所以发送速率为1800波特时接
7、收到的字节可能是0xE0或者0xF0。波特率为3600和7200时也有同样的问题,也可以采用同样的方法,但不确定的位数会增加,需要检测的字节种类也会更多。3600波特和7200波特的传输速率几乎不采用,因此这个问题并不严重。只要发送波特率在1200~19200之间,我们都可以通过接收到的一个字符对此波特率进行唯一的判定。2 低波特率的检测 当发送速率低于1200波特时,接收端收到的字节都是0x00,因此只能确定其速率低于1200波特,而不可能再得到更多的信息。为了解决这个问题,可以在9600波特的速率下继续接收下一个字节信息。发送速率为600波特或更低时
8、,一个位的发送时间要大于9600波特时整个字节的接收时间。因此,发
此文档下载收益归作者所有