Bonjour,
Mon ancien post n'a pas beaucoup attiré votre attention, donc je vais restreindre le problème sur le fonctionnement d'une interruption externe INT0 avec un PIC18.
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 :
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){
- }
- }
|
En simulant sur proteus ISIS, avec un schéma assez simple :
- 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.