找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3536|回复: 10
打印 上一主题 下一主题
收起左侧

哪个坛友知道单片机波特率误差是如何计算出来的?

[复制链接]
跳转到指定楼层
楼主
ID:668004 发表于 2020-10-10 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题

51hei图片20201010164849.jpg (56.03 KB, 下载次数: 49)

51hei图片20201010164849.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:668004 发表于 2020-10-12 18:41 | 只看该作者
哪个知道的 回复下   谢谢
回复

使用道具 举报

板凳
ID:584814 发表于 2020-10-13 11:40 | 只看该作者
首先,第一个在5600时也有偏差的只是未列入而已并不是完美;
其次,原理上先有波特率后有时钟频率,后者要顺应前者;
然后就是计算了,定时器时间取整体,每秒波特率你算一下就知道了。

太长不看:11.0592MHZ是应波特率而定制的晶振。
回复

使用道具 举报

地板
ID:668004 发表于 2020-10-13 15:06 | 只看该作者
man1234567 发表于 2020-10-13 11:40
首先,第一个在5600时也有偏差的只是未列入而已并不是完美;
其次,原理上先有波特率后有时钟频率,后者要 ...

我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率  而时钟频率是24M  假如是4分频    就是{[24000000/4]/[24000000/4/115200]-115200}/115200  *100%   对不对??
回复

使用道具 举报

5#
ID:668004 发表于 2020-10-13 15:19 | 只看该作者
man1234567 发表于 2020-10-13 11:40
首先,第一个在5600时也有偏差的只是未列入而已并不是完美;
其次,原理上先有波特率后有时钟频率,后者要 ...

我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率  而时钟频率是24M  假如是4分频    就是{[24000000/4]/[24000000/4/115200]-115200}/115200  *100%   对不对??

1.jpg (270.82 KB, 下载次数: 43)

1.jpg
回复

使用道具 举报

6#
ID:401564 发表于 2020-10-13 19:49 | 只看该作者
11.0592MHZ是专门为波特率生产的晶振
你这个表是8051单片机专用的波特率计算,别的单片机不一样算法,不通用的
你知道怎么计算也没有用
在这之前,你要知道波特率是什么意思,不是网上那什么速率什么的,而是要完全明白波特率才行
比如:1200波特率是表示1秒传送的数据位是1200位
然后你还要知道8051定时器作为波特率输出的工作模式,每个寄存器位的意义是什么,你肯定没看明白,看了就不会问这个了
别人说就是除这个除那个,最后就是这个,你只能一脸的茫然

你要是只想知道这误差怎么来的,前面的话不用看,拿晶振频率去除以波特率,11.0592是可以被左边的波特率整除的,这就没有误差了
回复

使用道具 举报

7#
ID:668004 发表于 2020-10-14 17:44 | 只看该作者
Y_G_G 发表于 2020-10-13 19:49
11.0592MHZ是专门为波特率生产的晶振
你这个表是8051单片机专用的波特率计算,别的单片机不一样算法,不通用 ...

你知道怎么计算吗  比如用12M晶振  波特率115200  会有多少的误差
回复

使用道具 举报

8#
ID:401564 发表于 2020-10-15 08:56 | 只看该作者
QWE4562012 发表于 2020-10-14 17:44
你知道怎么计算吗  比如用12M晶振  波特率115200  会有多少的误差

哥们,重点不在这好吗!这不是波特率的问题!所谓1200波特率就是1秒传输1200个位而已
重点在8051定时器的工作方式,8051定时器的工作方式,8051定时器的工作方式!说了3遍了
1200波特率就是要定时器1的溢出频率为1200HZ,那就是要定时器产生1200HZ的频率,那就去设置定时器1
这个时候波特率的计算不就变成了对定时器1的操作了吗?怎么样让定时器1输出1200HZ的频率呢?
这个说不明白的,从8051的时钟周期到机器周期,再到定时器1的分频模式,然后就是定时器的五六种工作模式,这是编程,不是种田,不能说先这样然后那样就可以了,每个寄存器每个位的操作都是有严格要求的,你要从8051系统工作方式开始看才能明白的,而且,这个只是针对8051的某个型号的单片机而已,并不通用,这要对单片机很了解才行,三言两语说不明白,我宁愿打那么多字,都不想从8051的时钟周期开始解释到定时器1的工作模式
回复

使用道具 举报

9#
ID:849519 发表于 2021-4-10 16:30 | 只看该作者
https://blog.csdn.net/cr2269736819/article/details/79780989
你可以参考上述网址的回答。
总的来说,误差计算的方法是一样的,Error= (当前波特率 – 标准波特率)/标准波特率 * 100%。
当前波特率,就是你采用你的晶振和设定的定时器初值,算出来的波特率;这个波特率本身不是你想要的,因为大家波特率一般都取标准值,比如1200,2400,4800,9600等等。举个例子,波特率你想取4800,但是由于晶振不是11.0592Mhz,你定时器算下来一定不是整数,但是你只能取整,假设这个整数是x。你把这个整数x带入到计算波特率的公式,求出来的波特率就是这个当前波特率。
标准波特率就是,你一开始想要取的理想值,比如上面例子里说的4800。
总的来说,误差都是:实际值相对于理想值来计算的

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:849519 发表于 2021-4-10 16:35 | 只看该作者
https://blog.csdn.net/cr2269736819/article/details/79780989
你可以参考上面的链接。
总的来说,误差都是:实际值相对于理想值计算的。公式为:误差= (实际波特率 – 理想波特率)/理想波特率 * 100%。
波特率,大家都是取标准值,比如1200,2400,4800,9600。这些标准值就是理想值。
你的时钟如果不是11.0592,定时器的初值算下来就不是整数,但是寄存器你只能取整数。假设这个整数是x,你用这个整数x再带入到计算波特率的公式,求得的值,就是实际波特率。
这么说理解了吗
回复

使用道具 举报

11#
ID:889352 发表于 2021-4-16 09:00 | 只看该作者
晶振 是关键
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表