C51单片机时钟周期/计时器初值/串口通信波特率

C51时钟周期、机器周期、晶振频率

C51一般使用内部晶振,即外接晶振元件,内部驱动。晶振频率常取12MHz或11.0592MHz。

晶振频率的倒数是时钟周期,两个时钟周期为一个,C51规定,六个拍,
即12个时钟周期是一个机器周期

因此,

1
12 / 晶振频率 = 机器周期

计时器初始值计算

以方式1为例。方式1是16位计时器,每个机器周期计时器+1,当计数值为 2^16 + 1= 65535 + 1 的时候,
计时器溢出。因此可以得到,如果要计时器n个机器周期的时间后溢出,则须设置初值为 65536 - n。
总的来说,如果已知晶振频率f,计时器计时的时间t,则方式1的计时器初始值 Vinit 为

1
Vinit = 65536 - t / (12 / f)

串口波特率计算

波特率通常是人为规定的一系列数值,通常我们使用串口的工作方式1。其公式为:

1
baud = (2^(SMOD) / 32) * (T1of)

SMOD是一个bit型值,是人为设置的。T1of是计时器T1的溢出率(此时T1是工作方式2),其计算公式为:

1
T1of = f /{12×[256 - (TH1)]}

TH1为计时器1高八位初值,f是晶振频率,单位Hz

例子

如果已知串口规定的波特率为 9600 baud,SMOD == 0,则

1
2
T1of = baud * 32 = 9600 * 32 = 30720
TH1 = 256 - (f / T1of / 12) = 256 - (11059200 / 30720 / 12) = 253 = 0xfd
Author: LouisZ
Link: http://notes.louisz.top/2024/06/C51-Timer-and-baud/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.