![]() |
Copyright |
![]() 22 pages à l'impression |
![]() |
![]() |
version initiale 2000 |
dernière
mise à jour 28 janvier 2015 |
le microcontrôleur 8031 | le plus courant des µC | |||
jeu d'instructions | ses instructions | |||
hardware du 8031 | mise en oeuvre, interruptions, | |||
![]() |
![]() |
![]() |
![]() |
une collection d'icônes pour visiter tout le site |
Le tableau ci-dessous présente les principales versions construites par INTEL . Il s'agit d'un exemple simplement destiné à vouss faire prendre conscience de la multiplicité potentielle de dispositifs issus d'un même système originel et qui vont se différentier par une ou plusieurs fonctionnalités différentes ou supplémentaires.A- la famille MCS51
80C31BH-24
ROMless (128 Bytes RAM) 80C51BH-24 4K ROM 87C51-24 4K OTP/EPROM 80C32-24 ROMless (256 Bytes RAM) 80C52-24 8K ROM 87C52-24 8K OTP/EPROM 80C58-24/-33 32K ROM 87C58-24/-33 32K OTP/EPROM 80C51FA-24/-33 ROMless (256 Bytes RAM) with PCA 83C51FA-24/-33 8K ROM with PCA 87C51FA-24/-33 8K OTP/EPROM with PCA 87C51FB-24/-33 16K ROM with PCA 87C51FB-24/-33 16K OTP/EPROM with PCA 87C51FC-24/-33 32K ROM with PCA 87C51FC-24/-33 32K OTP/EPROM with PCA These products are now offered with frequencies of up to 24 MHz @ 20% Vcc and 33 MHz @ 10% Vcc. Packages include 44Ld PLCC, 44Ld QFP, 40Ld P-Dip and 40Ld CerDip. |
Le jeu de base est le même pour tous les membres de la famille et est optimisé pour les systèmes de contrôle 8-bits, d'où un très grand nombre de fonctions jouant sur un bit puisque de nombreux dispositifs de contrôle ont un fonctionnement à 2 états (ouvert-fermé ou tout ou rien)C jeu d'instructions
nom | numéro | signification |
P | PSW 0 | parité de l'accumulateur = 1 si le nombre de 1 dans l'accu est impair (odd) |
PSW 1 | bit configurable par l'utilisateur | |
OV | PSW 2 | bit d'overflow (en cas de dépassement de capacité lors d'opérations arithmétiques) |
RS0 | PSW 3 | bit 0 de sélection d'une banque de registres |
RS1 | PSW 4 | bit 1 " " " |
FO | PSW 5 | flag de statut d'application générale |
AC | PSW 6 | bit de carry auxiliaire pour les additions (opérations BCD |
CY | PSW 7 | bit de carry venant de l'ALU (mémorisation d'une retenue lors d'une addition) |
ADD A,7FH adressage direct (Dir)
ADD A,@R0 adressage indirect (Ind)
ADD A,R7adressage direct d'un registre (Reg)
ADD A,#127 adressage immédiat d'une constante (Imm)
Précisons que le résultat de la multiplication de deux nombres codés sur 8 bits s'exprime par un nombre codé sur 16 bits placé dans A et B (B contient la partie haute du résultat). Pour la division le quotient est placé dans A et le reste dans B. L'instruction DA A corrige l'erreur due à une addition de nombres codés en BCD.
A la fréquence d'horloge de 12MHz toutes les instructions s'exécutent en 1µs à l'exception des multiplications et divisions qui prennent 4 µs.
b 4 instructions logiques b
Il s'agit des opérations classiques booléennes opérant bit à bit sur un octet, ainsi l'opération AND entre l'accumulateur contenant 00110101B et l'octet 01010011B donnera le résultat 00010001B dans l'accumulateur
ANL A,<byte> ici encore tous les modes d'adressage sont permis. La plupart des opérations logiques sont exécutées en 1µs sauf celles qui font appel à une donnée et qui prennent alors 2µs.
l'instruction de rotation entraîne que le MSB devient le LSB (rotation à gauche) ou inversement, tandis que l'instruction swap substitue le quartet de poids fort à celui de poids faible et inversement (ce qui se révèle très utile pour convertir un nombre hexa en BCD).
5 transferts de données
ram interne
Les transferts affectant l'accumulateur s'effectuent en 1µS, les autres en 2µs. Notons que l'on peut transférer des données directement d'une case mémoire internedans une autre sans passer par l'accumulateur. Notons que l'instruction d'empilage PUSH commence par incrémenter le stack pointer (SP), puis copie l'octet concerné dans la pile, l'instruction POP correspond à la démarche rigoureusement inverse de "dépilage".
ram externe
Les instructions permettant d'accéder à la ram externe en lecture ou écriture sont de deux types, soit elles utilisent une adresse sur un octet, soit sur deux octets, elles s'exécutent en 2µs.
Noter que l'accumulateur est toujours soit la source, soit la destinationRemarquez que le petit morceau de programme ci-avant exécute l'instruction XRL (ou exclusif) qui n'existe pas entre deux bits dans le 8051. Notez encore que bit1 (ou bit2) peut être n'importe quel bit adressable ainsi il peut s'appeler FLAG et les deux lignes qui suivent permettent ainsi de transférer l'état de FLAG à une ligne d'un port
consultation de tables
Deux instructions permettent cela (lire mais non mettre à jour) toujours en 2µs.
Précisons que la table ne pourra avoir que 256 entrées puisque A est codé sur 8 bits
6 instructions booléennes
La ram interne contient 128 bits adressables et l'espace SFR peut aussi comporter 128 bits adressables. Les lignes d'entrées/sorties des différents ports sont aussi bits adressables. Aussi tout un jeu d'instructions s'adressant non plus à un octet mais à un bit est disponible et l'exécution prend 1 ou plus souvent 2 µs (dans le cas d'une horloge à 12MHz, mais des circuits fonctionnant à de bien plus grandes fréquences sont disponibles). Notons que dans ce cas c'est le bit carry C du registre PSW qui va jouer le même rôle que l'accumulateur dans les instructions précédentes
Dans les instructions de saut rel représente une adresse relative généralement définie par une étiquette dans le programme,
par ex :
MOV C,suite: (suite du programme)
bit1 JNB bit2,
suite CPL C
MOV C,
FLAG MOV P1.,C (P1.0 signifie bit 0 du port 1)
MOV counter, #10 | |
LOOP: | (début de la boucle) |
--- | |
--- (fin de boucle) | |
DJNZ counter, LOOP | |
(suite) |
On va d'abord préciser le mapping de ces registres, ce qui permettra en outre de visualiser les zones non implémentées de cet espace sur le chip (ce ne sont pas des cases vides, ici elles n'existent pas physiquement, cependant notons qu'elles sont parfois en partie implémentées dans des versions étendues du 8051 disposant de nouvelles possibilités)A - registres spéciaux
Les quatre ports sont bidirectionnels, chacun consiste en un latch (vu ci-dessus P0 à P3) un driver de sortie et un buffer d'entrée. Les drivers des ports 0 et 2 et le buffer d'entrée du port 0 servent aux accès mémoire externe. Dans ce cas le port 0 concerne l'octet de poids faible de l'adresse qui est multiplexé avec la donnée à lire ou écrire. Les ports 1 et 3 sont multifonctionnels, le tableau ci-dessous définit le rôle de chaque pin particulier préaffecté.B - structure et mise en oeuvre des ports
Ils sont de deux types selon qu'il s'agit de la mémoire de programme ou de la mémoire de données.La première utilise le signal PSEN comme contrôle de lecture tandis que la seconde utilise RD ou WR selon qu'il s'agit de lire ou d'écrire une donnée. L'accès au programme implique toujours une adresse sur 16 bits, tandis que la mémoire de données peut être atteinte soit en 8, soit en 16 bits. Notons que la partie basse de l'adresse étant multiplexée avec la donnée il convient de la latcher pendant le temps de lecture ou d'écriture dans un latch externe piloté avec le signal ALE (cf figures du chapitre précédent). Pendant un accès à la mémoire externe le CPU écrit 0FFH dans le latch du port 0 afin d'écraser toute information antérieure. La mémoire programme peut être atteinte sous deux conditions: soit le signal EA est actif soit le compteur de programme contient un nombre supérieur à 0FFFH. Cela en fait impose pour les versions romless la mise à la masse de la broche EA. Bien sûr lorsqu'on accède au programme le port 2 est bloqué en sortie et ne peut être utilisé à d'autres fonctions d'entrée-sortie.C - Accès à la mémoire externe
Tous les timers peuvent être configurés pour fonctionner en timer ou en compteur d'évènements. Dans la fonction timer le registre est incrémenté à chaque cycle machine. En mode compteur le registre est incrémenté à chaque transition 1 - 0 sur sa broche extérieure T0, T1 (ou T2). Dans cette fonction cette broche est testée pendant la phase S5P2 de chaque cycle machine, donc si la broche indique un 1 puis un 0 au cycle suivant le compteur est incrémenté et la nouvelle valeur apparait dans le registre pendant le S3P1 du cycle suivant. Comme il faut 2 cycles machines la fréquence maxi que pourra compter le compteur sera donc 1/24 de la fréquence d'horloge. Il n'y a aucune restriction sur le rapport cyclique, mais pour qu'une transition soit prise en compte il est plus sûr qu'elle dure au moins un cycle machine entier. De plus quatre modes de fonctionnement sont disponibles pour les timer 0 et 1, et trois spécifiques pour le timer 2.D - timers et compteurs
Le port série est de type full duplex bufferisé, c'est à dire qu'il peut émettre et recevoir simultanément et même commencer à recevoir un second octet alors que le premier n'a pas encore été traité par le CPU grâce au buffer SBUF. Sa configuration est contrôlée par le registre SCON. Il dispose de 4 modes d'opérationE - interface série
F - interruptions
La structure d'interruption du 8051 permet l'exploitation pas à pas avec très peu de software. On a en effet noté qu'une interruption ne peut être traitée directement après un RETI mais qu'après exécution d'au moins une instruction du programme principal (ce qui constitue une garantie qu'on pourra malgré de nombreuses interruptions quand même traiter le programme principal). On peut donc travailler en mode pas à pas en utilisant l'interruption extérieure par niveau. La routine de service de cette interruption pourrait se terminer ainsiG - opération "single-step"
JNB P3.2,$ ; wait here till INT0 goes highDonc si la broche INT0 qui est aussi la broche P3.2 est normallement maintenue basse le CPU entre dans la routine d'interruption et y reste jusqu'à ce qu'elle soit haute, puis à nouveau basse, alors la routine s'achève par un RETI et comme le niveau de P3.2 est toujours bas l'interruption est à nouveau détectée mais une instruction du programme principal doit être exécutée avant que la routine d'interruption soit à nouveau rappelée, d'où un fonctionnement en mode pas à pas très facile à gérer (il suffit d'un interrupteur de type poussoir relié au 5V via une résistance et un latch anti rebond). Cela est très commode pour tester et mettre au point un programme.
JB P3.2,$ ; now wait till it goes low
RETI ; go back and execute one instruction
L'entrée reset est la broche RST qui est l'entrée d'un trigger de schmitt. Le reset est obtenu en maintenant la broche RST au niveau haut pendant au moins 2 cycles machines (24 périodes d'horloge) alors que l'horloge fonctionne. Le CPU répond alors en provoquant un reset interne (le RST est en fait échantillonné à l'instant S5P2 comme les INT) mais il faut noter que les port-pins restent actifs pendant 19 périodes ensuite tout est réinitialisé, mais le signal ALE et PSEN qui sont liés à l'horloge redémarrent après 1 ou 2 cycles supplémentaires (avec toutes les conséquences sur les dispositifs externes qui leur sont liés). Ce reset provoque l'écriture de 0 dans tous les SFR sauf les latches des ports, le pointeur de pile et SBUF. Les latches (P0-P3) des ports sont initialisés à FFH, le pointeur de pile à 07H et SBUF est indéterminéH - reset
I - gestion de la puissance
Notons que la plupart des signaux internes sont influencés par les charges connectées aux diverses broches du composant. On s'arrangera pour qu'entre 0.8V et 2.0V les temps de montée ou descente soient de l'ordre de 10 ns. Les temps de propagation varient d'une broche à l'autre en fonction de la charge, de la température et du lot de fabrication : avec une horloge à 12MHz et en prenant pour référence le signal en XTAL2, les délais de propagation s'échelonnent entre 25 et 125 ns. Imaginez les délais pour une horloge à 1GHz dans certains circuits modernes.J - timing interne
![]() |
![]() |
![]() |
![]() |