sto lavorando su una scheda STK500 con ATmega1284P e non riesco a gestire gli interrupt PCINT.
Voglio fare in modo che alla pressione degli switch della scheda stessa, venga generato un interrupt.
Da quello che ho capito, questo tipo di interrupt viene generato ogni volta che il pin cambia di stato, quindi sia quando lo switch è premuto, sia quando è rilasciato.
Ma tra le varie prove ho eseguito questo semplice programmino:
- Code: Select all
#include <asf.h>
#include <stdbool.h>
#include <util/delay.h>
unsigned char cnt = 0;
int main (void)
{
DDRC = 0xff;
PORTC = 0x00;
PCICR = (1<<PCIE1);
PCMSK1 = 0xff;
sei();
while(1);
}
ISR(PCINT1_vect){
cnt++;
PORTC = cnt;
}
}
Il risultato aspettato dovrebbe essere 2, ma in realtà varia tra 2 e 3.
Come mai accade questa cosa? Cosa sbaglio?
Saluti.