波特率基本概念:波特率是一个衡量通信速度的参数,它表示每秒钟传送的bit的个数(来自:http://baike.haosou.com/doc/5430972-5669264.html)。在单片机串口通信的设置中,绝大多数情况下,波特率是通过编程人员编写程序设定的。那么我们如何去理解波特率的计算原理呢。
传统51单片机串口通信时(定时器1作为波特率发生器)波特率的计算公式是这样的:
(资料图片仅供参考)
首先我们要完全理解这个公式,然后我们才能更好的去运用它。其中,‘SMOD’是PCON寄存器中的一个bit,可以通过对PCON赋值,设置‘SMOD’为0(波特率不加倍)或1(波特率加倍);再看上式中的‘32’,‘32’指的是溢出信号经过32分频,当然,并不是所有的单片机的溢出信号都要经过32分频。对上式的理解关键的地方是‘T1的溢出率’,这里的溢出率指的是定时器在单位时间内溢出的次数,所谓溢出,就是定时器从开始计数到计数达到最大值时,如果再加1,定时器就会溢出。这样就有以下的溢出率计算公式:
传统51单片机(12T)计数时钟是晶振的12分频,所以对于传统的51单片机而言,单位时间内单片机可以计数的次数=晶振频率/12;定时器溢出一次单片机计数的次数=定时器计数的最大值-初值;举个例子说明:现在我们选用的晶振为12M,定时器是8位的,计数的最大值为256(2的8次方),我们赋予定时器的初值为156,那么就有:
这样,我们就可以根据第一个式子计算出相应的波特率了。同理,如果一开始我们就确定了波特率,那么我们也可以通过以上第一和第二个式子把定时器的初值计算出来。其实很多时候,波特率的计算,其实就是定时器初值的计算。
最后啰嗦几句,波特率的计算不能一概而论,比如有些单片机对定时器的溢出信号的处理不是32分频而是4分频(比如STC15系列单片机),而且用12T单片机时单位时间内单片机可以计数的次数=晶振频率/12;如果用的是1T单片机时,则有:单位时间内单片机可以计数的次数=晶振频率。所以我们根据实际情况出发,实事求是。