关于单片机定时器赋初值的问题
TH0=(65536-50000)/256;//定时器T0的高八位赋初值TL0=(65536-50000)%256;//定时器T0的低八位赋初值(注:计时50毫秒)为什么...
TH0=(65536-50000)/256; //定时器T0的高八位赋初值
TL0=(65536-50000)%256;//定时器T0的低八位赋初值
(注:计时50毫秒)
为什么如此赋初值,具体是什么意思,求大神详解! 展开
TL0=(65536-50000)%256;//定时器T0的低八位赋初值
(注:计时50毫秒)
为什么如此赋初值,具体是什么意思,求大神详解! 展开
4个回答
展开全部
1 在此之前你要知道51系列单片机的定时器有4种工作方式,你问的这种赋值是针对定时器0的工作方式1,也就是16位定时器来说的,所以有TH0是时器T0的高八位,TL0定时器T0的低八位
2 当TH0=(65536-50000)/256;TL0=(65536-50000)%256时计数为50毫秒,因为定时器启动后便从原来数值开始进行加1计数,假如我们没有对TH0与TL0赋值,则默认为0,假设时钟频率为12M,12个时钟周期为一个机器周期,则机器周期为1us,计满TH0,TL0需要2的16次方-1次,再来一个脉冲则溢出,因此溢出一次时间为65536us,当我们给TH0,TL0赋上初值即TH0=(65536-50000)/256;TL0=(65536-50000)%256时,则每过50ms溢出一次,便起到了50ms计数的作用。
希望能够帮到你!
2 当TH0=(65536-50000)/256;TL0=(65536-50000)%256时计数为50毫秒,因为定时器启动后便从原来数值开始进行加1计数,假如我们没有对TH0与TL0赋值,则默认为0,假设时钟频率为12M,12个时钟周期为一个机器周期,则机器周期为1us,计满TH0,TL0需要2的16次方-1次,再来一个脉冲则溢出,因此溢出一次时间为65536us,当我们给TH0,TL0赋上初值即TH0=(65536-50000)/256;TL0=(65536-50000)%256时,则每过50ms溢出一次,便起到了50ms计数的作用。
希望能够帮到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你这个单片机使用的晶振是12MHz,经过12分频后给CPU,所以CPU的频率就是1MHz。定时器寄存器增加一个值所用的时间就是1us,这样的话想要定时50ms,那就是定时器计数50000次。51中的定时器是从你设定的初值开始增加计时,当增加大最大值后即65535就会再次从初始值开始。
你给出的语句就是给定时器的高低八位赋值,从这个值开始计时。
65536-50000=15536,也就是说从15536开始计数,最后到65535正好是50000次,也就达到了定时时间。
(65536-50000)/256
除以256表示取出15536的高八位的数值。
(65536-50000)%256
取余表示取出15536的第八位数值。
你给出的语句就是给定时器的高低八位赋值,从这个值开始计时。
65536-50000=15536,也就是说从15536开始计数,最后到65535正好是50000次,也就达到了定时时间。
(65536-50000)/256
除以256表示取出15536的高八位的数值。
(65536-50000)%256
取余表示取出15536的第八位数值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定时器定时是溢出申请中断的,也即是说从初值开始计时,直到溢出。而溢出值是65536,所以计时初值就是65536-定时值。而定时器由TH和TL两个8位寄存器组成,一个高八位,一个低八位,256是八位的溢出值,除以它当然就是高八位,对其求模就是低八位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询