Salut à tous,
J'ai un pb avec un programme utilisé pour la gestion d'un servomoteur.
En fait, suivant le simulateur de MPLab, le programme rentre bien une première fois dans l'interruption mais ni rentre plus jamais après alors que le flag du timer0 est activé et que les interruptions sont bien autorisées.
Quelqu'un pour m'aider ???
je colle le code ci-dessous:
Par avance, merci,Code:/**************************/ //Programme Test_MOTEUR_1.c //Calibration circuit de commande Moteur 1 //Horloge externe: 4MHz /*************************/ //registre de configuration #define CP_off |=0b11000000110000 #define LVP_off &=0b11111101111111 #define CPD_off |=0b00000100000000 #define WRT_off |=0b00011000000000 #define DEBUG_off |=0b00100000000000 #pragma config FOSC=XT, WDTE=off, PWRTE=on, CP_off, BODEN=off #pragma config LVP_off, CPD_off, WRT_off, DEBUG_off #pragma interruptSaveCheck n void it_Timer0 (void); //prototype fonction pause #define TMR0_1 150 //délai de 1,7ms avec prédiv 16 #define TMR0_2 113 //délai de 18.3ms avec prédiv 128 #pragma bit MOT_1 @ PORTC.2 /**************************/ //fonction interruption /**************************/ #pragma origin 4 void itMain (void) { if(T0IF)it_Timer0(); } /**************************/ //fonction principale /**************************/ void main (void) { //Désactivation des interruptions INTCON = 0x00; PIE1 = 0x00; PIE2 = 0x00; //Configuration des ports TRISA = 0xFF; TRISB = 0xFF; TRISC = 0b11111011; //configuration du timer0 T0CS=0; T0SE=0; PSA=0; PS0=1; PS1=1; PS2=0; MOT_1=0; T0IF=0; T0IE=1; TMR0=0xFF; PEIE=1; GIE=1; while (1) { T0IE=1; } } /**************************/ //gestion du débordement /**************************/ void it_Timer0 (void) { T0IE=0; T0IF=0; if (MOT_1==0) { PS0=1; PS1=1; PS2=0; TMR0=TMR0_1; MOT_1=1; } else { PS0=0; PS1=1; PS2=1; TMR0=TMR0_2; MOT_1=0; } T0IE = 1; }
Jc !
-----