打印

串行通信时的波特率不匹配

[复制链接]
3751|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
srgr|  楼主 | 2007-9-13 08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   在单片机C8051f020(波特率8590)和计算机(波特率9600)通信的时候波特率不匹配。在两者进行通信的时候会出现什么问题呢?
由于晶振的频率的原因,在单片机波特率设置方面不能接近9600。其他的波特率也不能很好的匹配。误差在5%以内。我现在有两个疑问:
1.每秒钟传送的二进制数码的位数称为波特率。能不能这样理解:波特率是一种单位时间内传送(接收)数据的能力,波特率大说明单位时间内处理数据的能力就强?
2. 当发与接的波特率不相等的时候。
   如果BAUD发 > BAUD收,无数据缓冲的话会有数据丢失??
   如果BAUD发 < BAUD收,接收的数据不会丢失?
还请高手回答和补充对于波特率理解的问题。

相关帖子

沙发
wowow| | 2007-9-13 09:02 | 只看该作者

貌似对UART的收发的理解有些偏差

UART的接收具有一定的容错性,接收方用BAUD率大得多的时钟来检测RXD口的波形,比如51是16倍或32倍的时钟,这个可以从51波特率的计算公式里看出来。然后利用一个判决算法,来判断收到的是什么bit。具体算法不太清楚,我原来用的一个算法是:先判断起始位,设定连续多少个时钟检测到低电平表示收到起始位,然后选定好一个时间点,以这个时间点开始,16次检测中有大于12次是高,则收到的是1,大于12次收到低,则收到的是0,否则为接收错误。大致这个思路吧。如果波形率误差<5%,按这类算法没多大问题。但对连续很长的数据,有些做的不太好接收器可能错判起始位导致出错,因此最好每发一段数据包就停顿一会,包长从16字节到1k都行,以实验不出错为准。如果每个包再加上校验就更好了,出错就重发。

使用特权

评论回复
板凳
ayb_ice| | 2007-9-13 09:32 | 只看该作者

差别不大,问题不大...

使用特权

评论回复
地板
CONWH| | 2007-9-13 09:40 | 只看该作者

5%的误差也太大了,理论值是不大于2.5%

使用特权

评论回复
5
srgr|  楼主 | 2007-9-14 08:36 | 只看该作者

补充

看来只有加外部晶振和调整波特率了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

68

帖子

1

粉丝