单片机:Atmega328P IDE:Microchip Studio v7.0.2594 工具链:Atmel AVR 8位(C语言) 我正在尝试运行 Timer0 溢出中断。然而,ISR 似乎没有得到执行。 该引脚在 while(1) 内部切换,但在 ISR 内部操作时保持低电平 当我尝试运行 Atmega2560 定时器时,也会发生同样的问题。 这是我的基本代码。
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(TIMER0_OVF_vect)
{
PORTB ^= (1<<5);
TCNT0 = 127;
}
int main(void)
{
/* Replace with your application code */
DDRB = (1<<5);
PORTB = 0;
TCCR0A = 0;
TCNT0 = 127;
TIMSK0 = (1<<TOIE0);
TIFR0 = 0;
TCCR0B = /*(1<<CS02)|*/(1<<CS01)|(1<<CS00);
sei();
while (1) ;
{
PORTB ^= (1<<5);
_delay_ms(10);
}
}
Timer0 溢出 ISR 在 AVR MCU 中不起作用
您的代码没有问题,只是闪烁得非常快 - 约为 1kHz(因此您必须在眼前快速移动 LED 才能看到它闪烁)。
当您使用除以 1024 的时钟时,您的代码会轻微脉冲,但使用电流分频器 64 时,如果没有快速 LED 移动,就无法发现任何东西。 (或者你可以将 LED 改为高亮,它也会闪烁)