轻松学!串口通讯波特率算法!

admin 2024-11-11 123人围观 ,发现83个评论

先讲一些缩写名词:

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的数量,如果波特率为小数,那就很麻烦了,想想我们能传输半个数据吗?当然最好是不要是吧!)

好了,以上就是本期文章的全部内容,非常感谢看到最后的你,如果这篇文章对你有帮助的话,求赞求赏求转发!您的支持将会是我写文章的最大动力!

猜你喜欢
    不容错过