Bonjour,
je souhaite réalisé une interruption timer de 50us sur une microcontroleur 8 bits de la série 12F....soit un MID range selon la marque du fabricant. J'utilise le compilateur XC8 mais je n'arrive pas à faire démarrer la routine.
j'ai un exemple qui fonctionne sur un micro de type 18F13K22 mais ce code n'est pas transposable sur le microcontroleur que je souhaite utiliser
Il doit me manquer quelque chose mais je vois pas comment l'écrire. Merci si quelqu'un souhaite se pencher sur mon problème.Code:int Timer1Reload; void Timer1_isr (void); #pragma code high_vector=0x08 void high_interrupt (void) { _asm GOTO Timer1_isr _endasm } #pragma code #pragma interrupt Timer1_isr void Timer1_isr (void) { if (PIR1bits.TMR1IF){ // Interrupt Check PIR1bits.TMR1IF = 0; //RAZ du Flag de comptage du Timer1 WriteTimer1(Timer1Reload); //Recharge du temps de 50us à chaque interruption (set_timer1()) } RB1 = 1; //TEST D'ENTREE DANS ROUTINE } main { OpenTimer1(T1_16BIT_RW&T1_PS_1_1&T1_SOURCE_INT); Timer1Reload=64735; //=0XFCDF WriteTimer1(Timer1Reload); IPR1bits.TMR1IP = 1; //timer1 high-priority RCONbits.IPEN = 1; //enable priority levels on interrupts INTCONbits.GIE = 1; //enable_interrupts(GLOBAL) ... } Enfin voila j'aimerais bien réaliser ce code sur 8 bits d'un microcontroleur type 12FXX mais ça passe pas. Voila ce que j'ai fait sur le microcontroleur en question: void InitTimer1(){ //Paramétrage du Timer T1CON = 0x01; PIR1bits.TMR1IF = 0; //clear Timer1 overflow Flag; TMR1GIF ?? PIR1bits.TMR1GIF = 0; //Valeur du Timer (Timer1reload) //avec DIV_1 la durée du tic=0.0156*1=0.0625us //50us/0.0625us*4=200 //65535-200=65335 TMR1H = 0xFF; TMR1L = 0x37; //Autorisation d'interruption PIE1bits.TMR1IE = 1; //enable_interrupts TIMER1; TMR1GIE ?? PIE1bits.TMR1GIE = 1; INTCON = 0xC0; //enable peripheral+global interrupts } void Timer1_ISR(){ if (PIR1bits.TMR1IF){ PIR1bits.TMR1IF = 0; PIR1bits.TMR1GIF = 0; TMR1H = 0xFF; TMR1L = 0x37; RA5=1; } } int main(int argc, char** argv) { void InitTimer1(); }
-----