我需要从Arduino Uno获得200KHz。我正在使用Timer0。我已将其配置为在正常模式下运行,并且预分频器设置为clk / 8(Arduino的时钟频率为16Mhz)。 TCNT0设置为0xFB,并且在设置定时器溢出标志时,代码切换PORTB的2个引脚。这是我的代码:
#include <avr/io.h>
int main(void)
{
DDRB = 0x03;
PORTB |= 0x02;
while (1)
{
TCNT0 = 0xFB;
TCCR0A = 0X00;
TCCR0B = 0x02;
while ( (TIFR0 & 0x01) == 0 );
PORTB ^= 0x03;
TCCR1A = 0x00;
TCCR1B = 0x00;
TIFR0 = 0X01;
}
}
当我检查示波器时,它显示脉冲为166Khz而不是200Khz。 尽管我可以使用快速PWM模式并使用中断,但我只是想知道为什么它不起作用?我做错了吗?