Bonjour,
Je viens de réaliser une interruption avec un timer. Dans ma fonction d'interruption je réalise une conversion analogique/numérique. La valeur de ma conversion est enregistré dans une variable globale.
Puis dans mon main je réutilise cette variable.
Mon interruption fonctionne, mon convertisseur A/N aussi.
Mais quand je repasse dans le main ma variable global et j'ai remarqué qu'elle changait aussi d'adresse .
J'ai déclaré ma variable global en volatile et en static mais rien ne change, elle est toujours modifier quand je sort de mon interruption.
Comment remédier à cela ?Code:volatile short temporisation,tpwm; volatile int C_courant; void MyInterrupt(void); // on déclare que lors d'une interruption #pragma code highVector=0x008 void atInterrupthigh(void) { // on doit éxecuter le code de la fonction MyHighInterrupt _asm GOTO MyInterrupt _endasm } #pragma code // retour à la zone de code // ************************ // **** Interruptions **** // ************************ #pragma interrupt MyInterrupt void MyInterrupt(void) { unsigned char sauv1; unsigned char sauv2; // on sauvegarde le contenu des registres de calcul sauv1 = PRODL; sauv2 = PRODH; // c'est le Timer1 qui a levé l'interruption if (INTCONbits.TMR0IF) { // on va réautoriser l'interruption INTCONbits.TMR0IF = 0; // if ( temporisation >= 65 ) { // on remet à 0 pour le prochain timer temporisation = 0; //Vmoteur = adc(Imoteur); if ( tpwm >=10){ tpwm=0; C_courant = adc(POT1); } else { tpwm++; } } else { // on incrémente notre variable compteur temporisation++; } } // on restaure les registres de calcul PRODL = sauv1; PRODH = sauv2; } //------------------------------------------------------------------------ // // MAIN // //------------------------------------------------------------------------ void main(void){ int PWM_moteur,C_courant; InitPic(); temporisation=0; tpwm=0; LATCbits.LATC0 = 0; LATAbits.LATA4 = 1; while(1){ //temp=test-0x200; // // if ( temp > 0){ // C_courant=temp; // LATCbits.LATC0 = 0; // LATAbits.LATA4 = 1; // } else { // C_courant=512-(512+ temp); // LATCbits.LATC0 = 1; // LATAbits.LATA4 = 0; // } // Nop(); PWM_moteur=(C_courant); //-------------------------------------------- // PWM //-------------------------------------------- SetDCPWM1(0); // SetDCPWM1(PWM_moteur); } }
Merci par avance.
-----