AVR 定时器溢出 ISR 未运行

问题描述 投票:0回答:1

单片机: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 中不起作用

timer interrupt avr mcu
1个回答
0
投票

您的代码没有问题,只是闪烁得非常快 - 约为 1kHz(因此您必须在眼前快速移动 LED 才能看到它闪烁)。

当您使用除以 1024 的时钟时,您的代码会轻微脉冲,但使用电流分频器 64 时,如果没有快速 LED 移动,就无法发现任何东西。 (或者你可以将 LED 改为高亮,它也会闪烁)

© www.soinside.com 2019 - 2024. All rights reserved.