为什么 atmega16a 的 timer0 的频率是 46.86 kHz 而不是 12 MHz?

Why timer0 of atmega16a have frequency of 46.86 kHz instead of 12 MHz?

最近新买了一个USB示波器,想测avr timer0的频率。有一个 12 MHz crystal 振荡器连接到 atmega,timer0 设置为没有预分频器的快速 PWM 模式。这是代码:

#include <avr/io.h>

int main(void)
{
    DDRB = 0x08;
    TCCR0 |= (1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
    OCR0 = 128;
    while(1){

    }
}

但在示波器上频率等于 46.90 kHz。

保险丝位在下一张图片上:

但是如果我延迟 1 毫秒闪烁 LED,我得到的频率约为 2 MHz。

所以,请向我解释发生了什么,以及为什么计时器会出错(或者我错在哪里)。

频率对我来说似乎是正确的。如果你的时钟是 12MHz 并且你有一个 8 位 PWM 你的 PWM 频率实际上是 12MHz/256 = 46.875kHz.