Vous êtes sur la page 1sur 10

07/11/2019

Microprocesseurs et Microcontrôleurs

Timer et Watchdog du PIC 16F84A


Pr. A. AIT MADI

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 1

Plan

Timer TMR0
Introduction
Block Diagram du TIMER0
Choix de l’horloge
Choix du pré-diviseur
Applications

Watchdog Timer (WDT)


Introduction
Choix du pré-diviseur
Mise en service

Application

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 2

1
07/11/2019

Timer TMR0

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 3

Introduction
 Le Timer TMR0 est un timer/compteur 8 bits ayant les caractéristiques suivantes :
• Il est incrémenté en permanence soit par :
 Une horloge interne Fosc/4  fonctionnement mode timer
 Une horloge externe appliquée à la broche RA4 du port A  fonctionnement
mode compteur
 Son adresse dans la mémoire de données est 01h
 Le contenu du timer est accessible par le registre spéciale TMR0
 Le Timer provoque une interruption lorsqu'il déborde (passage de FF à 00)
 La valeur (sur un format de 8 bits) de la pré-division software programmable de
fréquence est possible
 Quand on écrit sur Le Timer0 l’incrémentation est inhibé pendant deux cycles
machine
 En mode compteur le Timer0 s’incrémente par front montant ou descendant de
l’horloge appliquée sur la pin RA4/T0CKI.

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 4

2
07/11/2019

Block Diagram du TIMER0

Les bits concernés par


le Timer TMR0

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 5

Choix de l’horloge

 Le choix de l'horloge se fait à l'aide du bit T0CS du registre OPTION_REG


(Adresse 81h)
• TOCS = 0 horloge interne
• TOCS = 1 horloge externe appliquée à RA4

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 6

3
07/11/2019

Choix de l’horloge

 Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER
s'incrémente
• TOSE = 0 incrémentation sur fronts montants
• TOSE = 1 incrémentation sur fronts descendants

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 7

Choix du pré-diviseur

 Quelque soit l'horloge choisie, on peut la passer dans un diviseur de fréquence


programmable (prescaler) dont le rapport est fixé par les bits PS0, PS1 et PS2 du
registre OPTION_REG

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 8

4
07/11/2019

Choix du pré-diviseur

 L'affectation ou non du pré-diviseur se fait à l'aide du bit PSA du registre


OPTION_REG
• PSA = 0 on utilise le pré-diviseur
• PSA = 1 pas de pré-diviseur (affecté au chien de garde)

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 9

Applications
Application 1:

Nous voulons mettre en œuvre le Timer TMR0, en fonctionnement Timer, pour fixer
la fréquence de clignotement d’une LED. Cette fréquence est soit
approximativement proche de 1Hz. La fréquence de l’oscillateur est Fosc=4 MHz.
L’horloge du Timer0 est interne.
1. Calculer la temporisation d’allumage ou d’extinction de la LED ?
2. Quelle est la temporisation générée par TMR0 sans pré-division ?
3. Quelle la temporisation générée par TMR0 avec une pré-division de 256 ? Quelle
est alors le contenu du registre OPTION_REG ?
4. Par quelle valeur faut-il multiplier la temporisation de la question 3 pour avoir une
temporisation de 500ms ?

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 10

5
07/11/2019

Applications
Application 1:

Nous voulons mettre en œuvre le Timer TMR0, en fonctionnement Timer, pour fixer
la fréquence de clignotement d’une LED. Cette fréquence est soit
approximativement proche de 1Hz. La fréquence de l’oscillateur est Fosc=4 MHz.
L’horloge du Timer est interne.

1. Calculer la temporisation d’allumage ou d’extinction de la LED ?


T=0.5s
2. Quelle est la temporisation générée par TMR0 sans pré-division ?
T=256*4/4*10-6 =256us
3. Quelle la temporisation générée par TMR0 avec une pré-division de 256 ? Quelle
est alors le contenu du registre OPTION_REG ?
T=256*256=65536us. Le contenu d’OPTION_REG est 10000111=0x87
4. Par quelle valeur faut-il multiplier la temporisation de la question 3 pour avoir une
temporisation de 500ms ? 500000/65536=7,63 (soit 7 ou 8)

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 11

Applications
Application 2: Programmation sous MPLAB X IDE

 Ecrire un programme en assembleur qui permet de faire clignoter une LED


connectée sur la sortie RB1 du port B, la temporisation permettant d'ajuster la
fréquence est obtenue par scrutation des débordements du timer TMR0. La LED
reste allumée ou éteinte pendant 5 débordement du Timer. On adopte une
prédivision de 256. La fréquence de l’oscillateur est Fosc=4MHz.

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 12

6
07/11/2019

Applications

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 13

Applications

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 14

7
07/11/2019

Watchdog Timer (WDT)

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 15

Introduction

 C’est un compteur 8 bits incrémenté en permanence (même si le µC est en mode


sleep) par une horloge RC intégrée indépendante de l'horloge système.
 Lorsqu’il déborde, (WDT TimeOut FF00), deux situations sont possibles :
• Si le µC est en fonctionnement normal, le WDT time-out provoque un
RESET.
 Ceci permet d’éviter de rester planté en cas de blocage du microcontrôleur
par un processus indésirable non contrôlé
• Si le µC est en mode SLEEP, le WDT time-out provoque un WAKE-UP
 L'exécution du programme continue normalement là où elle s'est arrêtée
avant de rentrer en mode SLEEP
 Cette situation est souvent exploitée pour réaliser des temporisations

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 16

8
07/11/2019

Choix du pré-diviseur
 L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms
 Il est cependant possible d'augmenter cette durée en faisant passer le signal
Time-Out dans un prédiviseur programmable (partagé avec le timer TMR0)
 l'affectation se fait à l'aide du bit PSA du registre OPTION_REG
• PSA = 1  on utilise le prédiviseur
• PSA = 0 pas de prédiviseur (affecté à TMR0)

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 17

Mise en service

 L'utilisation du WDT doit se faire avec précaution pour éviter la réinitialisation


(inattendue) répétée du programme
 Pour éviter un WDT timeOut lors de l'exécution d'un programme, on a deux
possibilités :
• Inhiber le WDT d'une façon permanente en mettant à 0 le bit WDTE dans
l'EEPROM de configuration

• Remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction


CLRWDT pour éviter qu'il ne déborde

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 18

9
07/11/2019

Application

 Ecrire un programme en assembleur qui permet de faire clignoter une LED


connectée sur la sortie RB1 du port B, la temporisation permettant d'ajuster la
fréquence est obtenue par scrutation des débordement du Timer du chien de
garde WDT. La LED est allumée ou éteinte pendant 0.576 s.

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 19

Application

RST(S6)-ENSA
EEA(S3)-EST-KENITRA
-KENITRA 20

10