Vous êtes sur la page 1sur 2

TEMPORISATION LOGICIELLE TD PAGE 1 / 2

TD TEMPORISATION LOGICIELLE a) Limite de ce programme


• Quelle est la valeur de n pour obtenir une temporisation de 100ms ?
La temporisation logicielle permet d’attendre un lapse de temps entre deux événements :
clignotement d’un voyant, attente entre l’affichage de deux messages successifs, etc. Elle permet aussi n = ( (durée / 542,5.10-9) – 7 ) / ( 5 )
de laisser le temps à un périphérique d’accomplir une tâche : Conversion analogique numérique et
numérique analogique, exécution d’une instruction d’un afficheur, etc. Pour réaliser une temporisation n = 36864,96
logicielle il suffit de répéter n fois un certain nombre d’instructions. n ≈ 36865
I. Temporisation à une seule boucle
• L’accumulateur A peut-il contenir une telle valeur ?
A. Algorigramme et programme en assembleur 68HC11
Non car la valeur maximale contenue par l’accumulateur A est 28 –1 = 255.
Début de • Ecrire le programme associé à l’algorigramme ci-dessus. Pour la
Temporisation
variable n, on utilisera l’accumulateur A. Faire apparaître le nombre • Quelle est la durée maximale de la temporisation obtenue avec ce programme sachant que
de cycles de chaque instruction. l’accumulateur A n’a que 8 bits ?
Initialisation de la
variable n
durée / 545,5.10-9 = n * ( 5 ) + 7
[ 2 ] TEMPO LDAA #n
durée = ( n * ( 5 ) + 7 ) * 545,5.10-9
Décrémentation de n [ 2 ] CONT DECA
duréeMAX = ( nMAX * ( 5 ) + 7 ) * 545,5.10-9
[ 3 ] BNE CONT
n=0?
duréeMAX = ( 255 * ( 5 ) + 7 ) * 545,5.10-9
non
[ 5 ] RTS duréeMAX = 695,485µs
oui

Fin de
Temporisation 2. Augmentation de la durée de la temporisation
• Proposer une modification de ce programme afin d’augmenter la durée de la temporisation.
• Exprimer le nombre de cycles machines effectués par ce programme en fonction de n.
Solution N°1 : On utilise un registre 16 bits :
Nombre de cycles = 2 + n * ( 2 + 3 ) + 5
[ 3 ] TEMPO LDX #n * Initialisation de la variable n.
Nombre de cycles = n * ( 5 ) + 7
[ 3 ] CONT DEX * A-1 résultat stocké dans A.
• En déduire la valeur de n pour obtenir une temporisation de 500µs sachant qu’un cycle machine [ 3 ] BNE CONT * Branchement conditionnel: Z=0? si oui
dure 542,5ns.
* branchement à CONT.
La durée de la temporisation est égale au nombre de cycles fois 542,5.10-9s donc :
[ 5 ] RTS * Fin du S/prg TEMPO.
Nombre de cycles = durée / 542,5.10-9
durée / 542,5.10-9 = n * ( 5 ) + 7
• Exprimer le nombre de cycles machines effectués par ce nouveau programme en fonction de n.
n = ( (durée / 542,5.10-9) – 7 ) / ( 5 )
n = 182,9 Nombre de cycles = 3 + n * ( 3 + 3 ) + 5

n ≈ 183 On arrondit le résultat à la valeur entière la plus proche car un Nombre de cycles = n * ( 6 ) + 8

accumulateur ne peut contenir que des nombres entiers • Quelle est la durée maximale de la temporisation obtenue avec ce programme ?
TEMPORISATION LOGICIELLE TD PAGE 2 / 2

Le registre d’index X est un registre 16 bits. La valeur maximale qu’il peut contenir est • Retrouver le programme associé à cet algorigramme. On appellera NBTEMP le nombre de
16 temporisations élémentaires. On utilisera l’accumulateur A pour NBTEMP et le registre X pour
2 –1 = 65535.
n.
Nombre de cycles =n*(6)+8 or Nombre de cycles = durée / 500.10-9 [ 2 ] TEMPO LDAA #NBTEMP * Initialisation du nombre temporisation
-9
durée / 545,5.10 =n*(6)+8 * élémentaire.
-9 [ 3 ] CONT1 LDX #n * Initialisation de la variable n.
durée = ( n * ( 6 ) + 8 ) * 545,5.10
[ 3 ] CONT2 DEX * X-1 résultat stocké dans X
duréeMAX = ( nMAX * ( 6 ) + 8 ) * 545,5.10-9
[ 3 ] BNE CONT2 * Branchement conditionnel: Z=0? si oui
duréeMAX = ( 65535 * ( 6 ) + 8 ) * 545,5.10-9
* branchement à CONT2.
duréeMAX = 213,320765ms [ 2 ] DECA * A-1 résultat stocké dans A
[ 3 ] BNE CONT1 * Z=0? si oui branchement à CONT1
• Calculer la valeur de n pour obtenir les 100ms désirées. [ 5 ] RTS * Fin du S/prg TEMPO

durée / 545,5.10-9 = n * ( 6 ) + 8
• Exprimer le nombre de cycles machines effectués par ce programme en fonction de NBTEMP
n = ( (durée / 545,5.10-9) – 8 ) / ( 6 ) et n.
n = 30720,63
Nombre de cycles = 2 + NBTEMP * [ 3 + n * ( 3 + 3 ) + 2 + 3 ] + 5
n ≈ 30721 un registre ne peut contenir que des nombres entiers
Nombre de cycles = NBTEMP * [ n * ( 6 ) + 8 ] + 7
• Quelle est la durée maximale de la temporisation obtenue avec ce programme ?
II. Temporisation à plusieurs boucles
Pour augmenter la durée des temporisations, on utilise plusieurs boucles imbriquées. Durée = { NBTEMP * [ n * ( 6 ) + 8 ] + 7 } * 500.10-9
A. Algorigramme DuréeMAX = { NBTEMPMAX * [ nMAX * ( 6 ) + 8 ] + 7 } * 500.10-9
Temporisation
DuréeMAX = { 255 * [ 65535 * ( 6 ) + 8 ] + 7 } * 542,5.10-9
Initialisation du nombre de
temporisations élémentaires DuréeMAX = 54,39679887 secondes

Initialiser de n • Déterminer les valeurs de n et NBTEMP pour obtenir une temporisation de 3s.
Méthode :
ƒ Exprimer n en fonction de NBTEMP et de la Durée de la temporisation.
Décrémenter n
ƒ Calculer n pour des valeurs de NBTEMP. La valeur de NBTEMP à retenir est celle
qui permet d’avoir la valeur de n immédiatement inférieure à 65535.
=0? Le fait d’arrondir à la valeur entière la plus proche introduit une erreur sur la temporisation. Il vaut donc mieux
NON
arrondir la plus grande valeur (n sur 16 bits) ceci introduit une plus faible erreur relative (voir graph2).
OUI
Décrémenter le nombre de Durée / 542,5.10-9 = NBTEMP * [ n * ( 6 ) + 8 ] + 7
temporisations élémentaires
n = { [ ( Durée / 542,5.10-9 ) – 7 ] / NBTEMP – 8 } / 6

NON
=0? Si NBTEMP = 1 on a n = { [ ( 3 / 542,5.10-9 ) – 7 ] / 1 – 8 } / 6 = 921656 non retenue car > 65535
OUI
(…)
Fin
Si NBTEMP = 14 on a n = { [ ( 3 / 500.10-9 ) – 7 ] / 15 – 8 } / 6 = 65831 non retenue car > 65535
Si NBTEMP = 15 on a n = { [ ( 3 / 500.10-9 ) – 7 ] / 30 – 8 } / 6 = 61443 retenue car < 65535

Vous aimerez peut-être aussi