Registre TMR0 (Timer 0)
Il s'agit d'un registre spécial situé à l'adresse 0x01 (banque 0) de la mémoire des données (Data RAM).
Ce registre contient un nombre de 8 bits (0 à 255 en numération décimale).
Le module TMR0 (Timer 0) possède deux modes de fonctionnement :
1- Le mode timer
Pour configurer le module TMR0 en mode timer, il faut au préalable que :
T0CS = 0 (bit 5 du registre OPTION_REG)
Le contenu du registre TMR0 est alors incrémenté à chaque cycle de l'horloge interne.
1 cycle correspond à une durée de 1 µs pour un oscillateur à quartz de 4 MHz (1 cycle = 4 / F OSC).
En toute rigueur, cela est vrai si le taux de prédivision (prescaler) est réglé à 1 (bit 3 du registre OPTION_REG = PSA = 1).
Avec un taux de prédivision de 128 (PSA = 0, PS2 = 1, PS1 = 1, PS0 = 0), le contenu du registre TMR0 est incrémenté tous les 128 cycles (ou 128 µs).
Notez que si le contenu du registre TMR0 est 255 (0xFF), il passera à 0 (0x00) à la prochaine incrémentation.
En conclusion, le mode timer est utilisé pour mesurer des durées.
2- Le mode compteur
Pour configurer le module TMR0 en mode compteur, il faut au préalable que :
T0CS = 1 (bit 5 du registre OPTION_REG)
Le contenu du registre TMR0 est alors incrémenté à chaque front du signal présent sur la broche RA4/T0CKI :
En toute rigueur, cela est vrai si le taux de prédivision (prescaler) est réglé à 1 (bit 3 du registre OPTION_REG = PSA = 1).
Avec un taux de prédivision de 32 (PSA = 0, PS2 = 1, PS1 = 0, PS0 = 0), le contenu du registre TMR0 est incrémenté tous les 32 cycles du signal présent sur la broche RA4/T0CKI.
En conclusion, le mode compteur est utilisé pour faire du ... comptage.
3 - Interruption
On peut activer une interruption quand le registre TMR0 déborde (passage de 0xFF à 0x00).
Pour plus d'informations sur l'interruption TMR0
(C) Fabrice Sincère