7.2.4 波特率设置
在串行通信中,收发双方对发送或接收的数据的波特率要有一个约定。MCS-51单片机串行口有4种工作方式。方式0和方式2的波特率固定不变,而方式1和方式3的波特率可以变化,这由定时器/计数器T1的溢出率决定。串行口4种工作方式对应的波特率根据时钟频率、定时器/计数器T1的溢出率和标志设定进行计算。
1.方式0的波特率
方式0时,每个机器周期产生一个移位脉冲,发送或接收一位数据。因此,波特率是固定的,为fosc/12,不受PCON中SMOD的影响。方式0的波特率用公式表示为:
方式0的波特率=fosc/12
2.方式2的波特率
方式2时,波特率取决于PCON中的SMOD位的值,当SMOD=0时,波特率为fosc的1/64;当SMOD=1时,波特率为fosc的1/32。方式2的波特率用公式表示为:
方式2的波特率=2SMOD/64×fosc
3.方式1和方式3的波特率
方式1和方式3的波特率是可调整的,由定时器/计数器T1的溢出率与SMOD位的值同时决定。方式1和方式3的波特率用公式表示为:
方式1的波特率=(2SMOD/32)×定时器/计数器T1的溢出率
方式3的波特率=(2SMOD/32)×定时器/计数器T1的溢出率
其中,定时器/计数器T1的溢出速率取决于定时器/计数器T1的计数速率(在定时方式时,计数速率=fosc/12)和定时器/计数器T1的预置初值。
定时器/计数器T1作波特率发生器时,通常选用定时器/计数器T1工作在方式2,并使其工作在定时方式(即C/T=0)。此时,T1的计数速率为fosc/12(这时应禁止定时器/计数器T1中断)。设定时器初值为X,则每过“256—X”个机器周期,定时器/计数器T1产生一次溢出,用公式表示为:
定时器/计数器T1的溢出速率=(fosc/12)/(256—X)
当给出波特率后,可用下式计算定时器/计数器T1工作在方式2的初始值:
X=256—[fosc×(SMOD+1)]/(384×波特率)
【例7-1】 80C51单片机时钟晶振频率为11.059 2 MHz,选用定时器/计数器T1作为波特率发生器,波特率为4 800 bit/s,求定时器/计数器T1的初值X。
解:设波特率控制位SMOD=0,则:
X=256—(11.059 2×106×(0+1)/(384×4 800)=250=FAH
所以
(TH1)=(TL1)=FAH
系统晶振频率选用11.059 2 MHz,是为了使初值为整数,从而产生精确的波特率。