Da qualche giorno sto prendendo dimistichezza con la programmazione dei PIC, già conoscevo il C, quindi ho cominciato da lì. Ho fatto un semplice circuitino con i classici led che si accendono a comando e le prime prove di programmi sono andati benissimo, ora vorrei capire bene come funzionano gli interrupt, ma non capisco perchè questo codice non vada:
codice:
#include <htc.h>
#include "delay.h" // richiama la routine di ritardo per poter usare le pause
/*Definisce alcune variabili*/
#define OUTPUT 0
#define INPUT 1
#define LED1 0b00000010
#define LED2 0b00001000
#define LED12 0b00001010
#define ASP 1 //definisce il tempo di attesa (ms)
unsigned volatile stat;
void main(void)
{
//Imposta le porte RB come output e RB4 come input (per intercettare l'interrupt)
TRISB=0;
TRISB4=1;
//Abilita gli interrupt dalla port RB4
RBIF=0; //Kills all unwanted interrupts
RBIE=1; //Enables RB interr
GIE=1; //Enables interrupts
//Imposta alternativamente i led attivi RB0 e RB1
stat=LED1;
while(1){
PORTB=stat;
DelayS(ASP);
}
}
interrupt interr( void ) {
if(RBIF){
//L'interrupt proviene da RBIE
if(stat==LED1)stat=LED2;
else stat=LED1;
RBIF=0; //Kills all unwanted interrupts
RBIE=1; //Enables RB interr
GIE=1; //Enables interrupts
}
}
Cioè compila, ma se metto in tensione il piedino del RB4 non riesco a cambiare led che accendo. Credo che non riesca a gestire bene l'interrupt...
Help.
Grazie