Bonjour,
j'utilise un PIC18F que je programme en C à l'aide du compilateur MCC18.
Mon objectif est de detecter l'appui d'un bouton via les broches KBI (->Interrupt on Change).
Je les programme en pull-up et j'ai bien un pulse à 0 qui indique l'appui bouton (voir image jointe).
J'ai un autre bouton sur une entrée interruptive "normale" (INT3) et celle-ci est bien detectée. Je vous copie ci-dessous mon code est espère que vous pourrez m'aider.
Merci beaucoup de votre aide,Code:#include <p18f2523.h> #include <xlcd.h> #include <delays.h> #include "lcd.h" unsigned int cpt=0; // sous programme d'interruption #pragma interrupt it_sur_rb0 void it_sur_rb0(void) { if (INTCON3bits.INT2IF) // vérifie que l'IT INT0, origine PB0=0 (bouton S3) { cpt++; //utiliser un WATCH pour visualiser cpt INTCON3bits.INT2IF=0; //efface le drapeau d'IT } cpt++; } #pragma code vecteur_d_IT=0x08 // vecteur d'IT void une_fonction(void) { _asm goto it_sur_rb0 _endasm } #pragma code void main (void) { // configure les IOs en digital ADCON1bits.PCFG0 = 1; ADCON1bits.PCFG1 = 1; ADCON1bits.PCFG2 = 1; ADCON1bits.PCFG3 = 1; INTCON2bits.RBPU = 0; TRISBbits.TRISB2=0; // RB2 en entrée TRISBbits.TRISB4=0; // RB4 en entrée TRISBbits.TRISB5=0; // RB5 en entrée INTCONbits.GIE=1; // Toutes les IT démasquées autorisées INTCONbits.RBIF = 0; // disable RB on change Interrupt flag INTCONbits.INT0IF=0; // disable INT0 Interrupt flag INTCONbits.INT0IE=0; // disable INT0 INTCONbits.TMR0IF=0; // disable Timer0 Interrupt flag INTCONbits.TMR0IE=0; // disable Timer0 Interrupt INTCON2bits.RBIP=1; //priorite d'interruption INTCON2bits.INTEDG2=0; //INT2 on falling edge INTCON3bits.INT2IP=1; //priorite d'interruption INTCON3bits.INT2IF=0; // disable INT2 Interrupt flag INTCON3bits.INT2IE=1; // Enable INT2 INTCON3bits.INT1IF=0; // disable INT1 Interrupt flag INTCON3bits.INT1IE=0; // disable INT1 INTCONbits.RBIE = 1;// Enable interrupt on RB change while(1){ if(PORTBbits.RB2 == 1) { cpt++; } else { cpt = 0; } }; }
Antoine
-----