1.波特率定义:串口通信时的速率,即每秒传输二进制代码的位数。 单位:bps;1位 = 1bps
2.定时器的溢出率定义:定时器记满溢出的频率;单位:HZ
例:定时器每溢出一次的时间为T,则溢出率就是1/T;每50s溢出一次,则溢出率 = 1/50 = 20HZ;
3.PCON:电源管理寄存器 不可位寻址
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
SMOD | SMOD0 | LVDF | P0F | GF1 | GF0 | PD | IDL |
4.串口通信四种方式的波特率计算公式:
方式0:fosc/12;
方式1:(2smod/32)*T1溢出率
方式2:(2smod/32)*fosc
方式3:和方式1相同
fosc是系统晶振频率;
SMOD是PCON寄存器的最高位;
5.实例:已知通信方式为串口方式1,波特率为9600bps,系统晶振频率为11.0592MHZ,求定时器T1装入的初值为多少?
因为晶振频率为11.0592MHZ,我们可以知道机器周期为12/11.0592MHZ,每计一个数就是一个机器周期,
(机器周期怎么计算的,看这里-->http://blog.csdn.net/Xiao_peng117/article/details/78650626)
设装入的初值为x,则溢出一次的时间就是(256-x)*12/11.0592MHZ,溢出率T1 = 11059200/(256 - x)*12;
根据公式,当smod = 0时:(1/32)*{11059200/(256-x)*12} = 9600;解得x = 253
当smod = 1时;(2/32)*{11059200/(256-x)*12}= 9600,解得x = 250
所以当T1装入初值不变时,smod = 1会将波特率扩大一倍。
6.Q&A
Q: 单片机通信时,波特率一般都较大,如何避免因装初值时造成的微小误差(多次累计终会出错)?
A: 选用定时器的工作方式2自动重装定时器可以有效避免此问题。