在模式0和模式2下,串行端口的波特率是固定的,模式0为Fosc/12。 模式2由Fosc/32或Fosc/64,具体取决于PCON寄存器的SMOD位。
在模式1和模式3中,波特率是可变的,波特率可以由计时器1生成。 8052可以由计时器2生成。 那么,波特率是多少? 波特率由计时器1的溢出率决定。
baudrate=(2smod/32 ) * ) *(Timer 1 Overflow Rate ) )。
注: 2SMOD此处的SMOD是指数,SMOD是波特率两倍的波特率位,该位位于PCON寄存器中。
使用timer 1作为波特率发生器时,通常需要将timer 1设置为8位自动重载操作模式,同时禁止中断timer 1,如何计算timer 1的溢出率? 如果石英振荡频率为12MHz,TH1的值为0xFE,则溢出率或溢出频率在2个时钟溢出,如果溢出周期为2us,则溢出频率为500KHz。 根据计时器一节,定时时间有以下计算公式。
定时=(最大计数值-计数器初始值)机器周期=) (最大计数值-计数器初始值) ) 12/晶振频率(Hz ) ) s )=(256-TH1 ) ) 12/OSC_freq
溢出频率如下所示
OSC_freq(Hz )/) 256-th1 ) *12 )。
所以,最后提出波特率的是:
(2smod/32(* ) OSC _ freq (Hz )/) ) 256-th1 ) *12 )。
有了波特率的计算公式,当然可以从波特率导出TH1的初始值:
baud_rate=(2smod/32(* ) OSC_freq ) Hz )/) ) 256-th1 ) *12 ) )
32*12*(256-th1 ) ) 2smod*OSC_freq ) Hz ) )/BAUD_RATE
256-th1=(2smod*OSC_Freq ) Hz ) )/()/(BAUD_RATE*32*12 ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
th1=256-(2smod*OSC_Freq(Hz ) )/()/(BAUD_RATE*32*12 ) ) ) ) ) ) ) ) )。)
如果石英振动频率为11.0592MHz,波特率为9600,SMOD=0,TH1的初始值是多少呢? 可以根据上式计算TH1=256-11059200/(9600*32*12 )=0xFD。