标题:
51单片机波特率公式中TH1=TL1=256-晶振值/12/2/16 /波特率,为什么要除以2求解
[打印本页]
作者:
WGL88
时间:
2019-6-6 17:07
标题:
51单片机波特率公式中TH1=TL1=256-晶振值/12/2/16 /波特率,为什么要除以2求解
各位高手:
麻烦赐教下:
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 了。
作者:
阳光少年BOY
时间:
2020-9-18 12:18
原本是TH1 = TL1 = 256 - 晶振值/12 /波特率,因为它一个字节要采集16次检测所以除以12,波特率提高一倍,再除以2不就是TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率就是
作者:
honkeda
时间:
2022-11-11 12:55
我也找了半天,最后在这个网址上看到了
https://blog.csdn.net/cr2269736819/article/details/79780989
51单片机串口工作在方式1,上时,给串口使用的时钟频率要先除2,再除16,为什么要除2呢?因为实际上对于单片机的串口及外部的通信模块来说,单片机的晶振频率即使在12分频后,依然太快,所以先除2,降低串口模块所使用的的时钟频率。
不过也有人说和单片机的内核设计有关
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1