Bonjour à tous,
je cherche à me familiariser avec les interruptions sur PIC18F,
j'ai fait un bout de code qui ne fonctionne pas correctement en simulation sur MPLAB, je n'arrive plus à ressortir de l'interruption.
une petite explication du fonctionnement supposé, à la mise sous tension les LEDS 1 et 2 s'allument, dés qu'il y a une interruption sur RB5 par exemple les LEDS 1 et 2 s'éteignent et les LEDS 3 et 4 s'allument.Code:#include <p18f458.h> #define led1 PORTAbits.RA0 #define led2 PORTAbits.RA1 #define led3 PORTAbits.RA2 #define led4 PORTAbits.RA3 #define inter1 PORTBbits.RB5 void InterruptHandlerHigh (void); //---------------------------------interruption------------------------ #pragma code InterruptVectorHigh = 0x08 void InterruptVectorHigh (void) { _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm } //------------------------------------------------------------------------ // High priority interrupt routine #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh () { if (INTCONbits.RBIF) { INTCONbits.RBIF = 0; // mise à 0 du flag c'est ici le pb ! led3=1; led4=1; led1=0; led2=0; } } //------------programme_principal------------------------------------------ void main (void) { TRISB=0xFF*; // PORTB en entrée ADCON1=0x07; // PORTA en digital TRISA=0x00; // PORTDA en sortie PORTA=0x00; INTCON=0b10001000; // autorisation des interruptions sur RB4 à RB7 while(1) { led3=0; led4=0; led1=1; led2=1; } }
mon problème est que cette action INTCONbits.RBIF = 0; ne s'effectue pas, j'arrive pas à remettre RBIF à 0 donc je peux pas ressortir de mon interruption.
avez vous une idée ?
merci.
-----