Недавно я пытался сделать прерывание на моем atmega328p, используя atmelstudio, чтобы светодиод, подключенный к цифровому контакту 13 / PB5 / PCINT5, мигал в четыре раза медленнее, чем обычно, когда кнопка, подключенная к выходу 5 В и цифровому контакту 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;
}
}
Я несколько раз просматривал таблицу данных и в конце концов наткнулся на этот код онлайн (да, я знаю, что я настоящий кусок работы) и добавил к нему свои собственные части.но это даже это не работает, кто-нибудь знает почему?