外部中断0不起作用

时间:2016-11-07 09:15:25

标签: c initialization interrupt avr atmega

任何人都能弄清楚为什么我的外部中断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;
    }
}

1 个答案:

答案 0 :(得分:3)

我猜你没有启用外部中断。

请查看数据表第10.2节。

  

10.2.2 EIMSK - 外部中断屏蔽寄存器

     
    

当INT2:0写入1并且状态寄存器(SREG)中的I位置1时,相应的外部引脚中断使能。外部中断控制寄存器中的中断检测控制位,     EICRA定义外部中断是在上升沿还是下降沿或检测到电平时激活。

  

所以你必须设置

EIMSK |= (1 << INT0);

启用INT0,并可能EICRA定义您想要响应的信号边缘。