Vous êtes sur la page 1sur 2
Programmation PIC Calcul temporisation Page 1 / 2

Programmation PIC

Calcul temporisation

Page 1 / 2

Programme de temporisation:

Structure du programme: Sous-programme tempo Initialisation compteur3 Initialisation compteur2 Initialisation
Structure du programme:
Sous-programme tempo
Initialisation compteur3
Initialisation compteur2
Initialisation compteur1
compteur1 = compteur1-1
Jusqu’à compteur1 = 0
compteur2 = compteur2-1
Jusqu’à compteur2 = 0
compteur3 = compteur3-1
Jusqu’à compteur3 = 0
Retour

call

tempo

;appel de la temporisation

2 cycles

tempo

 

movlw

d'10'

1 cycle

movwf

cmpt3

; initialiser compteur3

1 cycle

boucle3

 

movlw

d'100'

1 cycle

movwf

cmpt2

; initialiser compteur2

1 cycle

boucle2

 

movlw

d'249'

1 cycle

movwf

cmpt1

; initialiser compteur1

1 cycle

boucle1

 

nop

; perdre 1 cycle

1 cycle

decfsz

cmpt1 , f

; décrémenter compteur1

1 ou 2 cycles

goto

boucle1

; si pas 0, boucler

2 cycles

decfsz

cmpt2 , f

; si 0, décrémenter compteur 2

1 ou 2 cycles

goto

boucle2

; si cmpt2 pas 0, recommencer boucle1

2 cycles

decfsz

cmpt3 , f

; si 0, décrémenter compteur 3

1 ou 2 cycles

goto

boucle3

; si cmpt3 pas 0, recommencer boucle2

2 cycles

return

; retour de la sous-routine

2 cycles

EPAI Fribourg – Hervé Page / Calcul Temporisation.odtCalcul Temporisation.odtCalcul Temporisation.odt

Programmation PIC

Calcul temporisation

Page 2 / 2

Calcul de la durée du sous-programme pour un PIC tournant avec un quartz de 4MHz:

Un cycle processeur dure 4 cycles d'horloge, soit 1μs. Les instructions durent presque toutes 1 cycle. Dans le programme ci-avant, certaines instructions durent 2 cycles: call, return, goto, decfsz si on saute l'instruction suivante (qui est alors traitée comme un nop).

Calcul du nombre de cycles:

La boucle la plus à l'intérieur:

 

movlw

d'249'

1 cycle

movwf

cmpt1

; initialiser compteur1

1 cycle

boucle1

 

nop

; perdre 1 cycle

1 cycle

decfsz

cmpt1 , f

; décrémenter compteur1

1 ou 2 cycles

goto

boucle1

; si pas 0, boucler

2 cycles

Durée: 1 + 1 + (1+1+2)x248 + (1+2)x1 = 997 cycles.

248 fois, on a un cycle avec nop (1), decfsz (1) et goto (2). Au dernier cycle, le decfsz dure 2 cycles, mais il n'y a pas le goto.

Sur le même principe, la deuxième boucle dure:

1 + 1 + (997+1+2)x99 + (997+2) = 100'001 cycles.

Sur le même principe, la troisième boucle dure:

1 + 1 + (100001+1+2)x9 + (100001+2) = 1'000'041 cycles.

Si on ajoute le call et le return, la boucle dure au total 1'000'045 cycles.

A 4 Mhz, la durée sera donc de 1,000 seconde.

EPAI Fribourg – Hervé Page / Calcul Temporisation.odtCalcul Temporisation.odtCalcul Temporisation.odt