要理解这个问题需要 看单片机原理 的 定时器 章节
首先 这个问题是 选择的 16位定时模式
定时初值=65536-50000=15536
因为MCS51单片机对定时器赋值 一次只能访问8位(即 TH0 和 TL0分开赋值)
也就是将 15536 拆成高八位和低八位
(65536-50000)/ 256 就是求高八位 数值
(65536-5000)% 256 就是求低八位 数值
如果还有不理解之处,请继续提问!
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计数的作用。
希望能够帮到你!
首先你这个单片机使用的晶振是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,所以计时初值就是65536-定时值。而定时器由TH和TL两个8位寄存器组成,一个高八位,一个低八位,256是八位的溢出值,除以它当然就是高八位,对其求模就是低八位。