以下是按下 PD2 时启用中断 INT0_vect 的代码。该代码从不执行 ISR,但始终在 main 函数的 PORT C 中的 7 段上执行从 0 到 9 的计数器循环。还尝试了 sei(); 而不是启用 SREG 中的 I 位。有任何想法吗?
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define ISR_INT0_PD2 INT0_vect
ISR( ISR_INT0_PD2 ){
PORTC = 0x00;
_delay_ms(100);
}
int main(void)
{
int i=0;
DDRC=0xff; //portc is o/p
PORTC=0x00; // all pins on portc is 0 volt
MCUCR |= (1<<1); // falling edge
GICR |=(1<<6); // enable INT0 set pin6
SREG |=(1<<7); // set GIE pin7
while(1)
{
for(i=0;i<10;i++)
{
PORTC=i;
_delay_ms(1000);
}
}
}
[以下是我一直在使用的模拟器的截图]