Les Timers
Les Timers
Les Timers
LES TIMERS
Les timers sont enfait des compteurs formés généralement d’un prédiviseur suivi d’un registre
compteur de 8 ou 16 bits. L’entrée d’horloge peut être interne (mode timer) ou externe (mode
compteur d’événements).
Lorsque le registre compteur atteint sa valeur maximale et repasse à 0, un bit indicateur (flag) sera
positionnée et une interruption pourra être générée, informant ainsi la CPU du débordement du
timer. Il faut bien noter que le bit indicateur de débordement devra être remis à 0 après chaque
débordement.
1. Timer 0
Le timer 0 est un compteur 8 bits pré positionnable par le registre « TMR0 » accessible en banque 0 ;
la valeur de ce registre sera incrémentée et il sera possible de la lire à tout moment.
Le timer 0 est configuré par le registre « OPTION_REG » accessible en banque 1 et 3.
Le timer 0 peut avoir comme source d’horloge, suivant le bit « TOCS » du registre « OPTION_REG » :
- soit l’horloge interne du microcontrôleur, c’est à dire l’horloge du quartz à fréquence divisée par 4
(TOCS=0) ;
- soit une horloge externe, appliquée sur la
borne TOCKI, borne multiplexée avec RA4
(TOCS=1). Dans ce cas, le comptage peut se
faire sur front montant (« TOSE » de «
OPTION_REG » au NL0) ou sur front
descendant (TOSE=1).
2. Timer 1
TMR1 est un Timer/Compteur 16 bits accessible en lecture/écriture par l'intermédiaire des registres 8
bits TMR1H (bank0) et TMR1L (bank0) qui constituent sa partie haute et sa partie basse.
On le configure à l'aide du registre T1CON (bank0)
ASKRI Tahar 14
Microcontrôleurs
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
TMR1ON : démarrer arreter le timer TMR1CS : choix de l’horloge du timer T1SYNC :synchronisation de
0 : Timer stoppé 0 : horloge système (FOSC/4) :mode timer l’horloge externe (ignoré en mode
1 : Timer en fonctionnement 1 : horloge externe : mode compteur timer)
0 : synchronisation
1 : pas de synchronisation
T1OSCEN : validation de l’oscillateur associé à TMR1 T1CKPS1,T1CKPS0 :control du prescaler
0 : oscillateur arreté 00 : division par 1
1 : oscillateur activé 01 : division par 2
10 : division par 4
11 : division par 8
3 Le Timer TMR2
TMR2 est un timer 8 bits accessible en
lecture écriture constitué de :
un registre de contrôle T2CON (bank0)
un pré diviseur (1,4,16)
un registre de période PR2 (bank1)
accessible en lecture/écriture
un comparateur,
un post diviseur (1 à 16).
TMR2 est incrémenté par l'horloge interne Fosc/4. Il commence à 0 et quant il atteint la valeur du
registre PR2, le comparateur génère un signal qui :
- Remet TMR2 à 0.
- incrémente le postscaler qui fonctionne comme un diviseur de fréquence.
Comme le comptage commence à 0, si PR2=N, alors le comparateur annonce une égalité tous les N+1
coups d’horloge.
Au débordement du postscaler, le drapeau PIR1.TMR2IF est positionné, l'interruption
correspondante est déclenchée si elle est validée.
Le prescaler et le postscaler sont initialisés à chaque écriture dans TMR2 ou dans T2CON et au
RESET du processeur.
En résumé, Si on note :
DIV1 : rapport du pré diviseur DIV2 : Rapport du post diviseur
P : Valeur placée dans le registre PR2 Tsy : période de l'horloge système,
La périodicité du drapeau TMR2IF est donnée par : TF2 = DIV1 x (P+1) x DIV2 x Tsy
ASKRI Tahar 15
Microcontrôleurs
Le registre T2CON:
Nous savons maintenant que tout débordement du timer, entraine le positionnement du bit
indicateur de débordement (TOIF dans le cas du timer0 par exemple). Vous pouvez donc utiliser cet
indicateur (flag) pour déterminer si le timer a débordé ou non.
C’est le mode principal d’utilisation des timers. En effet, pour qu’une interruption se déclenche à
chaque passage du bit indicateur de débordement à 1, il faut positionner à l’avance les bits de
validation de l’interruption.
Pour que l’interruption timer 0 se déclenche lorsque T0IF passe à 1, il faut positionner les bits T0IE
et GIE.
Pour que l’interruption timer 1 se déclenche lorsque TMR1IF passe à 1, il faut positionner les bits
TMR1IE, PEIE et GIE.
Pour que l’interruption timer 2 se déclenche lorsque TMR2IF passe à 1, il faut positionner les bits
TMR2IE, PEIE et GIE.
Dés que le timer déborde, la CPU se branche automatiquement à une routine précédée par le mot
reservé #int_timer0 par exemple.
ASKRI Tahar 17