581|51

1343

帖子

0

资源

纯净的硅(初级)

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

 

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

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

回复

1万

帖子

0

资源

超级版主

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


回复

1万

帖子

0

资源

超级版主

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


回复

1万

帖子

0

资源

超级版主

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

点评

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

回复

276

帖子

0

资源

版主

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


回复

1343

帖子

0

资源

纯净的硅(初级)

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

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

邮洽图片20201013145646.jpg

点评

"有人说直接 用时钟频率/分频数/定时器初值" 那是胡说。  详情 回复 发表于 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

回复

1万

帖子

0

资源

超级版主

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

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

点评

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

回复

1万

帖子

0

资源

超级版主

本帖最后由 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位产生一次溢出。

点评

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

回复

1万

帖子

0

资源

超级版主

本帖最后由 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次。

点评

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

回复

1万

帖子

0

资源

超级版主

本帖最后由 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。

点评

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

回复

1万

帖子

0

资源

超级版主

本帖最后由 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秒。


回复

1万

帖子

0

资源

超级版主

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

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


回复

1万

帖子

0

资源

超级版主

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

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

点评

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

回复

1万

帖子

0

资源

超级版主

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

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

那是胡说。


回复

2652

帖子

1

资源

五彩晶圆(初级)

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

点评

遇到了 就问下  硬件的  详情 回复 发表于 2020-10-14 15:41
个人签名人已离开,无事别找,找也找不到。

回复

1343

帖子

0

资源

纯净的硅(初级)

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

遇到了 就问下  硬件的


回复

1343

帖子

0

资源

纯净的硅(初级)

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

这个预装值是怎么来的  

点评

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

回复

1343

帖子

0

资源

纯净的硅(初级)

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

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


回复

1万

帖子

0

资源

超级版主

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

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

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


回复

1343

帖子

0

资源

纯净的硅(初级)

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

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

点评

前面已经说了,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

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

关闭
站长推荐上一条 1/5 下一条

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

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

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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