Bonjour!
Je voudrais gérer un bouton poussoir sélection qui est connecté à la broche (RB0/INT) et inverser l'état de la led à chaque débordement du TMR0.
Malheuresement il n'y a que l'interruption RB0/INT qui fonctionne, je n'y comprends plus rien.
J'y travailles depuis 2 jours... pouvez-vous me conseiller?
Merci beaucoup!
A+!
marC
voici mon code :
Code:// PORTC # define BIT_LED F2 // PIC 17 led indicatrice du fonctionnement de l'horloge calendrier // PORTB # define BIT_BP_SELECTION F0 // PIC 33 (RBO/INT) # define BIT_BP_REGLAGE F1 // PIC 35 (RB1) unsigned short int transition_bp_selection = 0; unsigned short int etatanterieur_bp_selection = 1; // BP ouvert lors de la derniere scrutation unsigned short int etat_port ; // variable temporaire void interrupt() { if (INTCON.INTF == 1) // bouton poussoir sur RB0/INT appuyé { PORTC.BIT_LED = ~PORTC.BIT_LED; transition_bp_selection = test_bp_selection(); if (transition_bp_selection == 1) { delay_ms(100); count_selection++; if (count_selection == 6) { count_selection = 0; set = -1; } } INTCON.INTF = 0; } if (INTCON.T0IF == 1) // débordement du TMR0 { PORTC.BIT_LED = ~PORTC.BIT_LED; Blink = ~Blink; INTCON.T0IF = 0; TMR0 = 12; } } // test si le bouton poussoir selection à été enfoncé. Si oui, il retourne 1, sinon il retourne 0 unsigned short int test_bp_selection() { // test du bouton poussoir SELECTION etat_port = PORTB.BIT_BP_SELECTION; // lecture du niveau du port if ((etat_port == 0) && (etatanterieur_bp_selection == 1)) { etatanterieur_bp_selection = etat_port; return 1; // BP a été appuyé } else { etatanterieur_bp_selection = etat_port; return 0; // BP inactif } } void main() { ANSEL = 0; ANSELH = 0; C1ON_bit = 0; // On désactive les comparateurs analogiques C2ON_bit = 0; TRISB = 0x01; PORTC.BIT_LED = 1; // Led indicatrice du programme allumer OPTION_REG.NOT_RBPU = 0; OPTION_REG.INTEDG = 0; OPTION_REG.PSA = 0; OPTION_REG.PS0 = 1; OPTION_REG.PS1 = 1; OPTION_REG.PS2 = 1; INTCON.GIE = 1; INTCON.INTF = 0; // Clear interrupt flag prior to enable INTCON.INTE = 1; // enable INT interruptINTCON.T0IE = 1; INTCON.T0IE = 1; INTCON.T0IF = 0; TMR0 = 12; do { // on attend une interruption } while(1); }
-----