Vous êtes sur la page 1sur 5

chap 4 Microcontrôleurs

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).

Suivant le bit « PSA » de « OPTION_REG »,


cette horloge peut être divisée (PSA=0) ou
non.
Le rapport de division est fixé de 2 à 256
suivant les bits « PS2, PS1 et PS0 » du
même registre.

Noter que le pré diviseur est une ressource


commune avec le « Watchdog ». Il ne pourra être utilisé que pour l’une
des fonctions suivant « PSA ».

Lorsque le registre TMR0 passe de FFh à 00h, le bit « TMR0IF » (TiMeR0


Interrupt Flag) du registre « IT1CON » passe à 1. Il est possible de
détecter ce passage :
- soit en scrutant ce bit (ne pas oublier de le remettre au NL1 après
lecture pour une nouvelle utilisation) ;
- soit en autorisant une interruption du programme (mode interruption).
ASKRI Tahar 13
Microcontrôleurs

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)

 TMR1 peut fonctionner dans 3 modes différents :

- Timer Synchrone (horloge interne)


- Compteur Synchrone (horloge externe)
- Compteur Asynchrone (horloge externe)
Le bit de contrôle TMR1CS
détermine le
fonctionnement en Timer ou
en Compteur et le bit
T1SYNC détermine le mode
de fonctionnement en
synchrone ou en asynchrone.
 TMR1 peut être
arrêté/démarré à l'aide du
bit TMR1ON.
 TMR1 peut être RAZ à l'aide du module de capture/comparaison CCP.
 TMR1 peut être précédé d'un pré diviseur (Prescaler) qui peut diviser la fréquence par 1, 2, 4 ou 8
selon la valeur des bits T1CKPS1 et T1CKPS0.
 A son débordement (FFFFh ->0000h) le drapeau PIR1.TMR1IF (bank0) est positionné ce qui peut
déclencher l'interruption périphérique TMR1I si elle est validée par son bit de validation PIE1.TMR1IE
(bank1).
2.1 Le mode Timer
Dans ce mode, TMR1 est incrémenté par l’horloge système Fosc/4 éventuellement pré divisée. Le bit
de synchronisation n'a pas d'effet car l'horloge Fosc/4 est toujours synchronisée sur l'horloge
système.
2.2 Le mode Compteur
Dans ce mode, TMR1 est incrémenté à chaque front montant de l'horloge externe T1CKI (RC0) ou
l'horloge dédiée générée par l’oscillateur T1OSC à condition de positionner le bit T1OSCEN à 1 et de
brancher un quartz entre les broche RC0 et RC1.
En mode compteur, RC0 et RC1 sont automatiquement configurées en entrée, on n’a pas besoin de
configurer les bits TRISC,0 et TRISC,1.
 En fonctionnement Synchrone, l'horloge externe (éventuellement pré divisée) n'incrémente pas
directement le timer mais elle est synchronisée sur l'horloge système ce qui peut entrainer un delai
de l'ordre de 1 cycle machine.
 En fonctionnement Asynchrone, l'horloge externe (éventuellement pré divisée) incrémente le timer
indépendamment de l'horloge système.
En mode Compteur Asynchrone, on ne peut pas utiliser les modules CCP1 et CCP2 pour faire des
captures ou des comparaisons sur TMR1.

2.3 Le registre de contrôle de T1CON

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

En résumé : Le temps qui sépare 2 levés de drapeau TMR1IF est :

Si on ajoute un compteur N dans le programme on obtient un temps = N x TF1

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.

TMR2 est remis à zéro à chaque RESET.

Le prescaler et le postscaler sont initialisés à chaque écriture dans TMR2 ou dans T2CON et au
RESET du processeur.

Le fonctionnement de TMR2 est configuré à l'aide du registre de contrôle T2CON :

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:

- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

T2CKPS1, T2CKPS0: ratio du prescaler TMR2ON : démarrer et arreter TMR2


00 : prédiviseur par 1 0 : TMR2 off
01 : prédiviseur par 4 1 : TMR2 on
1x : prédiviseur par 16
TOUTPS3 :TOUTPS0 : ratio du postscale
0000 : division par 1
0001 :division par 2
….
1111 : division par 16

4. Modes de fonctionnement des timers


4.1. Le mode scrutation

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.

Exp : while(TOIF == 0) ; //Attendre le débordement du timer0 pour sortir.


TOIF = 0 ; //N’oubliez pas de remettre ce bit à 0.

4.2 Le mode interruption

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.

5. Exemple de programmation d’une interruption


On veut faire clignoter la LED RC2 à une fréquence approximativement à 2 Hz. On admet que la
fréquence dequartz est Fosc=8MHz.

La fréquence de clignotement Fc=2Hz Tc = 500ms.


Le timer provoque à chaque débordement, une interruption. La période de débordement T d doit etre
la moitié de Tc donc Td = 250ms.
La période maximale de débordement du timer 0 :
Td0max = 4*Tosc*Predivmax*28=4*0.125µs*256*256=32.768ms ; or nous voulons une période de 250ms
environ. Cherchons alors la période maximale de débordement du timer 1 :
Td1max = 4*Tosc*Predivmax*216=4*0.125µs*8*65536=262.0144ms ; cette valeur pourra etre acceptable.
ASKRI Tahar 16
Microcontrôleurs
On doit configurer le timer 1, en mode timer (horloge interne) avec une valeur de pré division égale à
8 ; d’où T1CON = 00110001=31h.

ASKRI Tahar 17

Vous aimerez peut-être aussi