找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机波特率公式中TH1=TL1=256-晶振值/12/2/16 /波特率,为什么要除以2求解

[复制链接]
跳转到指定楼层
楼主
ID:521921 发表于 2019-6-6 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手:

     麻烦赐教下:
1. 51单片机波特率公式中TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率,16是因为它一个字节要采集16次检测,但是为什么还要去除以2呢。。。求解!!
2. 把波特率提高一倍,TH1 = TL1 = 256 - 晶振值/12 /16 /波特率——这里把波特率提升1倍,那么波特率不就变成了原来的2倍么,那这个初始值为什么不是TH1 = TL1 = 256 - 晶振值/12 /2/16 /(2*波特率)?....求解!!!


教材描述内容:
如果用定时器 2,需要配置额外的寄存器,默认是使用定时器 1 的,我们本章内容主要就使用定时器 T1 作为波特率发生器来讲解,方式 1 下的波特率发生器必须使用定时器 T1 的模式 2,也就是自动重装载模式,定时器的重载值计算公式为:
    TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率
和波特率有关的还有一个寄存器,是一个电源管理寄存器 PCON,他的最高位可以把波特率提高一倍,也就是如果写 PCON |= 0x80 以后,计算公式就成了:
    TH1 = TL1 = 256 - 晶振值/12 /16 /波特率
公式中数字的含义这里解释一下,256 是 8 位定时器的溢出值,也就是 TL1 的溢出值,晶振值在我们的开发板上就是 11059200,12 是说 1 个机器周期等于 12 个时钟周期,值得关注的是这个 16,我们来重点说明。在 IO 口模拟串口通信接收数据的时候,采集的是这一位数据的中间位置,而实际上串口模块比我们模拟的要复杂和精确一些。他采取的方式是把一位信号采集 16 次,其中第 7、8、9 次取出来,这三次中其中两次如果是高电平,那么就认定这一位数据是 1,如果两次是低电平,那么就认定这一位是 0,这样一旦受到意外干扰读错一次数据,也依然可以保证最终数据的正确性。


了解了串口采集模式,在这里要给大家留一个思考题。“晶振值/12/2/16/波特率”这个地方计算的时候,出现不能除尽,或者出现小数怎么办,允许出现多大的偏差?把这部分理解了,也就理解了我们的晶振为何使用 11.0592M 了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:597200 发表于 2020-9-18 12:18 | 只看该作者
原本是TH1 = TL1 = 256 - 晶振值/12  /波特率,因为它一个字节要采集16次检测所以除以12,波特率提高一倍,再除以2不就是TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率就是
回复

使用道具 举报

板凳
ID:1044850 发表于 2022-11-11 12:55 | 只看该作者
我也找了半天,最后在这个网址上看到了https://blog.csdn.net/cr2269736819/article/details/79780989
51单片机串口工作在方式1,上时,给串口使用的时钟频率要先除2,再除16,为什么要除2呢?因为实际上对于单片机的串口及外部的通信模块来说,单片机的晶振频率即使在12分频后,依然太快,所以先除2,降低串口模块所使用的的时钟频率。
不过也有人说和单片机的内核设计有关
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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