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