4942|51

3252

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

哪个坛友知道波特率误差是如何计算出来的? [复制链接]

 

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

164949wrrcemrflv7aryyl.jpg (80.07 KB, 下载次数: 0)

164949wrrcemrflv7aryyl.jpg
此帖出自51单片机论坛

最新回复

[attach]506561[/attach]串口通信看第8章   详情 回复 发表于 2020-10-20 12:01
点赞 关注
 

回复
举报

2万

帖子

0

TA的资源

超级版主

沙发
 

你需要先把SMOD=0和SMOD=1是什么意思搞清楚,然后把异步串行通讯如何进行搞清楚,最后把51单片机如何产生异步串行通讯的波特率搞清楚。

此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

板凳
 

注意红色线联接的两个数字是相同的,一个是SMOD=0情况,另一个是SMOD=1情况,二者波特率恰是二倍关系。

此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

4
 

想计算波特率误差,先要知道如何计算波特率,是吧?

此帖出自51单片机论坛

点评

我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率  而时钟频率是24M  假如是4分频    就是{[24000000/4]/[24000000/4/115200]-115200}/11  详情 回复 发表于 2020-10-13 15:02
 
 
 

回复

1942

帖子

3

TA的资源

版主

5
 

你先学习一下计算波特率的公式,然后将相应的参数带入进去,得到的波特率与想要的相差多少,这就可以得到误差了。而且这些是别人已经整理好的了,如果你不计较这些的话,直接用就可以了。

此帖出自51单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

6
 
maychang 发表于 2020-10-12 19:32 想计算波特率误差,先要知道如何计算波特率,是吧?

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

邮洽图片20201013145646.jpg (260.6 KB, 下载次数: 0)

邮洽图片20201013145646.jpg
此帖出自51单片机论坛

点评

"有人说直接 用时钟频率/分频数/定时器初值" 那是胡说。  详情 回复 发表于 2020-10-13 16:47
如果石英晶体频率6MHz,定时器1高8位预装值E6H,SMOD=1,那么你的实际波特率就只有1201.92。  详情 回复 发表于 2020-10-13 16:45
至于这种情况(石英晶体频率12MHz,定时器1高8位预装值E6H,SMOD=1)下,波特率误差是多少,自己算吧。  详情 回复 发表于 2020-10-13 16:31
当SMOD=0时,定时器1低8位溢出率将除以32(分频,硬件就是如此设计的),但SMOD=1时,定时器1低8位溢出率将除以16,这就是你采用的实际波特率。 例如,石英晶体频率12MHz,定时器1高8位预装值E6H  详情 回复 发表于 2020-10-13 16:22
51单片机必须接石英晶体(也可以用压电陶瓷)作为时针发生器。 对51单片机来说,12个石英晶体振荡周期为一个时钟周期。别问为什么,硬件就是这样设计的。石英晶体频率为12MHz时,一个时钟周期就是1us。石英晶体频率  详情 回复 发表于 2020-10-13 15:42
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

7
 
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

先不要管定时器2。51单片机只有定时器0和定时器1,没有定时器2。52单片机才有定时器2。

此帖出自51单片机论坛

点评

石英晶体频率确定后,要改变定时器1低8位的溢出率,只能改变定时器1高8位预装值。  详情 回复 发表于 2020-10-13 16:00
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

8
 
本帖最后由 maychang 于 2020-10-13 15:48 编辑
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

51单片机必须接石英晶体(也可以用压电陶瓷)作为时针发生器。

对51单片机来说,12个石英晶体振荡周期为一个时钟周期。别问为什么,硬件就是这样设计的。石英晶体频率为12MHz时,一个时钟周期就是1us。石英晶体频率为6MHz时,一个时钟周期就是2us。石英晶体频率为4MHz时,一个时钟周期就是3us。石英晶体频率为3MHz时,一个时钟周期就是4us。依此类推。

定时器1有几种工作方式。用于波特率发生器,定时器1通常工作于8位自动重装方式(模式2)。定时器1工作于8位重装方式时,高8位相当于一个8位寄存器,可以事先写入数据,低8位是计数器,对时钟周期计数。高8位溢出时,自动将低8位所存储的数据重新装入高8位,仍然对时钟周期计数。

所以如果石英晶体频率为12MHz,定时器1高8位存储数据为FFH(255),每个时钟周期(1us)定时器1低8位产生一次溢出(从FFH只计一个数就到了00H,也就是256)。定时器1高8位存储数据为FEH(254)时,每两个时钟周期(2us)定时器1低8位产生一次溢出。

如果石英晶体频率为6MHz,定时器1高8位存储数据为FFH(255),每个时钟周期(2us)定时器1低8位产生一次溢出(从FFH只计一个数就到了00H,也就是256)。定时器1高8位存储数据为FEH(254)时,每两个时钟周期(4us)定时器1低8位产生一次溢出。

如果石英晶体频率为4MHz,定时器1高8位存储数据为FFH(255),每个时钟周期(3us)定时器1低8位产生一次溢出(从FFH只计一个数就到了00H,也就是256)。定时器1高8位存储数据为FEH(254)时,每两个时钟周期(6us)定时器1低8位产生一次溢出。

此帖出自51单片机论坛

点评

为什么每两个时钟周期才产生一次溢出呢  详情 回复 发表于 2020-10-14 16:08
溢出就计数一次?  详情 回复 发表于 2020-10-14 16:05
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

9
 
本帖最后由 maychang 于 2020-10-13 16:25 编辑
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

定时器1低8位每秒产生多少次溢出,称为定时器1低8位的溢出率。所以,石英晶体频率为12MHz,定时器1高8位事先存储数据为0xE6(230)时,定时器1低8位每26us溢出一次,或者说每秒溢出38461.54次。石英晶体频率为6MHz,定时器1高8位事先存储数据为0xE6(230)时,定时器1低8位每52us溢出一次,或者说每秒溢出19230.77次。

此帖出自51单片机论坛

点评

你这个26us是  如何计算的    详情 回复 发表于 2020-10-14 16:11
溢出之后要怎么处理?溢出就是装满的意思吧  就是65535满了?  详情 回复 发表于 2020-10-14 15:44
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

10
 
本帖最后由 maychang 于 2020-10-13 16:13 编辑
maychang 发表于 2020-10-13 15:24 先不要管定时器2。51单片机只有定时器0和定时器1,没有定时器2。52单片机才有定时器2。

石英晶体频率确定后,要改变定时器1低8位的溢出率,只能改变定时器1高8位预装值。此预装值越大,定时器1低8位的溢出率越高。最大只可能到FFH(255),此时定时器1低8位溢出率为石英晶体频率的1/12。

此帖出自51单片机论坛

点评

这个溢出率是啥玩意?65535-初值?  详情 回复 发表于 2020-10-14 15:43
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

11
 
本帖最后由 maychang 于 2020-10-13 16:32 编辑
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

当SMOD=0时,定时器1低8位溢出率将除以32(分频。别问为什么,硬件就是如此设计的),但SMOD=1时,定时器1低8位溢出率将除以16,这就是你采用的实际波特率。

例如,石英晶体频率12MHz,定时器1高8位预装值E6H,SMOD=1,38461.54/16=2403.85,这就是你采用的实际波特率。也就是说,异步串行通讯每位占用时间为1/2403.85=0.000416秒。

此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

12
 
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

至于这种情况(石英晶体频率12MHz,定时器1高8位预装值E6H,SMOD=1)下,波特率误差是多少,自己算吧。

此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

13
 
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

如果石英晶体频率6MHz,定时器1高8位预装值E6H,SMOD=1,那么你的实际波特率就只有1201.92。

此帖出自51单片机论坛

点评

这个预装值是怎么来的    详情 回复 发表于 2020-10-14 15:42
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

14
 
QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时器初值  比如需要115200的波特率 ...

"有人说直接 用时钟频率/分频数/定时器初值"

那是胡说。

此帖出自51单片机论坛
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

15
 

楼主到底是干什么的?还弄这些。。。好跳跃

此帖出自51单片机论坛

点评

遇到了 就问下  硬件的  详情 回复 发表于 2020-10-14 15:41
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

16
 
freebsder 发表于 2020-10-13 21:00 楼主到底是干什么的?还弄这些。。。好跳跃

遇到了 就问下  硬件的

此帖出自51单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

17
 
maychang 发表于 2020-10-13 16:45 如果石英晶体频率6MHz,定时器1高8位预装值E6H,SMOD=1,那么你的实际波特率就只有1201.92。

这个预装值是怎么来的  

此帖出自51单片机论坛

点评

当然,其数值必须由你自己根据所需要的波特率计算出来。计算时必须考虑实际使用的石英晶体频率以及SMOD位数值。  详情 回复 发表于 2020-10-14 15:48
“这个预装值是怎么来的” 单片机初始化时由你自己写入定时器1高8位,即写入TH1。  详情 回复 发表于 2020-10-14 15:44
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

18
 
maychang 发表于 2020-10-13 16:00 maychang 发表于 2020-10-13 15:24 先不要管定时器2。51单片机只有定时器0和定时器1,没有定时器2。52单 ...

这个溢出率是啥玩意?65535-初值?

此帖出自51单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

19
 
QWE4562009 发表于 2020-10-14 15:42 这个预装值是怎么来的  

“这个预装值是怎么来的”

单片机初始化时由你自己写入定时器1高8位,即写入TH1。

此帖出自51单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

20
 
maychang 发表于 2020-10-13 15:59 QWE4562009 发表于 2020-10-13 15:02 我看了下  但是真的没看懂 有人说直接 用时钟频率/分频数/定时 ...

溢出之后要怎么处理?溢出就是装满的意思吧  就是65535满了?

此帖出自51单片机论坛

点评

前面已经说了,8位重装工作状态,高8位不参与计数,只有低8位计数。 所以,不是加1后为65536,而是TL1加1后为256,即00。    详情 回复 发表于 2020-10-14 15:53
溢出之后不必管它,硬件会自动处理。  详情 回复 发表于 2020-10-14 15:51
加1之后成为0,就是溢出。正如你做小学一年级算术,9加1等于10,满10进1,个位为0完全一样。  详情 回复 发表于 2020-10-14 15:51
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表