UNIVERSITE HASSAN II
ECOLE SUPERIEURE DE TECHNOLOGIE DEPARTEMENT : GE
- CASABLANCA - GEII /GET/RLI
TD n° 2
I- Quelle est la durée d’une instruction (avec saut) sur un PIC16F876 ( ou16F877) cadencé
avec un quartz à la fréquence :
a) 4MHz
b) 8MHz
c) 12MHz
d) 20MHz
II- On considère la sous routine de temporisation décrite par le programme suivant :
Tempo_nµs
movlw d ’n’ ; n compris entre 0 et 255
movwf vartempo
boucle1
decfsz vartempo , 1
goto boucle1
return
1°) Déterminer en fonction du paramètre n le nombre de cycles machine exécutés à la sortie de la
routine (On prendra en considération l’instruction d’appel call et l’instruction de retour return).
2°) Quelle est la durée totale de cette routine pour les 4 fréquences du quartz citées précédemment .
3°) Comment doit-on prendre la valeur de n et ajouter éventuellement des instructions nop pour avoir
exactement une temporisation de 50µs puis une temporisation de 100µs avec un quartz de 4Mhz.
– Quelles seraient les durées de ces 2 routines dans le cas d’une horloge cadencée à 8Mhz.
4°) Quelle est la durée approximative de la routine suivante ( Fosc = 4Mhz ):
Tempo2
MOVLW D'189'
MOVWF vartempo2
Boucle2 CALL tempo_50µs
DECFSZ vartempo2,1
GOTO boucle2
RETURN
- En déduire une routine qui fournit une temporisation de l’ordre d’une seconde.
TD Microcontrôleur PIC16F877 1 A. EL JOUNAIDI
UNIVERSITE HASSAN II
ECOLE SUPERIEURE DE TECHNOLOGIE DEPARTEMENT : GE
- CASABLANCA - GEII /GET/RLI
III-
En langage C ( compatible XC8) la fonction prédéfinie _delay (n) permet d’introduire une
temporisation d’une durée de n cycles machine. ( tn = n*Tcycle avec Tcycle = 4*Tosc = 4/Fosc )
1°) Quelle valeur doit-on affecter à n si on veut réaliser une temporisation de 100us dans les trois cas
suivants :
- Fosc = 4Mhz
- Fosc = 8Mhz
- Fosc = 20Mhz
2°) Comment peut-on réaliser une fonction de temporisation appelée delay_ms (m) qui introduit une
temporisation d’environ 10 millisecondes à partir de la fonction _delay(n) dans les 3 cas cités
précédemment.
TD Microcontrôleur PIC16F877 2 A. EL JOUNAIDI