Informatique Industrielle : TD TEMPORISATION LOGICIELLE
Télécharger PDFObtenir le pack complet des cours, TDs, TPs et projets sur Informatique Industrielle : Microprocesseur & Microcontrôleur!
Vous souhaitez maîtriser les microprocesseurs et Microcontrôleurs ? Ne cherchez plus, nous avons le pack parfait pour vous.
Accédez à une collection complète des supports de cours, des travaux dirigés (TD) corrigés, des travaux pratiques (TP) et des projets.
Obtenir le pack maintenantTEMPORISATION LOGICIELLE TD PAGE 1 / 2 TD TEMPORISATI
ON LOGICIELLE
La temporisation logicielle permet d’attendre un lapse de temps entre deux événements : clignotement d’un voyant, at
tente entre l’affichage de deux messages successifs, etc. E
lle permet aussi 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 logicielle il suffit de répéter n fo
is un certain nombre d’instructions. I.
Temporisation à une seule boucle A.
Algorigramme et programme en assembleur 68HC11 •
Ecrire le programme associé à l’algorigramme ci-dessus. Pour la variable n, on utilisera l’accumulateur A. Faire apparaître le nombre de cycles de chaque instruction. [ 2 ]TEMPO LDAA#n [ 2 ]CONT DECA
[ 3 ]BNE CONT
[ 5 ]
RTS •
Exprimer le nombre de cycles machines effe
ctués par ce programme en fonction de n. Nombre de cycles = 2 + n * ( 2 + 3 ) + 5 Nombre de cycles = n * ( 5 ) + 7 •
En déduire la valeur de n pour obtenir une te
mporisation de 500μs sachant qu’un cycle machine dure 542,5ns. La durée de la te
mporisation est égale au nombr
e de cycles fois 542,5.10-9 s donc : Nombre de cycles = durée / 542,5.10-9 durée/ 542,5.10
-9 = n * ( 5 ) + 7 n = ( (durée / 542,5.10-9 ) – 7 ) / ( 5 )n =182,9 n
≈ 183 On arrondit le résultat à la vale
ur entière la plus proche car un accumulateur ne peut contenir que des nombres entiers a)
Limite de ce programme• Quelle est la valeur de n pour ob
tenir une temporisation de 100ms ? n = ( (durée / 542,5.10-9 ) – 7 ) / ( 5 )n =
36864,96n ≈ 36865 •
L’accumulateur A peut-il c
ontenir une telle valeur ? Non car la valeur maximale cont
enue par l’accumulateur A est 2
8 –1 = 255. •
Quelle est la durée maximale de la temporis
ation obtenue avec ce programme sachant que l’accumulateur A n’a que 8 bits ?durée /
545,5.10
-9 = n * ( 5 ) + 7durée = ( n * ( 5 ) + 7 ) * 545,5.10-9 duréeMAX = ( n
MAX * ( 5 ) + 7 ) * 545,5.10-9 duréeMAX = ( 255 * ( 5 ) + 7 ) * 545,5.10-9 duréeMAX = 695,485μs 2.
Augmentation de la durée de la temporisation• Proposer une modification de ce programme afin d’augmenter la durée de la temporisation. Solution N°1 : On utilise un registre 16 bits : [ 3 ] TEMPOLDX #n
* Initialisation de la variable n. [ 3 ] CONTDEX * A-1 résultat stocké dans A. [ 3 ]BNE CONT * Branchement conditionnel: Z=0? si oui * branchement à CONT. [ 5 ]RTS * Fin du S/prg TEMPO. •
Exprimer le nombre de cycles machines effectués par ce nouveau programme en fonction de n. Nombre de cycles = 3 + n * ( 3 + 3 ) + 5 Nombre de cycles = n * ( 6 ) + 8 •
Quelle est la durée maximale de la te
mporisation obtenue avec ce programme ? Début de Temporisation Initialisation de la variable n
n = 0 ? Décrémentation de n Fin de Temp orisation oui non TEMPORISATION LOGICIELLE TD PAGE 2 / 2 Le registre d’index X est un registre 16 bits. La valeur maximale qu’il peut contenir est 2
16 –1 = 65535. Nombre de cycles = n * ( 6 ) + 8 or Nombre de cycles = durée / 500.10-9 durée/ 545,5.10
-9 = n * ( 6 ) + 8durée = ( n * ( 6 ) + 8 ) * 545,5.10-9 duréeMAX = ( n
MAX * ( 6 ) + 8 ) * 545,5.10-9 duréeMAX = ( 65535 * ( 6 ) + 8 ) * 545,5.10-9 duréeMAX = 213,320765ms •
Calculer la valeur de n pour obtenir les 100ms désirées.durée /
545,5.10
-9 = n * ( 6 ) + 8 n = ( (durée / 545,5.10-9 ) – 8 ) / ( 6 )n =
30720,63n ≈ 30721 un registre ne peut contenir que des nombres entiers II.
Temporisation à plusieurs boucles Pour augmenter la durée des temporisati
ons, on utilise plusieurs boucles imbriquées. A.
Algorigramme •
Retrouver le programme associé à cet algorig
ramme. On appellera NBTEMP le nombre de temporisations élémentaires. On utilisera l’accumulateur A pour NBTEMP et le registre X pour n. [ 2 ] TEMPO LDAA #NBTEMP
* Initialisation du nombre temporisation * élémentaire. [ 3 ] CONT1 LDX#n * Initialisation de la variable n. [ 3 ] CONT2 DEX
* X-1 résultat stocké dans X [ 3 ]BNE CONT2
* Branchement conditionnel: Z=0? si oui * branchement à CONT2. [ 2 ]DECA * A-1 résultat stocké dans A [ 3 ]BNE CONT1
* Z=0? si oui branchement à CONT1 [ 5 ]RTS * Fin du S/prg TEMPO •
Exprimer le nombre de cycles machines effe
ctués par ce programme en fonction de NBTEMP et n. Nombre de cycles = 2 + NBTEMP * [ 3 + n * ( 3 + 3 ) + 2 + 3 ] + 5 Nombre de cycles = NBTEMP * [ n * ( 6 ) + 8 ] + 7 •
Quelle est la durée maximale de la te
mporisation obtenue avec ce programme ? Durée = { NBTEMP * [ n * ( 6 ) + 8 ] + 7 } * 500.10-9 DuréeMAX = { NBTEMP
MAX * [ n
MAX * ( 6 ) + 8 ] + 7 } * 500.10-9 DuréeMAX = { 255 * [ 65535 * ( 6 ) + 8 ] + 7 } * 542,5.10-9 DuréeMAX = 54,39679887 secondes •
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.
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. Le fait d’arrondir à la valeur entière la plus proche intr
oduit une erreur sur la temporisation. Il vaut donc mieux arrondir la plus grande valeur (n sur 16 bits) ceci in
troduit une plus faible erreur relative (voir graph2). Durée / 542,5.10
-9 = NBTEMP * [ n * ( 6 ) + 8 ] + 7 n
= { [ ( Durée / 542,5.10
-9 ) – 7 ] / NBTEMP – 8 } / 6 Si NBTEMP = 1
on a n = { [ ( 3 / 542,5.10
-9 ) – 7 ] / 1 – 8 } / 6 = 921656 non retenue car > 65535 ( ... ) 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 OUIOUI Décrémenter n Temporisation Décrémenter le nombre de temporisations élémentaires = 0 ? NON
= 0 ? NON Initialisation du nombre de temporisations élémentaires Initialiser de n Fin
