11.059M/384=28800 这个等式是怎么来的,为什么要用晶振频率除以384呢?
请教一下:
教材描述内容:
如果用定时器 2,需要配置额外的寄存器,默认是使用定时器 1 的,我们本章内容主要就使用定时器 T1 作为波特率发生器来讲解,方式 1 下的波特率发生器必须使用定时器 T1 的模式 2,也就是自动重装载模式,定时器的重载值计算公式为:
$$TH1 = TL1 = 256 frac{text{晶振值}}{12 times 2 times 16 times text{波特率}}$$
和波特率有关的还有一个寄存器,是一个电源管理寄存器 PCON,他的最高位可以把波特率提高一倍,也就是如果写 PCON |= 0x80 以后,计算公式就成了:
$$TH1 = TL1 = 256 frac{text{晶振值}}{12 times 16 times text{波特率}}$$
公式中数字的含义这里解释一下,256 是 8 位定时器的溢出值,也就是 TL1 的溢出值,晶振值在我们的开发板上就是 11059200,12 是说 1 个机器周期等于 12 个时钟周期,值得关注的是这个 16,我们来重点说明。在 IO 口模拟串口通信接收数据的时候,采集的是这一位数据的中间位置,而实际上串口模块比我们模拟的要复杂和精确一些。他采取的方式是把一位信号采集 16 次,其中第 7、8、9 次取出来,这三次中其中两次如果是高电平,那么就认定这一位数据是 1,如果两次是低电平,那么就认定这一位是 0,这样一旦受到意外干扰读错一次数据,也依然可以保证最终数据的正确性。
解:波特率就是每秒传送的位数,一个字符有8位,所以波特率等于28800*8=230400b/s。
解:根据公式,定时初值为:
$$TH1 = TL1 = 256 frac{text{晶振值}}{12 times 2 times 16 times text{波特率}} = 256 frac{11059000}{12 times 2 times 16 times 9600} approx 253$$
SCON要设置为模式1,即SM0=0,SM1=1,TMOD要设置为T1模式2,即M1=0,M0=1,CT=0,GATE=0。
TX/RX波特率=Fck/(16*USARTDIV)
我想问问这USARTDIV的值是不是就是波特率的预分频值,比如说下面这条
那么USARTDIV=256吗?假设fck=15mhz,那么最终波特率就等于15mhz/(16*256)吗?
回答:是的,USARTDIV就是波特率的预分频值,你的理解是正确的。如果fck=15mhz,那么最终波特率就等于15mhz/(16*256)=3662.11b/s。