先讲一些缩写名词:
Fosc:晶振频率
PCON:功率寄存器:主要是单片机的电源控制而设置的专用寄存器,单元地址是87H
baudrate:波特率
TimerOverflowRate:定时器溢出率
SMOD:双倍波特率位(为1时:波特率翻倍;为0时:波特率不翻倍)(该位在PCON寄存器中)
假定我们用定时器1,将其设置为模式2(回忆一下:模式二特点是8位自动重装)
定时时间=(最大计数值-计数器初值)*机器周期
=(最大计数值-计数器初值)(12/Fosc)
=(256-TH1)*(12/Fosc)----(时间单位都是s,频率单位都是Hz)
结果解释:为什么是256-TH1:首先明确:由于我们是模式2,是8位自动重装,8位转换成十进制最高就是256;那么我们假定TH1为0XF0,256-TH1结果为16,这能说明:我们定时的时间为16个机器周期,在晶振为12M的情况下,1个机器周期位1us,我们这个定时器就是16us
故溢出频率=1/定时时间
=Fosc/((256-TH1)*12)。
波特率=(2SMOD/32)*(溢出频率)
附上初值公式:TH1=256-Fosc*2SMOD)/(32*波特率*12)
注意:2SMOD的关系为指数,即2指数倍SMOD(双倍波特率位:功能介绍在前)
波特率的计算公式有了,我们就可以根据波特率推导出TH1初值:
假设晶振频率为11.0592MHz,我们需要波特率为9600bit/s,SMOD(波特率倍增位)=0,TH1初值应该为多少呢?根据上面公式可以计算得:TH1=256-11059200/(9600*32*12)=256-3=0xFF-0x03=0xFD(千万别算成0xFC!)
(为什么要把晶振频率设成这样一个奇怪的数:目的是:算出来的波特率为整数:因为波特率代表每秒传输的数据0或1的数量,如果波特率为小数,那就很麻烦了,想想我们能传输半个数据吗?当然最好是不要是吧!)
好了,以上就是本期文章的全部内容,非常感谢看到最后的你,如果这篇文章对你有帮助的话,求赞求赏求转发!您的支持将会是我写文章的最大动力!