我似乎无法理解这一点,尽管对我来说这看起来很容易。我在我的 Atmel ATmega8535 中制作了很多计时器,但这个让我很受打击。另外,我看过很多计算等,但这并不是我想要的。
这很简单:
我的 ATmega8535 以 16 MHz 运行,而我想要的只是一个 1 MHz 的定时器,因此我可以在某些引脚上以 1 MHz 的频率输出一些数据。
那么我该如何进行呢?下面的计算听起来不错(在此处找到)。
Target Timer Count = (1 / Target Frequency) / (1 / Timer Clock Frequency) - 1
= (1 / 1000000) / (1 / 16000000) - 1
= 0.000001 / 0.0000000625 - 1
= 16 - 1
= 15
那么这将导致
void initTimer()
{
// 8 bit timer 2 setup
TCCR2 = (1<<CS20); // Timer clock = system clock/1
TIFR = 1<<TOV2; // Clear TOV2/ clear pending interrupts
TIMSK = 1<<TOIE2; // Enable timer 2 overflow interrupt
sei();
}
ISR(TIMER2_OVF_vect) // 16 bit timer 2 overflow interrupt vector
{
TCNT2 = 256-15; // Make sure every overflow resets the TCNT2 to the 1 MHz setup
addUpSomething++; // Do something (...not relevant to this sample)
}
如何正确地进行这些计算?这会导致 1 MHz 定时器吗?