Vous êtes sur la page 1sur 1

Timer en mode 1

Le timer choisi (timer0 ou timer1) utilise un compteur de 16 bits pour le comptage. Ce compteur de
16 bits est en fait constitué de 2 registres SFR de 8bits chacun.

Pour le timer0, ces 2 registres sont TH0 et TL0. Pour le timer1, ces 2 registres sont TH1 et TL1.

Supposons qu’on utilise par exemple le timer0. Une fois que TMOD est chargé par la valeur 01h, pour
lancer le comptage, il faut mettre à 1 le bit TR0 du registre TCON . Le timer0 commence alors le
comptage : le compteur de 16 bits constitué des 2 registres TH0 et TL0 (initialement à 0) va alors
s’incrémenter à la fréquence du CPU divisée par 12 (si on a choisit C/T = 0). Si la fréquence du CPU
est de 12Mhz par exemple, alors le compteur 16bits va s’incrémenter toutes les 1µs.

TH0 TL0

00000000 00000000

00000000 00000001

00000000 00000010

00000000 00000011 Débordement du timer : TF0 sera mis automatiquement à 1

- -
- -
- -

11111111 11111111

Ainsi, si le timer0 commence à compter à partir de 0, il débordera après exactement 216 µs.

216 µs = 65536 µs

La fraction de seconde la plus proche de 216 µs c’est 1/16 seconde.

En effet, 1/16 seconde =( 106 /16) µs = 62500 µs

Si on veut que le timer0 déborde après exactement 1/16 seconde, il faut donc, avant de lancer le
comptage, initialiser au départ TH0 et TL0 par la valeur que l’on va calculer :

216 - (106 /16 )= 65536 – 62500 = 3036 = (0BDC)16

On doit donc initialiser TH0 par la valeur 0Bh et TL0 par la valeur DCh si on veut que le timer0
déborde après exactement 1/16 seconde.

Ainsi, si on veut réaliser une temporisation de 1 seconde, il suffit de faire déborder 16 fois le timer0.

Si on veut réaliser une temporisation de N secondes, il suffit de faire déborder N × 16 fois le timer0.

Vous aimerez peut-être aussi