在atmega2560(STK600板)上,我使用的是Timer0,它是8位定时器。我想每4ms产生一次溢出...如何将定时器设置为4ms? (时钟速度为8MHz,我知道通过跳水(时钟速度)/(预分频器)设置定时器,当计数器复位时,会产生溢出中断。但不确定设置为4ms!
其次,一旦定时器溢出并产生OVERFlOW中断,计算1秒......怎么做?
提前致谢!
答案 0 :(得分:0)
OVERFLOW中断无法实现4ms:
F_CPU = 8,000,000hz
F_OVERFLOW = 1 / 0.004s = 250hz
CYCLES_PER_OVERFLOW = F_CPU / F_OVERFLOW = 32,000,即:每32,000个CPU时钟周期发生一次溢出
CYCLES_PER_TIMER_TICK = 32,000/256 = 125 =预分频器值
125不能作为预分频器使用,但是如果它足够接近你可以使用128(4.096ms)。
如果没有,您可以考虑使用定时器比较中断而不是overflow int。 - 或者改变F_CPU ......
每4ms产生一次中断,就可以在每次中断时递增一个全局变量,每次变量的值达到250时,又过了一秒,变量可以重新设置为0,计入下一秒。