我最近尝试使用 atmelstudio 在我的 atmega328p 上进行中断,以使连接到 digitalpin 13/PB5/PCINT5 的 LED 在连接到 5V 输出和 digitalpin 2/PD0/ 的按钮时以正常速度闪烁四倍PCINT18 被按下。
但是每当我运行代码并按下按钮时,它永远不会(据我所知)实现中断代码。
#include <avr/io.h>
#include <avr/interrupt.h>
volatile int t = 1;
int main(void)
{
init();
Serial.begin(9600);
DDRB = (1 << 5);
DDRD &= ~(1 << DDD2); // Clear the PD2 pin
// PD2 (PCINT0 pin) is now an input
PORTD |= (1 << PORTD2); // turn On the Pull-up
// PD2 is now an input with pull-up enabled
EICRA |= (1 << ISC00); // set INT0 to trigger on ANY logic change
EIMSK |= (1 << INT0); // Turns on INT0
sei(); // turn on interrupts
Serial.println("loop started");
while(1)
{
PORTB ^= (1 << 5);
delay(500*t);
}
}
ISR (INT0_vect)
{
Serial.println("interrupt");
if(t=1){
t=4;
}
else{
t=1;
}
}
我多次浏览数据表,最终在网上偶然发现了这段代码(是的,我知道我是一个真正的作品)并添加了我自己的作品。但即使这样也不起作用,有人知道为什么吗?