译文: 3358 blog.csdn.net/McGrady _ ZG dhj/article/details/18665733
------------- -请参阅
在模式0和模式2中,串行端口的波特率是固定的,而模式0是Fosc/12。 模式2为Fosc/32或Fosc/64,具体而言由PCON寄存器的SMOD位决定。
在模式1和模式3中,波特率是可变值,波特率可以在计时器1中生成。 8052可以在计时器2中生成。 那么波特率是多少呢? 波特率由计时器1的溢出率决定。
baudrate=(2smod/32 ) * (* (timer 1溢出速率) )。
注意: 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 ) ) 2s mod * 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。