经常看到的公式是
b
a
u
d
=
f
s
o
c
/
12
/
(
计时器溢出需的数量
)
2
s
m
o
d
∗
16
baud = \dfrac{f_{soc}/12/(计时器溢出需的数量)}{2^{smod}*16}
baud=2smod∗16fsoc/12/(计时器溢出需的数量)
对公式进行分析,
f
s
o
c
/
12
f_{soc}/12
fsoc/12表示的是机械周期的频率,也就是计时器的数据加1的时间对应频率。计时器溢出的数量指的是初始值到溢出需要多少机械周期。而对于频率来说,需要值越大,那么溢出频率会变小。最后分母的式子是通过选择smod的值来判定是用哪个系数。
例如,SMOD为1,计时器模式是模式2,8位自动重装,那么溢出时间就是(256-初始值);设使用12MHZ的晶振,及
f
o
s
c
f_{osc}
fosc的值是12MHZ,那么若初始值是0xFD(十进制253),波特率如下计算
b
a
u
d
=
12
∗
1
0
6
/
12
/
(
256
−
253
)
2
∗
16
≈
10416.6
baud=\dfrac{12*10^6/12/(256-253)}{2*16}≈10416.6
baud=2∗1612∗106/12/(256−253)≈10416.6
而当晶振使用11.0592mhz时,波特率的值是9600