Les Instructions Du 8051: Booleen
Les Instructions Du 8051: Booleen
Les Instructions Du 8051: Booleen
---------------------------------------------------------------------------------------------------------------------
Comme les microprocesseurs plus classiques le 8051 possède des instructions que l'on peut
classer en:
- Instructions de transfert de données
- arithmétiques et logiques
- de saut de séquences
Il se distingue par des instructions de gestion de bit associées à un PROCESSEUR
BOOLEEN .
Les cases mémoire internes ( de 00 à 7F et dans le SFR) jouent un rôle privilègié. La
plupart des opérations ne s'exécutent qu'entre elles.
L'échange entre l'accumulateur et ces cases est direct et rapide (1µs) mais les cases
Rn ne s'échangent pas entre elles directement l'instruction :
MOV R2,R4 n'existe pas . ( mais MOV 02,04 qui transfert le contenu de la case 02
(donc R2) dans la case 04 (donc R4) existe . Il y a une différence entre ces deux notations car
l’adresse de Rx n’est connue que si la banque utilisée est précisée.
Il existe bien sûr des instructions de chargement immédiat de toutes ces positions
MOV r,#n ou r est une case mémoire et n un octet , mais il n'y a pas de
chargement immédiat sur 16 bits (Le stack n'a que 8 bits car la pile est localisée
dans la RAM interne ) sauf pour le pointeur DPTR :
Les échanges avec la RAM extérieure ne se font que par l'intermédiaire de l'accumulateur.
Les instructions correspondantes ont pour mnémonique MOVX
Il est prévu également un adressage par pages de 256 octets qui utilise les registres R0 et R1.
L'adresse présentée sur le bus ne contient que 8 bits A7--A0 (Le contenu de R0 ou R1) . L’octet haut
de l’adresse est présenté sur P2 par une instruction de transfert préalable.
Exemple Supposons que R0 contienne 45H et que R4 contienne A0 Pour envoyer le contenu de
l'accumulateur dans la case 0A045H il est possible d'exécuter le programme suivant:
MOV P2,R4 ; Présentation de A0 sur P2
MOVX @R0,A ; Le contenu de R0 soit 45H est présenté sur les fils A0 A7 du bus de
données (PO) et un signal d’écriture WR est activé.
L'instruction MOV 45H,A ne convient pas car WR n'est pas activé .(Accès à une mémoire
interne ).
Il est possible également de lire la mémoire programme. grâce aux instructions MOVC.
L’accès est toujours indirect:
--------------------------------------------------------- 11 ----------------------------------------------------------
Le microcontroleur 8051
---------------------------------------------------------------------------------------------------------------------
MOVC A,@A,DPTR charge dans A la case mémoire dont l’adresse qui a pour valeur
(DPTR)+(A)
Exemple Si (DPTR)=3467H
MOV A,#12H ;12H dans A
puis MOVC A,@A,DPTR ;charge dans A le contenu de la case d'adresse
3467H+12H=3479H
Le contenu de A au départ est un octet non signé
Le compteur programme lui même est utilisé comme index mémoire d'adresse (Contenu
de PC après lecture de l'instruction c'est à dire (PC+1)+(Contenu initial de
A considéré comme un octet non signé).
M UL AB multiplie les octets A et B et transfert le résultat sur 16 bits dans les deux registres
B(MSB) et A (LSB)
DIV AB divise l’octet A par l’octet B ,le quotient est chargé dans A et le reste dans B
Instructions de Saut
On peut classer dans cette catégorie les sauts proprement dits et les appels à sous
programme.
Le saut inconditionnel peut être direct lorsque l'on en précise en clair l'adresse cible, sur
8 ou 16 bits:
Le saut sur 16 bits (saut long,) est noté LJMP ou LCALL pour un appel long de sous
programme. Ce sont des instructions de 3 octets :
Le saut court SJMP ne fait intervenir qu'une adresse de 8 bits ou plutôt un déplacement
signé (de -128 à +127) La longueur maximale du saut est 128 .
--------------------------------------------------------- 12 ----------------------------------------------------------
Le microcontroleur 8051
---------------------------------------------------------------------------------------------------------------------
AJMP et ACALL sont des sauts très particuliers , ils ont lieu la page de 2kO ou se trouve
le compteur programme .Les 5 bits de plus fort poids de l'adresse sont conservés. Les 3 bits A10
A9 A8 de l'adresse cible sont intégrés dans l'octet de code qui est de la forme a10-a9-a8-00001
(pour AJMP) ,les 8 autres A7--A0 constituent le deuxième octet de l'instruction.
Pour un appel de sous programme l'instruction CALL est admise , c'est en fait une ACALL .
Exemple Le compteur programme contient A000 L'instruction ayant pour code complet:
A000 E1 D7
provoque le saut en A7D7 ,en effet le premier octet E1 s'écrit en binaire 11100001 dont les
3 premiers bits 111 sont les bits A10 A9 A8 de l'adresse cible soit pour cette dernière
10100 111 11010111
-------- ---- ------------
A15-11 A10-8 D7H
JB Bit,Adrs
le saut a lieu si le bit désigné est à 1 sinon l'instruction suivante est exécutée..
:
JBC Bit,Adrss
le saut qui a lieu si le bit est à 1 et provoque aussi sa remise à zéro.
Les instructions JZ et JNZ ne comportent que 2 octets ,le saut est donc limité à ±127 .
Exemple Le programme suivant fait appel à une triple boucle pour réaliser un retard .Il est présenté
sous forme d’un sous programme débutant à une adresse DELAY et se terminant par un RET
Pour cet exemple la durée est maximale car la décrémentation de 0 donne 255 , chaque boucle est donc
3
exécutée 256 fois ce qui conduit à une durée totale de l’ordre de 256
Il existe des instructions de saut conditionnel mieux adaptées à la réalisation de boucles de ce type.
DJNZ Rx,Adresse
DJNZ mémoire ,adresse
--------------------------------------------------------- 13 ----------------------------------------------------------
Le microcontroleur 8051
---------------------------------------------------------------------------------------------------------------------
Retard 10xR7 mS
DELAY:R6,#19
S1:MOV R5,#0
DJNZ R5,$
DJNZ R6,S1
DJNZ R7,DELAY
RET
Exemple CJNE A,P1,SUITE saute …à l'adresse du label SUITE si A est différent du contenu du port P1
Cette instruction permet indirectement des sauts en fonction du signe ,en effet le bit de
retenue Carry est mis à 1 si Case1 est inférieur à Case2 sinon il est mis à 0
--------------------------------------------------------- 14 ----------------------------------------------------------
Le microcontroleur 8051
---------------------------------------------------------------------------------------------------------------------
Le processeur booléen
Il utilise un accumulateur Booléen qui est le bit C réservé normalement aux retenues (le bit
Carry ) Les instructions AND OR CPL SET (mise à 1) s'effectuent sur C ou des bits désignés par
leur adresse de bit ou symbole . Ces bits peuvent être des bits dans la zone adressable par bits ou
dans les case du sfr d'adresse multiple de 8 , par exemple P1.6 , le bit F0 de PSW est également
souvent utilisé.
Exemple CLR C
CLR P1.5 mise à 0 du bit 5 du port P1
SET 41 mise à 1 du bit d'adresse 41 qui est le bit 1 de la case d'adresse 25H
Il existe également des instructions de saut conditionnel associées à l'état d'un bit, elles ont
été citées plus haut. Ce sont toujours des sauts relatifs courts (±127)
P equ P1.1
LED equ P1.4
Le processeur boolèen est idéal pour programmer une expression logique combinatoire .
Par exemple pour :
A=(p+q)r+w./p (/p étant le complément de p )
A peut être calculé à l'aide de l'organigramme ci contre :
(A R P Q W étant des bits préalablement définis )
Soit :
TESTR: JB R TESTW
TEST1P: JNB P VAUT1
TESTQ: JNB Q VAUT1
TESTW : JB W,VAUT0
TESTP JB P,VAUT0
VAUT1: SETB A
SJMP FIN:
VAUT0: CLR A
FIN
--------------------------------------------------------- 15 ----------------------------------------------------------