Monostables et astables avec le 68HC11

publicité
Electronique By Epix®
Monostables et astables avec le 68HC11
A. Rappel sur le 68HC11 :
Le 68HC11 possède 2 accus de 8bits :
- A
- B
On peut utiliser ces derniers pour les fonctions suivantes :
- stockage temporaire
- réalisation d’opérations
- relation avec l’ALU
Remarque : a et b peuvent se concaténer pour former un registre de 16 bits.
Le 68HC11 possède aussi deux registres de 16 bits chacun
- X
- Y
Ces deux registres ne peuvent qu’incrémenter ou décrémenter.
Le 68HC11 à aussi un registre de code condition (CCR) :
Voici son fonctionnement :
S
X
Les indicateurs :
C Indicateur de retenu
V Indicateur de
dépassement
Z Indicateur de résultat nul.
N Négatif
H
Demi retenu
Les commutateurs :
I Interruption IRQ
X Interruptions XIRQ
S stop
H
I
N
Z
V
C
Ce bit est à 1, si la dernière opération à produit une retenue.
Ce bit est à 1, si la dernière opération mathématique a produit un
résultat dont la taille dépasse celle du registre cible.
Ce bit est à 1, si la dernière opération a donné un résultat nul.
Ce bit est à 1, si le résultat de la dernière opération a donné un
résultat négatif dans la représentation des nombres en base 2.
Ce bit est à 1, si la dernière opération sur ‘ bits à produit une
retenue.
Si ce bit est à 1, alors les interruptions IRQ sont ignorées
Si ce bit est à 1, alors les interruptions XIRQ sont masquées.
Si ce bit est à 1, alors l’interruption STOP est ignorée.
Chacun des 8 bits du CCR constitue soit un indicateur (le processeur informe l’utilisateur), soit un
commutateur (l’utilisateur commande le processeur).
Page 1 sur 5
Electronique By Epix®
B. Rappel sur la numération des nombres positifs et négatifs :
Sur 8 bits, on a classiquement :
28 = 256 possibilités (on peut compter de 0 à 255, en décimal).
Mais étant donné que l’on veut représenter les nombres négatifs, on considère que le bit de poids fort
nous informe sur le signe du nombre.
A7 (MSB)
Signe
A6
x
A5
x
A4
x
A3
x
A2
x
A1
x
A0 (LSB)
x
Le bit de poids le plus fort nous informe du signe :
- S’il est positif, ne nombre formé par les 7 autres bits et négatif.
- S’il est négatif, ne nombre formé par les 7 autres bits et positif.
On a donc la répartition suivante :
Décimal
0
127
A7 (MSB)
0
0
A6
0
1
A5
0
1
A4
0
1
A3
0
1
A2
0
1
A1
0
1
A0 (LSB)
0
1
-0
-127
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Etant donné que le « zéro » apparaît à deux reprises (une fois dans les positifs, une fois dans les
négatifs), on obtient :
! 128 valeurs pour les nombres positifs (0 à 127)
! 128 valeurs pour les nombres négatifs (0 à -127)
! Ce qui fait un total de 256 cas (ce qui conforte la thèse de départ).
C. Le monostable non redéclenchable :
Un monostable est un système déclenché par un front (soit montant, soit descendant, selon le type de
configuration requise), et qui délivre en sortie une impulsion calibrée.
NB : On notera qu’il existe des monostables « analogiques », mais ici, nous nous intéressons
seulement aux monostables réalisable avec le 68HC11.
Avec le 68HC11, on rencontre un obstacle : réaliser un monostable est faisable, mais durant la
période de fonctionnement, le processeur est « occupé », il faut donc opter pour des solutions telles
que :
- le timmer (temporisateur)
- les compteurs (générateur d’impulsions)
- interruption en temps réel
- watchdog (chien de garde).
Page 2 sur 5
Electronique By Epix®
D. Le monostable redéclenchable :
Un monostable redéclenchable est un système déclenché par un front (soit montant, soit descendant,
selon le type de configuration requise), et qui délivre en sortie une impulsion calibrée, mais qui a la
possibilité d’être redéclenché si un front est présent en entrée.
E. Réalisation pratique d’un monostable non redéclenchable :
A l’aide du jeu d’instruction assembleur, on peut réaliser un monostable :
ici
titi
LDAA
STAA
#$00
$1004
LDAA
LDAB
#$FF
$1000
ANDB
#$01
BEQ
ici
LDAB
STAB
#$01
$1004
DECA
BNE
titi
LDAB
STAB
#$00
$1004
Commentaire
On stocke la valeur « 00 » dans le registre A.
On applique le contenu du registre A, sur le port d’adresse
$1004, en l’occurrence, il s’agit du port B (et non le registre B).
On stocke la valeur « FF » dans le registre A.
On stocke la valeur présente à l’adresse $1000, et on la stocke
dans le registre B. (En d’autres termes, on fait une lecture du
port A).
On fait un « ET logique », entre le registre « B », et la valeur
« $01 », afin de connaître l’état du bit Bo.
Si la condition précédente n’est pas satisfaite, on se branche sur
l’étiquette nommé « ici ».
1
2
3
4
5
6
On stocke la valeur « 01 », dans le registre « B ».
On applique le contenu du registre B, sur le port d’adresse
$1000, en l’occurrence, il s’agit du port A (et non le registre A).
7
8
On décrémente la valeur contenu dans le registre A.
Si l’instruction précédente n’est pas égale à 0, on se branche sur
l’étiquette nommée « titi ».
9
10
On stocke dans le registre B, la valeur « 00 »
On applique le contenu du registre B, sur le port d’adresse
$1004, en l’occurrence, il s’agit du port B (et non le registre B).
Page 3 sur 5
11
12
Electronique By Epix®
Algorigramme de fonctionnement :
Principe du monostable :
- On fait une lecture du port A, et dés qu’un front montant est observé (passage du niveau
bas, au niveau haut), on mets le bit B0 du port B, au niveau haut durant toute la durée
stable.
- Pour fixer la durée stable, on utilise une boucle, qui se charge de décrémenter le contenu
d’une variable, jusqu’à ce que cette dernière soit égale à zéro.
Rappel sur les instructions du 68HC11 :
LDAA
STAA
ANDB
BEQ
DECA
BNE
Charger le registre A, avec la valeur désirée.
Stocker en mémoire la valeur du registre A
« ET logique » bit à bit, entre le registre, et la mémoire désignée.
« Branche si égal ». On se branche à une étiquette nommée, si la valeur de
l’instruction est égale à celle de la mémoire opérande.
Décrémente le registre A
« Branche si Non Egal ». On se branche à une étiquette nommée, si la valeur de
l’instruction est différente de celle de la mémoire opérande.
Page 4 sur 5
Electronique By Epix®
F. Calcul de la durée
On a réalisé un monostable, mais on désire connaître la durée correspondant à l’état haut. Pour cela,
il suffit de compter le nombre de cycles, puis de le multiplier par le nombre de fois que ces cycles
seront exécutés.
! On regarde dans le listing du programme, l’endroit ou se situe la boucle :
titi
DECA
BNE
titi
2 cycles
3 cycles
LDAB
STAB
#$00
$1004
2 cycles
3 cycles
Les deux premières instructions sont répétées tant que le contenu du registre « A » n’est pas
égal à zéro. Comme, on a fixé le registre « A » à la valeur « FF », la boucle va se répéter 255 fois
(car dés qu’elle sera égale à zéro, elle va s’arrêter).
Les deux dernières instructions, ne vont se répéter qu’une seule fois.
Au final, on a donc :
T = ( 5 x 255 ) + 2 + 3
T = 1280 cycles.
La documentation constructeur nous stipule que la durée d’un cycle avoisine les 540ns, ce qui fait
donc une durée de :
Durée = 1280 x 540ns
Durée = 0,7 ms.
Page 5 sur 5
Téléchargement