Vous êtes sur la page 1sur 7

electroussafi.ueuo.

com 1/7

Assembleur PIC16F84 : Boucles de délai (retard)

Rappel :

Durée en cycle des instructions de sauts conditionnels

BTFSC f,b BTFSS f,b DECFSZ INCFSZ

1 cycle s’il n’y a pas de saut et 2 cycles s’il y a saut

Durée en cycle des instructions de sauts inconditionnels

GOTO k CALL k RETURN RETLW RETFIE

Toujours 2 cycles

Boucles simples de temporisation

Une boucle simple de temporisation est basée sur l''initialisation d’une variable à une
valeur donnée et ensuite la décrémenter (ou l’incrémenter) en boucle jusqu'à ce qu'elle
atteigne 0. Connaissant le temps d'exécution de chaque instruction, on peut calculer le
temps de la boucle.

Calcul d’une temporisation avec une boucle

Exemple 1

Soient l’algorithme et l’organigramme d’un sous-programme (appelé : retard) :

1. X = N ; par exemple : N = 4 retard


2. Décrémenter X de 1 (X = X -1)
X=N
3. Test X = 0 ?
4. Réponse : non, aller à 2
X=X-1
5. Réponse : oui, retour de sous-programme
non
X=0?
oui
retour

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai


electroussafi.ueuo.com 2/7

Sous-programme :

retard movlw N ; par exemple : N = 4

movwf X
boucle decfsz X,f
Le nombre de cycles est : 3N - 1
goto boucle
Le tableau suivant énumère les instructions exécutées.

Instructions Nombre de Nombre de cycles


exécutées cycles
Movlw 4 1 1
movwf X 1 X=4 1
Decfsz X,f 1 X=3 Pas de saut
3 = 4 – 1 = N – 1 (N = 4)
Goto 2 Saut
Decfsz X,f 1 X=2 Pas de saut
(1 + 2) x 3 = (1 + 2) x (N – 1)
Goto 2 Saut
Decfsz X,f 1 X=1 Pas de saut
= 3 x (N – 1)
Goto 2 Saut
Decfsz X,f 2 X=0 Saut 2

Nombre de cycles de la boucle (decfsz X,f et goto) est :

Tb = 3 x (N – 1) + 2 = 3 x N -1

Nombre total de cycles est : T = 1 + 1 + Tb = 1 + 1 + 3 x N - 1

La valeur max que l'on peut donner à N est : 0 ≡ 256, ce qui donne

Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 μs, ce qui donne une
temporisation max : T = 1 + 1 + 3 x 256 - 1 = 769 cycles = 769μs.

Exemple 2

movlw N ; par exemple : N = 4

movwf X
boucle nop
M x N ici M = 1 + 1 = 2 (2 x nop)
nop
decfsz X,f
3N - 1
goto boucle

Nombre de cycles : T = 1 + 1 + M x N + (1 + 2) x (N – 1) + 2

T = 1 + 1 + M x N + 3 x N – 1 = 1 + (M + 3) x N
N. ROUSSAFI electroussafi.ueuo.com Boucles de délai
electroussafi.ueuo.com 3/7

Exercice 1

Soit un sous-programme (appelé : retard) dont l’algorithme est le suivant :

1) COUNT = 10
2) Décrémenter COUNT de 1 (COUNT = COUNT -1)
3) Si : COUNT = 0 ?
Alors : retour de sous-programme
Sinon : aller à 2

1. Donner l’organigramme de ce sous-programme


2. Ecrire le sous-programme en assembleur
3. Combien de cycles, dure ce sous-programme ? et quelle est la durée de ce sous-
programme si le PIC utilisé est piloté par un quartz de 8 Mhz ?
4. Quelle est l’instruction qui permet d’appeler un sous-programme ?

Exercice 2

Soit un sous-programme (wait) dont l’algorithme est le suivant :

1) CNT2 = 10
2) CNT1 = 0
3) Pas d’opération
4) Décrémenter CNT1 de 1 (CNT1 = CNT1 -1)
5) Si CNT1 = 0 ?
Alors : décrémenter CNT2
Sinon : aller à 3
6) Test CNT1 = 0 ?
Alors : retour de sous-programme
Sinon : aller à 2

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai


electroussafi.ueuo.com 4/7

1. Ecrire le sous-programme en assembleur


2. Quelle est la durée de ce sous-programme si le PIC utilisé est piloté par un quartz de
8 Mhz ?

Exercice 3

Soit le sous-programme de temporisation suivant :

tempo movlw 0x05


movwf cptr3
b3 clrf cptr2
b2 clrf cptr1
b1 decfsz cptr1, f
goto b1
decfsz cptr2, f
goto b2
decfsz cptr3, f
goto b3
return

1. Quelle est la durée de ce sous-programme si le PIC utilisé est piloté par un


quartz de 10 Mhz ?
2. Quelle est la durée de ce sous-programme si le PIC utilisé est piloté par un
quartz de 4 Mhz et cptr3 = 203 = 0xCB?

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai


electroussafi.ueuo.com 5/7

Exercice 4

Soit le montage suivant :

On désire faire clignoter la led (allumer la led et éteindre la led d’une façon continue).

On donne l’algorithme est le suivant :

1) Allumer la led
2) Attendre (wait) (utiliser le sous-programme de l’exercice 3)
3) Eteindre la led
4) Attendre (wait)
5) Aller à 1

1. Donner l’organigramme
2. Ecrire un programme en assembleur
3. Ecrire un programme en mikroC

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai


electroussafi.ueuo.com 6/7

Exercice 5

Soit le montage suivant :

On désire faire clignoter les leds de la façon suivante :

D1, D3, D5 et D7 allumées les autres éteintes

D2, D4, D6 et D8 allumées les autres éteintes

On donne l’algorithme est le suivant :

1) Allumer les leds D1, D3, D5 et D7 et éteindre D2, D4, D6 et D8


2) Attendre (wait) (utiliser le sous-programme de l’exercice 3)
3) Allumer les leds D2, D4, D6 et D8 et éteindre D1, D3, D5 et D7
4) Attendre (wait)
5) Aller à 1

1. Donner l’organigramme
2. Ecrire un programme en assembleur
3. Ecrire un programme en mikroC

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai


electroussafi.ueuo.com 7/7

Exercice 6

Soit le montage suivant :

On désire réaliser un compteur binaire qui compte de 0x00 à 0xFF.

On donne l’algorithme est le suivant :

1) PORTB = 0
2) Attendre (wait) (utiliser le sous-programme de l’exercice 3)
3) Incrémenter PORTB
4) Aller à 2

1. Donner l’organigramme
2. Ecrire un programme en assembleur
3. Ecrire un programme en mikroC

N. ROUSSAFI electroussafi.ueuo.com Boucles de délai