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 | T1of = baud * 32 = 9600 * 32 = 30720 |