首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 常用文档 > 51单片机串行通讯中波特率的自动检测

51单片机串行通讯中波特率的自动检测

资料介绍
单片机资料

本文介绍一种在 80C51
串行通讯应用中自动检测波特率的方法。按照经验,程序起动后所接收到的第1个字符用
于测量波特率。

       
这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率
的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限
制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出
波特率的定时间隔。

        显然,最快捷的方法是检测一个单独位时间(single bit
time),以确定接收波特率应该是多少。可是,在 RS-232 模式下,许多 ASCII
字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(
这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在
一定范围内发生变化。此外,许多系统采用 8 位数据、无奇偶校验的格式传输 ASCII
字符。在这种格式里,普通 ASCII 字节不会有 MSB
设定,并且,UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看
见数据的停止位。

      
在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起
动定时器T0。在其后的串行数据的每一个上升沿,将定时器
T0的数值捕获并保存。当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始
位到最后一个上升沿(我们假设是停止位)过程所持续的时间。

       CmpTable
表格列出了每一波特率的最大测量时间。这些数据是经过选择的,所以,4
个数据位时间(加上起始位时间)仍可产生正确的波特率。

      
使用这种方法时,必须遵守一个假设:这种技术仅取决于所接收到的一个字符,接收这
个字符的波特率必须大于最低波特率。本质上来说,这意味着这个字符必须来自正常敲
击键盘
51单片机串行通讯中波特率的自动检测
本地下载

评论