任何人都能弄清楚为什么我的外部中断0不起作用?我正在使用带有ATmega164P的AVR STK 500板。是因为引脚D2有两个功能吗?
#include <asf.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
ISR(INT0_vect)
{
PORTB = 1;
for(int i = 0; i < 7; i++)
{
_delay_ms(500);
PORTB << 1;
}
}
int main (void)
{
board_init();
sei();
PORTD = 0xFF;
DDRD = 0x00;
PORTB = 0x00;
DDRB = 0xFF;
while(1)
{
PORTB = PIND;
}
}
答案 0 :(得分:3)
我猜你没有启用外部中断。
请查看数据表第10.2节。
10.2.2 EIMSK - 外部中断屏蔽寄存器
当INT2:0写入1并且状态寄存器(SREG)中的I位置1时,相应的外部引脚中断使能。外部中断控制寄存器中的中断检测控制位, EICRA定义外部中断是在上升沿还是下降沿或检测到电平时激活。
所以你必须设置
EIMSK |= (1 << INT0);
启用INT0,并可能EICRA
定义您想要响应的信号边缘。