Systèmes embarqués - Registres
Les registres sont utilisés dans la CPU pour stocker temporairement des informations qui pourraient être des données à traiter, ou une adresse pointant vers les données à extraire. En 8051, il existe un type de données de 8 bits, du MSB (bit le plus significatif) D7 au LSB (bit le moins significatif) D0. Avec le type de données 8 bits, tout type de données supérieur à 8 bits doit être divisé en blocs de 8 bits avant d'être traité.
Les registres les plus largement utilisés du 8051 sont A (accumulateur), B, R0-R7, DPTR (pointeur de données) et PC (compteur de programme). Tous ces registres sont de 8 bits, sauf DPTR et PC.
Registres de stockage en 8051
Nous aborderons ici les types de registres de stockage suivants -
- Accumulator
- Registre R
- Registre B
- Pointeur de données (DPTR)
- Compteur de programmes (PC)
- Pointeur de pile (SP)
Accumulateur
L'accumulateur, registre A, est utilisé pour toutes les opérations arithmétiques et logiques. Si l'accumulateur n'est pas présent, alors chaque résultat de chaque calcul (addition, multiplication, décalage, etc.) doit être stocké dans la mémoire principale. L'accès à la mémoire principale est plus lent que l'accès à un registre comme l'accumulateur car la technologie utilisée pour la grande mémoire principale est plus lente (mais moins chère) que celle utilisée pour un registre.
Les registres "R"
Les registres "R" sont un ensemble de huit registres, à savoir, R0, R1 à R7. Ces registres fonctionnent comme des registres de stockage auxiliaires ou temporaires dans de nombreuses opérations. Prenons un exemple de la somme de 10 et 20. Stockez une variable 10 dans un accumulateur et une autre variable 20 dans, par exemple, le registre R4. Pour traiter l'opération d'ajout, exécutez la commande suivante -
ADD A,R4
Après avoir exécuté cette instruction, l'accumulateur contiendra la valeur 30. Ainsi, les registres "R" sont des auxiliaires ou helper registers. L'accumulateur seul ne serait pas très utile s'il n'y avait pas ces registres "R". Les registres "R" sont destinés au stockage temporaire des valeurs.
Prenons un autre exemple. Nous allons ajouter les valeurs de R1 et R2 ensemble, puis soustraire les valeurs de R3 et R4 du résultat.
MOV A,R3 ;Move the value of R3 into the accumulator
ADD A,R4 ;Add the value of R4
MOV R5,A ;Store the resulting value temporarily in R5
MOV A,R1 ;Move the value of R1 into the accumulator
ADD A,R2 ;Add the value of R2
SUBB A,R5 ;Subtract the value of R5 (which now contains R3 + R4)
Comme vous pouvez le voir, nous avons utilisé R5 pour maintenir temporairement la somme de R3 et R4. Bien sûr, ce n'est pas la manière la plus efficace de calculer (R1 + R2) - (R3 + R4), mais cela illustre l'utilisation des registres «R» comme moyen de stocker temporairement des valeurs.
![](https://assets.edu.lat/embedded_systems/images/8bit_registers.jpg)
Le registre "B"
Le registre "B" est très similaire à l'accumulateur en ce sens qu'il peut contenir une valeur de 8 bits (1 octet). Le registre "B" n'est utilisé que par deux instructions 8051:MUL AB et DIV AB. Pour multiplier ou diviser rapidement et facilement A par un autre nombre, vous pouvez stocker l'autre nombre dans «B» et utiliser ces deux instructions. Outre l'utilisation des instructions MUL et DIV, le registre "B" est souvent utilisé comme un autre registre de stockage temporaire, un peu comme un neuvième registre R.
Le pointeur de données
Le pointeur de données (DPTR) est le seul registre 16 bits (2 octets) accessible par l'utilisateur du 8051. L'accumulateur, les registres R0 – R7 et le registre B sont des registres de valeurs à 1 octet. DPTR est destiné à pointer vers des données. Il est utilisé par le 8051 pour accéder à la mémoire externe en utilisant l'adresse indiquée par DPTR. DPTR est le seul registre 16 bits disponible et est souvent utilisé pour stocker des valeurs à 2 octets.
Le compteur de programmes
Le compteur de programme (PC) est une adresse de 2 octets qui indique au 8051 où la prochaine instruction à exécuter peut être trouvée dans la mémoire. Le PC démarre à 0000h lorsque le 8051 s'initialise et est incrémenté à chaque fois qu'une instruction est exécutée. Le PC n'est pas toujours incrémenté de 1. Certaines instructions peuvent nécessiter 2 ou 3 octets; dans de tels cas, le PC sera incrémenté de 2 ou 3.
Branch, jump, et interruptLes opérations chargent le compteur de programme avec une adresse autre que l'emplacement séquentiel suivant. L'activation d'une réinitialisation à la mise sous tension entraînera la perte de toutes les valeurs du registre. Cela signifie que la valeur du PC est 0 lors de la réinitialisation, forçant le CPU à récupérer le premier opcode à partir de l'emplacement ROM 0000. Cela signifie que nous devons placer le premier octet de upcode dans l'emplacement ROM 0000 car c'est là que le CPU s'attend à trouver première instruction.
Le pointeur de pile (SP)
Le pointeur de pile, comme tous les registres sauf DPTR et PC, peut contenir une valeur de 8 bits (1 octet). Le pointeur de pile indique l'emplacement à partir duquel la valeur suivante doit être supprimée de la pile. Lorsqu'une valeur est poussée sur la pile, la valeur de SP est incrémentée, puis la valeur est stockée à l'emplacement mémoire résultant. Lorsqu'une valeur est extraite de la pile, la valeur est renvoyée à partir de l'emplacement de mémoire indiqué par SP, puis la valeur de SP est décrémentée.
Cet ordre de fonctionnement est important. Le SP sera initialisé à 07h lorsque le 8051 sera initialisé. Si une valeur est poussée sur la pile en même temps, la valeur sera stockée dans l'adresse RAM interne 08h car le 8051 incrémentera d'abord la valeur de SP (de 07h à 08h) puis stockera la valeur poussée dans cette mémoire adresse (08h). SP est modifié directement par le 8051 par six instructions: PUSH, POP, ACALL, LCALL, RET et RETI.
Espace ROM en 8051
Certains membres de la famille de 8051 n'ont que 4 Ko de ROM sur puce (par exemple 8751, AT8951); certains ont 8K ROM comme AT89C52, et il y a des membres de la famille avec 32K octets et 64K octets de ROM sur puce tels que Dallas Semiconductor. Le point à retenir est qu'aucun membre de la famille 8051 ne peut accéder à plus de 64K octets d'opcode puisque le compteur de programme en 8051 est un registre 16 bits (adresse 0000 à FFFF).
Le premier emplacement de la ROM de programme à l'intérieur du 8051 a l'adresse 0000H, tandis que le dernier emplacement peut être différent en fonction de la taille de la ROM sur la puce. Parmi les 8051 membres de la famille, AT8951 a $ k octets de ROM sur puce ayant une adresse mémoire de 0000 (premier emplacement) à 0FFFH (dernier emplacement).
![](https://assets.edu.lat/embedded_systems/images/rom_space.jpg)
8051 bits de drapeau et registre PSW
Le registre de mot d'état du programme (PSW) est un registre à 8 bits, également appelé flag register. Il a une largeur de 8 bits, mais seulement 6 bits sont utilisés. Les deux bits inutilisés sontuser-defined flags. Quatre des drapeaux sont appelésconditional flags, ce qui signifie qu'ils indiquent une condition qui se produit après l'exécution d'une instruction. Ces quatre sontCY (Porter), AC (port auxiliaire), P (parité), et OV(débordement). Les bits RS0 et RS1 permettent de changer les registres de banque. La figure suivante montre le registre des mots d'état du programme.
Le registre PSW contient les bits d'état qui reflètent l'état actuel de la CPU.
CY | Californie | F0 | RS1 | RS0 | VO | - | P |
---|
CY | PSW.7 | Porter un drapeau |
AC | PSW.6 | Drapeau de transport auxiliaire |
F0 | PSW.5 | L'indicateur 0 est disponible pour l'utilisateur à des fins générales. |
RS1 | PSW.4 | Enregistrer le bit 1 du sélecteur de banque |
RS0 | PSW.3 | Enregistrer le bit 0 du sélecteur de banque |
VO | PSW.2 | Indicateur de débordement |
- | PSW.1 | FLAG définissable par l'utilisateur |
P | PSW.0 | DRAPEAU de parité. Activé / effacé par le matériel pendant le cycle d'instructions pour indiquer un nombre pair / impair de 1 bit dans l'accumulateur. |
Nous pouvons sélectionner le bit de banque de registres correspondant à l'aide des bits RS0 et RS1.
RS1 | RS2 | Enregistrer la banque | Adresse |
---|---|---|---|
0 | 0 | 0 | 00H-07H |
0 | 1 | 1 | 08H-0FH |
1 | 0 | 2 | 10H-17H |
1 | 1 | 3 | 18H-1FH |
CY, the carry flag- Ce drapeau de retenue est positionné (1) chaque fois qu'il y a une exécution à partir du bit D7. Il est affecté après une opération d'addition ou de soustraction de 8 bits. Il peut également être remis à 1 ou 0 directement par une instruction telle que "SETB C" et "CLR C" où "SETB" représente le report de bit défini et "CLR" représente le report d'effacement.
AC, auxiliary carry flag- S'il y a un report de D3 et D4 pendant une opération ADD ou SUB, le bit AC est mis à 1; sinon, il est effacé. Il est utilisé pour l'instruction d'effectuer une arithmétique décimale codée en binaire.
P, the parity flag- L'indicateur de parité représente le nombre de 1 dans le registre de l'accumulateur uniquement. Si le registre A contient un nombre impair de 1, alors P = 1; et pour un nombre pair de 1, P = 0.
OV, the overflow flag- Cet indicateur est mis à 1 chaque fois que le résultat d'une opération de nombre signé est trop grand, provoquant le débordement du bit de poids fort dans le bit de signe. Il est utilisé uniquement pour détecter les erreurs dans les opérations arithmétiques signées.
Exemple
Afficher l'état des indicateurs CY, AC et P après l'ajout de 9CH et 64H dans l'instruction suivante.
MOV A, # 9CH
AJOUTER A, # 64H
Solution: 9C 10011100
+64 01100100
100 00000000
CY = 1 since there is a carry beyond D7 bit
AC = 0 since there is a carry from D3 to D4
P = 0 because the accumulator has even number of 1's