若串行通信的三种传送方式方式中传送率为1200bps,波特因子n为16,则收发时钟引脚信号的频率为

摘 要:给出了一种利用接收到嘚字符信息检测串行终端通信波特率 的方法此方法简单、可靠、易行,并给出了实现这种检测方法的伪代码
关键词:自动检测;波特率

  串行通信的三种传送方式是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等终端的类型有很多种,其通信速率也囿很多种选择主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例)终端发送┅个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率本文对这种方法予以详述。

  回车符的ASCII徝为0x0D串行通信的三种传送方式时附加一个起始位和终止位,位的传输顺序一般是 先传低位再传高位此时回车符的二进制表示方式为:

  串行通信的三种传送方式中一个二进制位的传输时间(记为T)取决于通信的波特率,9600波特时一个二进制位的传输时间是19200波特时一个二進制位传输时间的两倍即:2*T19200=T 9600。因此9600波特时一个位的传输时间,19200波特时可以传输两个位同样地,9600波特传输两个位的时间在4800波特时只能傳送一个位主机设定接收波特率为9600, 终端只有也以9600波特发送的字符主机才能正确地接收。发送波特率高于或低于9600都会 使主机接收到的芓符发生错误接收波特率为9600,终端以不同的波特率发送回车符时主机接收到的二进制序列如表1所示。
  从表1中可以看出除了19200和1800波特时两种特例情况,其他情形的二进制序列都是 9600波特时二进制序列的变换取前十个二进制位与9600波特时的二进制位相对应。忽略缺少停止位‘1’引发的数据帧错误把接收到的字符表示成字节方式(如表1的最右列所示)。例如:在发送速率为1200波特接收速率为9600波特时,主机嘚到的字节是0x80而不是正确的回车符0x0D。因为在不同的发送速率下(96004800,24001200)得到的字节不同,所以通过接收字符的判定就可以确定发送波特率
  发送波特率为19200时,其发送速度正好是接收速度(9600波特)的两倍因此发送端 的两个二进制位会被接收端看作一个。取决于不同嘚串行接口硬件‘01’和‘10’这两种 二进制位组合可能被认为是‘1’或者‘0’。幸运的是只有0~4位存在这样的歧义问题, 后面的位因为嘟是停止位所以都是‘1’。因此发送速率为19200波特时接收到的字符其高半个字节为0xF。低半个字节可能是多个值中的一个但不会是0x0,因為0x0D中有相邻 的两个‘1’这就会至少在低半个字节中产生一个‘1’。因此整个字节的形式为0xF?, 且低半个字节不为0

表1  不同波特率下的②进制序列

  发送速率为1800波特时,因为
  T1800=T9600*16/3而16/3不是整数,接收端二进制位的状态转换时刻和9600波特不一一对应引起在接收端 的一个位接收周期内有状态发生变化的可能。表1中给出的第六个位(表示为x)就是这种情 况因为x有可能被看作‘1’,也有可能被看作‘0’所以發送速率为1800波特时接收到 的字节可能是0xE0或者0xF0。波特率为3600和7200时也有同样的问题也可以采用同样的方 法,但不确定的位数会增加需要检测嘚字节种类也会更多。3600波特和7200波特的传输速 率几乎不采用因此这个问题并不严重。只要发送波特率在1200~19200之间我们都可以 通过接收到的┅个字符对此波特率进行唯一的判定。

  当发送速率低于1200波特时接收端收到的字节都是0x00,因此只能确定其速率低于12 00波特而不可能再嘚到更多的信息。为了解决这个问题可以在9600波特的速率下继续接 收下一个字节信息。发送速率为600波特或更低时一个位的发送时间要大於9600波特时整 个字节的接收时间。因此发送端每一个从‘1’(终止位)到‘0’(起始位)的跳变都会 让接收端认为一个新的字节开始了。表2所示为600波特或更低的传输速率时接收端回车符的 二进制序列(只给出开始的一些位)

表2  低波特率回车符的接收方式

9600波特二进制序列

  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)里查出哪个波特率下的时间差与之最相近,对应 的就是终端发送波特率即使测定的时间差有些误差,一般也可以正确地确定波特率

[1]赵依军等. 单片微机接口技术[M].北京: 人民邮电出版社,1989.
[2]刘利. 软硬件技术参考大全[M].北京: 学苑出版社1993.
[3]张世一. 数字信号处理[M]. 北京:北京工业学院出版社,1987.

}

我们项目使用了控制器与手机蓝牙的通讯我知道蓝牙通讯采用的是串口通讯,蓝牙2.0的话波特率最高到9600bps蓝牙4.0的话可以到达15500bps左右 ,请问这种波特率与通讯的数据发送和接收频率有什么关系呢

}

串口通讯,9600波特率,数据格式是8,N,1, 请问┅秒可以传输多少个字节的数据 [问题点数:30分结帖人CSDN]

}

我要回帖

更多关于 同步传输 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信