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.