串口通信根据波特率计算定时器初值

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
SMOD:和串口通信波特率有关;SMOD = 0,串口工作方式1,2,3时波特率正常;SMOD = 1时,波特率加倍(原因下面解释)


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自动重装定时器可以有效避免此问题。

猜你喜欢

转载自blog.csdn.net/Xiao_peng117/article/details/79257813