C 外部中断0不';行不通
有人能找出我的外部中断0不工作的原因吗?我使用的是AVR STK 500板,上面有一个ATmega164P。是因为针脚D2有两个功能吗C 外部中断0不';行不通,c,initialization,interrupt,avr,atmega,C,Initialization,Interrupt,Avr,Atmega,有人能找出我的外部中断0不工作的原因吗?我使用的是AVR STK 500板,上面有一个ATmega164P。是因为针脚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
#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;
}
}
#包括
#包括
#包括
#定义F_CPU 800000UL
#包括
情报、监视和侦察(国际矢量)
{
b=1;
对于(int i=0;i<7;i++)
{
_延迟μms(500);
我猜您没有启用外部中断
请参阅数据表第10.2节
10.2.2 EIMSK–外部中断屏蔽寄存器
当一个INT2:0位被写入1,并且状态寄存器(SREG)中的I位被设置(1)时,相应的外部引脚中断被启用。外部中断控制寄存器中的中断检测控制位,
EICRA定义了在检测到上升沿、下降沿或电平时是否激活外部中断
所以你必须设定
EIMSK |= (1 << INT0);
EIMSK |=(1我猜您没有启用外部中断
请参阅数据表第10.2节
10.2.2 EIMSK–外部中断屏蔽寄存器
当一个INT2:0位被写入1,并且状态寄存器(SREG)中的I位被设置(1)时,相应的外部引脚中断被启用。外部中断控制寄存器中的中断检测控制位,
EICRA定义了在检测到上升沿、下降沿或电平时是否激活外部中断
所以你必须设定
EIMSK |= (1 << INT0);
EIMSK |=(1 board_init()的作用是什么?是否设置/启用外部中断?不要在ISR内部延迟。只是强调JimmyB的声明,不要在ISR内部延迟。board_init()的作用是什么您是否设置/启用了外部中断?不要在ISR内延迟。为了强调JimmyB的声明,不要在ISR内延迟。此EIMSK |=(1@BenceKaulics:当然,请原谅我演示了糟糕的编码实践:)这只是一个改进请求,以更好地给出一个好的答案。:)这是EIMSK |=(1@BenceKaulics:当然,请原谅我演示了糟糕的编码实践:)这只是一个改进请求,以更好地给出一个好的答案。:)