[Programmation] Timer sur microcontroleur MIDRange avec compilateur XC8
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Timer sur microcontroleur MIDRange avec compilateur XC8



  1. #1
    Bonnes perspectives

    Timer sur microcontroleur MIDRange avec compilateur XC8


    ------

    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

    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();
    
    }
    Il doit me manquer quelque chose mais je vois pas comment l'écrire. Merci si quelqu'un souhaite se pencher sur mon problème.

    -----
    Dernière modification par Antoane ; 10/02/2021 à 18h29. Motif: Ajout balises code

  2. #2
    umfred

    Re : Timer sur microcontroleur MIDRange avec compilateur XC8

    Pour moi, il te manque une boucle infinie ( while(1); ) dans le main
    Pas besoin du void devant l'appel à InitTimer1 dans le main)
    Il faut aussi définir RA5 en sortie (et le faire passer alternativement de 0 à 1 et de 1 à 0, si tu te sers de RA5 pour visualiser les interruptions en faisant RA5=~RA5 par exemple)

  3. #3
    Bonnes perspectives

    Re : Timer sur microcontroleur MIDRange avec compilateur XC8

    Bonjour
    merci de votre réponse

    j'ai mis une boucle while(1) mais ça ne change rien. En fait j'ai un problème que ça ne rentre pas dans la routine ISR même pas la première fois j'ai essayé d'enclancher une sortie mais rien...Il rentre dans la fonction d'initialisation mais pas dans Timer1_isr()

    Y a il un problème de vectorisation ? ou ma nomenclature pour la fonction ISR est fausse ? Je ne sais pas

  4. #4
    entropie12

    Re : Timer sur microcontroleur MIDRange avec compilateur XC8

    Bonjour , vite fait comme ça je ne voit pas ce vient faire PIR1bits.TMR1GIF = 0; ce bit n'existe a priori pas chez les 12fxxx sinon un coup de simulateur MPLAB X devrait t'aider , bien lire la data sheet du composant utilisé .
    Cordialement

  5. A voir en vidéo sur Futura
  6. #5
    Bonnes perspectives

    Re : Timer sur microcontroleur MIDRange avec compilateur XC8

    Bonjour Entropie12,

    concernant PIR1bits.TMR1GIF = 0
    je l'ai mis comme ca sans savoir vraiment mais j'ai essayé sans aussi. Il y en a sur le 12F1822 que j'utilise c'est une petite merveille mais comme tout les microcontroleurs faut savoir parler leur langue.
    J'ai aussi essayé avec un #INT_TIMER1 juste avant la routine Timer1_ISR mais rien n'y fait. Dans certain compilateur il est exigé de mettre #INT_TIMER1 avant mais en assembleur ça crée uniquement l'instruction SLEEP donc ça sert juste à se mettre en veille

  7. #6
    Bonnes perspectives

    Re : Timer sur microcontroleur MIDRange avec compilateur XC8

    Eurêka s'écria-il en sortant de son bain:

    Code:
    void interrupt Timer1_isr() ou interrupt Timer1_isr() //FAUX
    
    void __interrupt() Timer1_isr() ou __interrupt() Timer1_isr() //CORRECT
    Dernière modification par Antoane ; 18/02/2021 à 09h11. Motif: réparation balises code

Discussions similaires

  1. Touch Screen avec Microcontrôleur Picaso SGC et compilateur CCS
    Par invitec54b6ea5 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/01/2019, 12h21
  2. Timer microcontroleur pic
    Par invite9157cba4 dans le forum Électronique
    Réponses: 3
    Dernier message: 08/11/2013, 12h40
  3. bon compilateur graphi et bon compilateur pour aplications
    Par Queudal dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 17/02/2013, 22h47
  4. Programmation en C avec Timer 0 et Timer 1
    Par invite6844fe5f dans le forum Électronique
    Réponses: 43
    Dernier message: 20/04/2010, 14h27
  5. problème avec compilateur dev-c++
    Par invitef83aaf16 dans le forum Logiciel - Software - Open Source
    Réponses: 18
    Dernier message: 15/01/2009, 21h47
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...