因此,我尝试在 Atmega644 MCU 上的 XTAL1 和 XTAL2 引脚之间放置一个 16 MHz 晶体振荡器。但我无法让它发挥作用。
我首先定义
volatile unsigned int input_timer = 150;
ISR (TIMER0_COMPA_vect) {
if (input_timer>0){
input_timer--;
}
}
我已启动计时器如下
TIMSK0 = (1 << OCIE0A); //Compare match enabled
TCCR0A = (1 << WGM01); //CTC mode
TCCR0B = ~(1 << CS02) | (1 << CS01) |( 1 << CS00); //DIVIDE 64
OCR0A = 125;
为了测试它是否有效,我正在执行以下操作
int p = 0;
while(1)
{
if (input_timer == 0) {
lcd_clrscr();
char c[7]
itoa(p,c,10);
lcd_puts(c);
p++;
}
所以基本上,每次计数器从 150 倒数到 0 时,我都会更新一次液晶屏。如果使用 16 MHz 振荡器,则应该每隔 (16e6/(150*125*64) = 13.3 更新/秒。
如果使用 F_CPU 完成,则应该每隔 (1e6/(125*150*64))= 0.83 更新/秒发生一次,这就是现在正在发生的情况。
那么我该如何正确地在 XTAL1 和 XTAL2 引脚上实现振荡器呢?应该注意的是,我现在没有使用正确的去耦电容器,不确定它是否重要。
最佳答案
您还需要设置 fuse ,让您的微型计算机知道您正在使用外部时钟。
关于c - 为什么我的 TIMER0 不使用 Atmega644 Controller 上 XTAL1 和 XTAL2 之间的振荡器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734219/