Informatique Industrielle : TD TEMPORISATION LOGICIELLE
Télécharger PDFTemporisation Logicielle
La temporisation logicielle permet d’attendre un laps de temps entre deux événements : clignotement d’un voyant, attente entre l’affichage de deux messages successifs, etc. Elle 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.
Temporisation à une seule boucle
Programme en assembleur 68HC11
Pour réaliser une temporisation logicielle à une seule boucle, on utilise le programme suivant :
TEMPO LDAA #n ; [2] cycles
CONT DECA ; [3] cycles
BNE CONT ; [5] cycles si Z=0
RTS ; [5] cycles
Calcul du nombre de cycles
Le nombre total de cycles exécutés par ce programme est donné par la formule :
Nombre de cycles = n * (5) + 7
Calcul de la valeur de n pour une temporisation de 500 µs
Sachant qu’un cycle machine dure 542,5 ns, on déduit la valeur de n pour obtenir une temporisation de 500 µs :
durée / 542,5.10^-9 = n * (5) + 7 n = ((durée / 542,5.10^-9) – 7) / 5 n ≈ 183
Limites du programme
L’accumulateur A, limité à 8 bits, ne peut contenir que des valeurs maximales de 255. Ainsi, la durée maximale de temporisation avec ce programme est :
duréeMAX = (255 * 5 + 7) * 542,5.10^-9 duréeMAX = 695,485 µs
Exemple : Temporisation de 100 ms
Pour obtenir une temporisation de 100 ms, la valeur de n serait :
n = ((100.10^-3 / 542,5.10^-9) – 7) / 5 n ≈ 36865
Cette valeur dépasse la capacité de l’accumulateur A, qui ne peut contenir que des entiers jusqu’à 255.
Augmentation de la durée de la temporisation
Solution avec un registre 16 bits
Pour augmenter la durée, on utilise le registre d’index X, qui est un registre 16 bits. Voici le programme modifié :
TEMPO LDX #n ; [3] cycles
CONT DEX ; [3] cycles
BNE CONT ; [5] cycles si Z=0
RTS ; [5] cycles
Calcul du nombre de cycles avec un registre 16 bits
Le nombre total de cycles exécutés par ce programme est donné par la formule :
Nombre de cycles = n * (6) + 8
Durée maximale avec un registre 16 bits
La durée maximale de temporisation obtenue avec ce programme est :
duréeMAX = (65535 * 6 + 8) * 542,5.10^-9 duréeMAX = 213,320765 ms
Calcul de n pour une temporisation de 100 ms
Pour obtenir une temporisation de 100 ms avec un registre 16 bits, la valeur de n est :
n = ((100.10^-3 / 542,5.10^-9) – 8) / 6 n ≈ 30721
Temporisation à plusieurs boucles
Programme en assembleur 68HC11 avec boucles imbriquées
Pour augmenter davantage la durée, on utilise plusieurs boucles imbriquées. Voici le programme associé :
TEMPO LDAA #NBTEMP ; [2] cycles
CONT1 LDX #n ; [3] cycles
CONT2 DEX ; [3] cycles
BNE CONT2 ; [5] cycles si Z=0
DECA ; [2] cycles
BNE CONT1 ; [3] cycles si Z=0
RTS ; [5] cycles
Calcul du nombre de cycles avec plusieurs boucles
Le nombre total de cycles exécutés par ce programme est donné par la formule :
Nombre de cycles = NBTEMP * [n * (6) + 8] + 7
Durée maximale avec plusieurs boucles
La durée maximale de temporisation obtenue avec ce programme est :
duréeMAX = {255 * [65535 * (6) + 8] + 7} * 542,5.10^-9
duréeMAX = 54,39679887 secondes
Calcul des valeurs de n et NBTEMP pour une temporisation de 3 secondes
Pour obtenir une temporisation de 3 secondes, on choisit la valeur de NBTEMP qui permet d’avoir la valeur de n immédiatement inférieure à 65535. Voici un exemple avec NBTEMP = 15 :
n = {[(3 / 542,5.10^-9) – 7] / 15 – 8} / 6
n ≈ 61443
FAQ
1. Pourquoi arrondir à la valeur entière la plus proche pour n ?
Un accumulateur ou un registre ne peut contenir que des nombres entiers. L’arrondi permet de s’assurer que la temporisation calculée est la plus précise possible en utilisant une valeur entière valide.
2. Quels sont les avantages d’utiliser plusieurs boucles imbriquées ?
Les boucles imbriquées permettent d’obtenir des durées de temporisation beaucoup plus longues, en combinant plusieurs registres (8 bits et 16 bits), tout en gardant une précision acceptable.
3. Comment calculer la durée exacte d’une temporisation logicielle ?
La durée exacte se calcule en multipliant le nombre total de cycles par la durée d’un cycle machine (542,5 ns). Il est important de vérifier que les valeurs de n et NBTEMP restent dans les limites des registres utilisés.