Bonjour à tous,
J'aimerais effectuer une interruption avec un bouton-poussoir et une LED mais je n'arrive pas à trouver la méthode pour créer une interruption. J'ai actuellement un programme qui tourne bien mais la fonction d'interruption est plus efficace lorsqu'on a plusieurs fonctions à effectuer. J'utilise l'outil de développement MPLAB X IDE v4.01 avec un PIC16F18345.
Si vous pouvez m'aider, je suis preneur ! Merci d'avance !
code actuel:
Code:// CONFIG1 #pragma config FEXTOSC = OFF // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled) #pragma config RSTOSC = HFINT1 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz)) #pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2) #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed) //#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled) // CONFIG2 #pragma config MCLRE = ON // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config WDTE = OFF // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored) #pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled) #pragma config BOREN = SBOREN // Brown-out Reset Enable bits (Brown-out Reset enabled according to SBOREN) #pragma config BORV = LOW // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V) #pragma config PPS1WAY = OFF // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)) #pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset) #pragma config DEBUG = OFF // Debugger enable bit (Background debugger disabled) // CONFIG3 #pragma config WRT = OFF // User NVM self-write protection bits (Write protection off) #pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.) // CONFIG4 #pragma config CP = OFF // User NVM Program Memory Code Protection bit (User NVM code protection disabled) #pragma config CPD = OFF // Data NVM Memory Code Protection bit (Data NVM code protection disabled) // PORT A #define ICSPDAT RA0 // Port de programmation #define POWER RA1 // Retour d etat charge batterie #define MCLR RA3 // Port de programmation // PORT B #define ledR RB7 // +LED rouge // PORT C #define BP RC5 // Bouton poussoir #include <xc.h> #define _XTAL_FREQ 8000000 // Oscillateur réglé à 8MHz #define ON 0 // Led tirée au +VCC #define OFF 1 unsigned char etat_Bp = 0; void main(void) { // Reglages des entrees/sorties TRISA = 0x0B; // Choix entrees/sorties LATA = 0x00; // RAZ des ports ANSELA = 0x00; // Choix mode analogique/numerique WPUA = 0x02; // Resistances de pull-up interne TRISB = 0x00; // Choix entrees/sorties LATB = 0x80; // RAZ des ports ANSELB = 0x00; // Choix mode analogique/numerique WPUB = 0x00; // Resistances de pull-up interne TRISC = 0x20; // Choix entrees/sorties LATC = 0xC0; // RAZ des ports ANSELC = 0x18; // Choix mode analogique/numerique WPUC = 0x20; // Resistances de pull-up interne while(1) // boucle infinie { if ((etat_Bp <2 ) && (BP == 0)) // Si le bouton est appuyé => niveau 0 ! { __delay_ms(1); // attend la fin des rebons mecaniques if (BP == 0) // on confirme si il est encore appuyé ! { etat_Bp++; ledR = ON; while(BP==0); // il faut le relacher ce BP ! } } // if if ((etat_Bp >1) && (BP == 1)) // BP relaché, tiré au +VCC par Pull up { __delay_ms(1); // attend la fin des rebons mecaniques if (BP == 1) // il est bien relaché { etat_Bp = 0; ledR = OFF; } } //if } //while }
-----