首页 > 编程知识 正文

51单片机有几个定时器(请描述定时器初值的计算方式_51波特率发生器定时器初值计算方法[转载])

时间:2023-05-05 15:35:53 阅读:121809 作者:4835

译文: 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。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。