Module : Introduction aux systèmes embarqués
Année universitaire : 2022 – 2023
TRAVAUX PRATIQUES N° : 9
INTRODUCTION A LA PROGRAMMATION DES MICROCONTROLEURS
INTRODUCTION :
La sélection du mode de fonctionnement et la configuration du TIMER0 sont assurées par le registre
OPTION_REG.
Bit7: RBPU = Pull up Enable bit on Port B.
1 = Pull up désactivé sur le Port B.
0 = Pull up activé.
Bit6: INTEDG = Interrupt Edge select bit.
1 = Interruption si front montant sur RB0/INT
0 = Interruption si front descendant sur RB0/INT.
Bit5 : T0CS = Timer TMR0 Clock Source select bit.
1 = L’horloge du Timer est l’entrée RA4/Clk
0 = Le Timer utilise l’horloge interne du PIC.
Bit4: T0SE = Timer TMR0 Source Edge select bit.
1 = Le Timer s’incrémente à chaque front montant sur RA4/Clk.
0 = Le Timer s’incrémente à chaque front descendant sur RA4/Clk.
Bit3: PSA = Prescaler Assignement bit.
1 = Le pré-diviseur est affecté au watchdog.
0 = Le pré-diviseur est affecté au Timer TMR0.
PS2 PS1 PS0 Prédiviseur
0 0 0 1 :2
Mr Nizar TOUJENI 1/5
0 0 1 1 :4
0 1 0 1 :8
0 1 1 1 :16
1 0 0 1 :32
1 0 1 1 :64
1 1 0 1 :128
1 1 1 1 :256
MANIPULATION :
Exercice 9.1 :
On désire réaliser un compteur modulo 10 en utilisant le timer TMR0 d’un PIC 16F84A. Le compteur
est incrémenté à chaque front montant.
1. Indiquer si le mode de fonctionnement du TMR0 est compteur ou temporisateur.
2. Donner alors le nom de la broche de l’entrée d’horloge du TMR0.
3. Configurer alors le registre OPTION_REG :
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
4. Compléter le programme suivant :
void main ( )
TRISB = … ;
TRISA = … ;
OPTION_REG = … ;
Mr Nizar TOUJENI 2/5
TMR0 = … ;
while (1)
{
PORTB = … ;
if (TMR0 == …) TMR0 = …;
5. Modifier le programme précédent pour réaliser un compteur modulo 16 et l’incrémentation se fait
chaque 2 fronts descendants.
Exercice 9.2 :
On désire réaliser un compteur modulo 100 en utilisant le timer TMR0 d’un PIC 16F84A. Le compteur
est incrémenté à chaque front descendant de RA4. On adopte l’affichage multiplexé puisqu’on dispose
d’un seul décodeur BCD – 7Segments et deux afficheurs.
1. Configurer le registre OPTION_REG :
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
2. Compléter le tableau suivant :
Nombre à afficher T1 T2 Afficheur 1 Afficheur 2
Bloqué Bloqué Non Non 1ms
Unité de TMR0 Saturé … Oui Non 10ms
Bloqué Bloqué Non Non 1ms
Dizaine de TMR0 … … … … 10ms
Bloqué Bloqué Non Non 1ms
Mr Nizar TOUJENI 3/5
3. Compléter le programme suivant :
int uni, dix ;
void main ( )
TRISB = … ;
TRISA = … ;
OPTION_REG = … ;
TMR0 = … ;
while (1)
{
while (TMR0 < …)
uni = TMR0…10;
Mr Nizar TOUJENI 4/5
dix = TMR0…10;
PORTA = 0 ;
Delay_ms (1) ;
PORTB = uni;
PORTA = …;
Delay_ms (10) ;
PORTA = 0 ;
Delay_ms (1) ;
PORTB = dix;
PORTA = …;
Delay_ms (10) ;
TMR0 = … ;
Mr Nizar TOUJENI 5/5