Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Interrupt Timer strappée
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#11 Message par paulfjujo » mar. 15 mars 2016 14:24

tu ne désactives jamais la validation de INT



si, TMR1IE_bit=0 lorsque la tempo est atteinte


Code : Tout sélectionner


void Interrupt_LOW
() iv 0x0018 ics ICS_AUTO
 
{

  // -----  timer 1  ----------------
  if  ( (TMR1IE_bit==1) && ( TMR1IF_bit==1))
   {  // Test "Peripheral Interrupt Request Register 1" for Timer1 Flag
     Cpt1++;
     if (Cpt1 >=Max_Timer1)   // x100 ms
       {
        Cpt1=0;
        Flag_Timer1=1;
        TMR1ON_bit=0;
        TMR1IE_bit=0;
      }
      TMR1H= 0x0B; // Hi (3035);
      TMR1L= 0xDB; // Lo (3035);
      PIR1.TMR1IF=0;
   }
 }



TMR1IF_bit = 0; a bon, si =1, tu ne serais pas la mais dans l'int , et dans la même,

Non, pas forcement dans l'interupt, car si la tempo est atteinte alors TMR1IE_bit=0;
on ne traite plus l'IT timer1.
mais je te l'accorde , c'est une fois de trop, le 2em TRM1IF_bit=0;

de meme pour les 3 premieres lignes , pour une optimisation

Code : Tout sélectionner


  TMR1IF_bit         
= 0;
  TMR1H         = 0x0B;
  TMR1L         = 0xDC;


On pourrait aussi utiliser le timer1 en comptage (sans IT) dans une autre partie de programme
et avoir un TMR1IF déja armé .

Bref c'est mettre Ceinture et Bretelles , pour un contexte bien figé.
Avec le 18F87J50 ou le 18F46K22 j'ai de la place en ROM et RAM .. et donc ne cherche pas l'optimisation absolue
mais je vais suivre ton conseil.

+1

Code : Tout sélectionner


void Arme_Timer1
()
{
  Cpt1=0;
  Flag_Timer1=0;
  TMR1ON_bit=1;     // Timer0 ON
  }
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités