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:
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...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 } }![]()
![]()
Help.
Grazie![]()

elf90 g77
Rispondi quotando