Bonjour, je suis en train de travailler sur un PIC18 et le programme contient une interruption externe sur la pin RB0.
J'utilise le PIC18F2680 et le compilateur C Hi-Tech C Compiler.
A chaque interruption, l'état d'une pin (RB1) devrait changer de niveau.
Voici donc le programme en question :
En simulant sur proteus ISIS, avec un schéma assez simple :Code:#include <p18F2680.h> #pragma config OSC = HSPLL #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config MCLRE = ON #pragma config PBADEN = OFF #pragma config XINST = OFF void interrupt it_sur_rb0(void) { if (INTCONbits.INT0IF) // vérifie que l'IT est INT0, origine PB0=0 (bouton S3) { PORTBbits.RB1=!(PORTBbits.RB1); PORTC=0b11111110; INTCONbits.INT0IF=0; //efface le drapeau d'IT*/ } } void main (void) { PORTB=0b00000000; PORTE=0b00000000; ADCON1=0x0F; TRISB=0b00000001; INTCON2bits.RBPU=0; INTCON2bits.INTEDG0=1; INTCONbits.INT0IE=1; // INT0 activée RCONbits.IPEN=1; INTCONbits.GIEH=1; INTCONbits.GIEL=1; while(1){ } }
- avec un boutton-poussoir relié au pin RB0 et une LED reliée au pin RB1.
Et j'ai constaté le problème suivant : L'état du pin RB1 change de niveau au premier interruption, mais reste bloqué sur cet état pour les interruptions suivantes.
Est-ce que l'interruption ne marche qu'une fois? Y-a-t-il un problème de boucle infini?
Je vous remercie d'avance et fais appel à votre lumière afin de m'éclairer la-dessus.
-----