Istruzioni del microprocessore 80C51

Materie:Appunti
Categoria:Sistemi

Voto:

1.5 (2)
Download:100
Data:22.03.2005
Numero di pagine:23
Formato di file:.doc (Microsoft Word)
Download   Anteprima
istruzioni-microprocessore-80c51_1.zip (Dimensione: 56.54 Kb)
readme.txt     59 Bytes
trucheck.it_istruzioni-del-microprocessore-80c51.doc     536.5 Kb



Testo

Istruzioni 8051
• A - Accumulatore (Registro "A")
• AB - Tra l'Accumulatore ed il registro "B"
• DPTR - Data Pointer
• C - Carri bit
• Rn - Registro (R7-R0)del banco di registri "R" attualmente selezionato
• @Ri - Indirizzamento indiretto tramite un registro R (R0 o R1) nella RAm interna da 0 a 255.
• @DPTR - Indirizzamento diretto tramite DPTR
• @A+DPTR - Indirizzamento indiretto tramite la somma di DPTR piu' "A"
• @A+PC - Indirizzamento indiretto tramite la somma di PC piu' "A"
• iram addr - Indirizzo della RAM interna
• #data - Indirizzamento immediato
• bit addr -indirizzo del bit
• /bit addr - indirizzo del bit (prendi il bit negato)
• reladdr - Indirizzo relativo (da +128 a -127)
• page i - pagina i (0 -7)
• code addr - Indirizzo di programma
ISTRUZIONI ARITMETICHE
• ADD, ADDC: Somma l'Accumulatore (con il riporto)
• DA: Aggiusta la parte decimale
• DEC: Decrementa il registro
• DIV: Dividi l'Accumulatore per il registro B
• INC: Incrementa il registro
• MUL: Moltiplica l'Accumulatore per il registro B
• SUBB: Sottrai dall'Accumulatore con il prestito
ADD, ADDC
Istruzione:
ADD, ADDC
Funzione:
Somma l'Accumulatore, Somma l'Accumulatore con riporto
Sintassi:
ADD A,operando
ADDC A,operando
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ADD A,#data
0x24
2
1
C, AC, OV
ADD A,iram addr
0x25
2
1
C, AC, OV
ADD A,@R0
0x26
1
1
C, AC, OV
ADD A,@R1
0x27
1
1
C, AC, OV
ADD A,R0
0x28
1
1
C, AC, OV
ADD A,R1
0x29
1
1
C, AC, OV
ADD A,R2
0x2A
1
1
C, AC, OV
ADD A,R3
0x2B
1
1
C, AC, OV
ADD A,R4
0x2C
1
1
C, AC, OV
ADD A,R5
0x2D
1
1
C, AC, OV
ADD A,R6
0x2E
1
1
C, AC, OV
ADD A,R7
0x2F
1
1
C, AC, OV
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ADDC A,#data
0x34
2
1
C, AC, OV
ADDC A,iram addr
0x35
2
1
C, AC, OV
ADDC A,@R0
0x36
1
1
C, AC, OV
ADDC A,@R1
0x37
1
1
C, AC, OV
ADDC A,R0
0x38
1
1
C, AC, OV
ADDC A,R1
0x39
1
1
C, AC, OV
ADDC A,R2
0x3A
1
1
C, AC, OV
ADDC A,R3
0x3B
1
1
C, AC, OV
ADDC A,R4
0x3C
1
1
C, AC, OV
ADDC A,R5
0x3D
1
1
C, AC, OV
ADDC A,R6
0x3E
1
1
C, AC, OV
ADDC A,R7
0x3F
1
1
C, AC, OV
Descrizione: ADD e ADC sommano entrambi il valore operando all'Accumulatore e mettono il risultato nell'Accumulatore stesso. Il valore dell'operando non viene modificato. ADD e ADC funzionano nella stessa maniera eccetto il fatto che ADC tiene conto anche del riporto (Carry Flag).
Il bit Carry (C) e'settato se c'e' un riporto del bit 7. In altre parole, se il valore della somma senza segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) supera il valore di 255 il bit C e' settato altrimenti resettato.
Il bit Auxillary Carry (AC) e' settato se c'e' un riporto del bit 3. In altre parole, se il valore della somma senza segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) supera il valore di 15 il bit AC e' settato altrimenti resettato.
Il bit Overflow (OV) e' settato se il bit 6 o il bit 7 hanno il riporto, ma non entrambi. In altri termini, se se il valore della somma con segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) va fuori del range (da -128 a +127) il bit OV e' settato altrimenti resettato.
DA
Istruzione:
DA
Funzione:
Aggiusta il valore Decimale dell'Accumulatore
Sintassi:
DA A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
DA
0xD4
1
1
C
Descrizione: DA aggiusta il contenuto dell'Accumulatore al corrispondente numero BCD (Binary Coded Decimal) dopo che due numeri BCD sono stati addizionati con ADD o ADDC. Se il bit C e' settato o se il valore del nibble meno significativo supera il valore 9, 0x06 viene aggiunto all'Accumulatore. Se il bit C era gia' da uno prima dell' inizio dell'istruzione oppure 0x06 era gia' stato addizionato nella prima fase, 0x60 viene aggiunto all'Accumulatore.
Il bit Carry(C) e' settato se il risultato finale supera 0x99, altrimenti e' resettato.
DEC
Istruzione:
DEC
Funzione:
Decrementa il Registro
Sintassi:
DEC registro
Istruzione
OpCode
N.Byte
N.Cicli
Flag
DEC A
0x14
1
1
Inv
DEC iram addr
0x15
2
1
Inv
DEC @R0
0x16
1
1
Inv
DEC @R1
0x17
1
1
Inv
DEC R0
0x18
1
1
Inv
DEC R1
0x19
1
1
Inv
DEC R2
0x1A
1
1
Inv
DEC R3
0x1B
1
1
Inv
DEC R4
0x1C
1
1
Inv
DEC R5
0x1D
1
1
Inv
DEC R6
0x1E
1
1
Inv
DEC R7
0x1F
1
1
Inv
Descrizione: DEC decrementa il valore del registro di 1. Se il valore iniziale del registro e' zero, esso sara' portato a 255 (0xFF esadecimale). Nota: Il bit C non viene settato nel passaggio da 0 a 255 (rolls over).
DIV
Istruzione:
DIV
Funzione:
Divide l'Accumulatore per B
Sintassi:
DIV AB
Istruzione
OpCode
N.Byte
N.Cicli
Flag
DIV AB
0x84
1
1
C, OV
Descrizione: Divide il valore senza segno dell'Accumulatore per il valore senza segno del registro "B". Il quoziente della divisione viene posto nell'Accumulatore ed il resto in "B".
Il bit Carry (C) e' sempre azzerato.
Il bit Overflow (OV) e' settato se viene tentata una divisione per zero, altrimenti e' resettato.
INC
Istruzione:
INC
Funzione:
Incrementa il Registro
Sintassi:
INC registro
Istruzione
OpCode
N.Byte
N.Cicli
Flag
INC A
0x04
1
1
Inv
INC iram addr
0x05
2
1
Inv
INC @R0
0x06
1
1
Inv
INC @R1
0x07
1
1
Inv
INC R0
0x08
1
1
Inv
INC R1
0x09
1
1
Inv
INC R2
0x0A
1
1
Inv
INC R3
0x0B
1
1
Inv
INC R4
0x0C
1
1
Inv
INC R5
0x0D
1
1
Inv
INC R6
0x0E
1
1
Inv
INC R7
0x0F
1
1
Inv
INC DPTR
0xA3
1
2
Inv
Descrizione: INC incrementa il valore del registro di 1. Se il valore inizialedel registro e' pari a 255 (0xFF esadecimale) tale incremento lo portera' a zero. Nota: il bit C non viene settato dal passaggio da 255 a 0 (rolls over). Nel caso di "INC DPTR", viene incrementato il valore a 2 byte di DPTR come un intero senza segno. Se il valore iniziale di DPTR e' 65535 (0xFFFF esadecimale) l'incremento portera' DPTR a zero. Anche in questo caso il bit C non viene settato.
MUL
Istruzione:
MUL
Funzione:
Moltiplica l'Accumulatore per B
Sintassi:
MUL AB
Istruzione
OpCode
N.Byte
N.Cicli
Flag
MUL AB
0xA4
1
4
C, OV
Descrizione: Moltiplica il valore senza segno dell'Accumulatore per il valore senza segno del registro "B". Il byte piu' significativo del risultato e' posto nell'Accumullatore e quello meno significativo in B.
Il bit Carry (C) e sempre azzerato.
Il bit Overflow (OV) e' settato se il risultato dell'operazione e' maggiore di 255, altrimenti e' resettato.
SUBB
Istruzione:
SUBB
Funzione:
Sottrai dall'Accumulatore con il prestito
Sintassi:
SUBB A,operando
Istruzione
OpCode
N.Byte
N.Cicli
Flag
SUBB A,#data
0x94
2
1
C, AC, OV
SUBB A,iram addr
0x95
2
1
C, AC, OV
SUBB A,@R0
0x96
1
1
C, AC, OV
SUBB A,@R1
0x97
1
1
C, AC, OV
SUBB A,R0
0x98
1
1
C, AC, OV
SUBB A,R1
0x99
1
1
C, AC, OV
SUBB A,R2
0x9A
1
1
C, AC, OV
SUBB A,R3
0x9B
1
1
C, AC, OV
SUBB A,R4
0x9C
1
1
C, AC, OV
SUBB A,R5
0x9D
1
1
C, AC, OV
SUBB A,R6
0x9E
1
1
C, AC, OV
SUBB A,R7
0x9F
1
1
C, AC, OV
Descrizione: SUBB sottrae il valore dell'operando dal valore dell'Accumulatore, lasciando il risultato nell'Accumulatore stesso. Il valore dell'operando non viene modificato.
Il bit Carry (C) viene settato se e' stato richiesto il prestito per il bit 7, altrimenti e' resettato. In altre parole, se il valore da sottrarre e' maggiore dell'Accumulatore il bit C e' settato.
Il bit Auxillary Carry (AC) e' settato se il prestito e' richiesto dal bit 3. In altre parole, il bit e' settato se il nibble meno significato del valore da sottrarre e' stato piu' alto del nibble meno significativo dell'Accumulatore.
Il bit Overflow (OV) e' settato se il prestito e' stato richiesto dal bit 6 o dal bit 7, ma non da entrambi. In altri termini, il bit OV e' settato se la sottrazione di due byte con segno ha dato come risultato un valore fuori del range (da -128 a +127), altrimenti e' resettato.
ISTRUZIONI LOGICHE
• ANL: AND logico
• CLR: Azzera il registro
• CPL: Complementa il registro
• ORL: OR logico
• RL: Ruota l'accumulatore a sinistra
• RLC: Ruota l'Accumulatore a sinistra attraverso il Carry
• RR: Ruota l'accumulatore a destra
• RRC: Ruota l'Accumulatore a destra attraverso il Carry
• SWAP: Scambia i nibble dell'Accumulatore
• XRL: OR esclusivo logico
ANL
Istruzione:
ANL
Funzione:
AND a bit
Sintassi:
ANL Operando 1, Operando 2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ANL iram addr,A
0x52
2
1
Inv
ANL iram addr,#data
0x53
3
2
Inv
ANL A,#data
0x54
2
1
Inv
ANL A,iram addr
0x55
2
1
Inv
ANL A,@R0
0x56
1
1
Inv
ANL A,@R1
0x57
1
1
Inv
ANL A,R0
0x58
1
1
Inv
ANL A,R1
0x59
1
1
Inv
ANL A,R2
0x5A
1
1
Inv
ANL A,R3
0x5B
1
1
Inv
ANL A,R4
0x5C
1
1
Inv
ANL A,R5
0x5D
1
1
Inv
ANL A,R6
0x5E
1
1
Inv
ANL A,R7
0x5F
1
1
Inv
Descrizione: ANL esegue l'operazione di "AND" bit a bit tra l'operando 1 e l'operando 2. Il risultato viene memorizzato nell'operando 1. Il valore dell'operando 2 non viene modificato. L'AND logico compara ogni bit del primo operando con il bit corrispondente del secondo e viene settato solo e solo se entrambi i bit erano ad uno, altrimenti viene resettato.
CLR
Istruzione:
CLR
Funzione:
Pone a zero il Registro
Sintassi:
CLR A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
CLR A
0xE4
1
1
Inv
Descrizione: CLR A pone a zero tutti i bit dell'Accumulatore.
CPL
Istruzione:
CPL
Funzione:
Complementa il Registro
Sintassi:
CPL A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
CPL A
0xF4
1
1
Inv
Descrizione: CPL A complementa l'Accumulatore
ORL
Istruzione:
ORL
Funzione:
OR a bit
Sintassi:
ORL Operando1,Operando2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ORL iram addr,A
0x42
2
1
Inv
ORL iram addr,#data
0x43
3
2
Inv
ORL A,#data
0x44
2
1
Inv
ORL A,iram addr
0x45
2
1
Inv
ORL A,@R0
0x46
1
1
Inv
ORL A,@R1
0x47
1
1
Inv
ORL A,R0
0x48
1
1
Inv
ORL A,R1
0x49
1
1
Inv
ORL A,R2
0x4A
1
1
Inv
ORL A,R3
0x4B
1
1
Inv
ORL A,R4
0x4C
1
1
Inv
ORL A,R5
0x4D
1
1
Inv
ORL A,R6
0x4E
1
1
Inv
ORL A,R7
0x4F
1
1
Inv
Descrizione: ORL esegue l'operazione di "OR" bit a bit tra l'operando 1 e l'operando 2. Il risultato viene memorizzato nell'operando 1. Il valore dell'operando 2 non viene modificato. L'OR logico compara ogni bit del primo operando con il bit corrispondente del secondo e viene resettato se tutti e due bit erano ad zero, altrimenti viene settato.
RL
Istruzione:
RL
Funzione:
Ruota l'Accumulatore a sinistra
Sintassi:
RL A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RL A
0x23
1
1
C
Descrizione: Esegue lo shift dei bit dell'Accumulatore a sinistra. Il bit piu' a sinistra (bit 7) dell'Accumulatore e' caricato nel bit piu' a destra (bit 0).
RLC
Istruzione:
RLC
Funzione:
Ruota l'Accumulatore a sinistra attraverso il carry
Sintassi:
RLC A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RLC A
0x33
1
1
C
Descrizione: Esegue lo shift dei bit dell'Accumulatore a sinistra. Il bit piu' a sinistra (bit 7) dell'Accumulatore viene caricato nel Carry Flag e il valore originale del Carry e' caricato nel bit piu' a destra (bit 0). Questa funzione e' usata per effettuare la motiplicazione veloce per due.
RR
Istruzione:
RR
Funzione:
Ruota l'Accumulatore a edestra
Sintassi:
RR A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RR A
0x03
1
1
Inv
Descrizione: Esegue lo shift a destra dei bit dell'Accumulatore. Il bit piu' a destra (bit 0) dell'Accumulatore e' caricato nel bit piu' a sinistra (bit 7).
RRC
Istruzione:
RRC
Funzione:
Ruota l'Accumulatore a destra attraverso il Carry
Sintassi:
RRC A
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RRC A
0x13
1
1
C
Descrizione: Esegue lo shift dei bit dell'Accumulatore a destra. Il bit piu' a destra (bit 0) dell'Accumulatore e' caricato nel Carry Flag e il valore originale del Carry e' caricato nel bit piu' a sinistra (bit 7). Questa funzione e' usata per dividere velocemente per due.
XRL
Istruzione:
XRL
Funzione:
OR esclusivo a bit
Sintassi:
XRL Operando1,Operando2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
XRL iram addr,A
0x62
2
1
Inv
XRL iram addr,#data
0x63
3
2
Inv
XRL A,#data
0x64
2
1
Inv
XRL A,iram addr
0x65
2
1
Inv
XRL A,@R0
0x66
1
1
Inv
XRL A,@R1
0x67
1
1
Inv
XRL A,R0
0x68
1
1
Inv
XRL A,R1
0x69
1
1
Inv
XRL A,R2
0x6A
1
1
Inv
XRL A,R3
0x6B
1
1
Inv
XRL A,R4
0x6C
1
1
Inv
XRL A,R5
0x6D
1
1
Inv
XRL A,R6
0x6E
1
1
Inv
XRL A,R7
0x6F
1
1
Inv
Descrizione: XRL esegue l'OR esclusivo "XOR" bit a bit tra l'operando 1 e l'operando 2, lasciando il risultato nell'operando 1. Il valore dell'operando 2 non viene modificato. Lo XOR logico compara i bit dell'operando 1 con i corrispondenti dell'operando 2 e setta il bit corrispondente se essi sono diversi altrimenti lo resetta.
ISTRUZIONI DI TRASFERIMENTO DATI
• MOV: Trasferisci un byte
• MOVC: Trasferisci un byte della memoria programma
• MOVX: Trasferisci un byte della memoria estesa
• POP: Prendi l'Accumulatore dallo stack
• PUSH: Metti l'accumulatore nello stack
• XCH: Scambia i byte
• XCHD: Scambia i digit
MOV
Istruzione:
MOV
Funzione:
Trasferisci un byte di Memoria
Sintassi:
MOV Operando1,Operando2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
MOV @R0,#data
0x76
2
1
Inv
MOV @R1,#data
0x77
2
1
Inv
MOV @R0,A
0xF6
1
1
Inv
MOV @R1,A
0xF7
1
1
Inv
MOV @R0,iram addr
0xA6
2
2
Inv
MOV @R1,iram addr
0xA7
2
2
Inv
MOV A,#data
0x74
2
1
Inv
MOV A,@R0
0xE6
1
1
Inv
MOV A,@R1
0xE7
1
1
Inv
MOV A,R0
0xE8
1
1
Inv
MOV A,R1
0xE9
1
1
Inv
MOV A,R2
0xEA
1
1
Inv
MOV A,R3
0xEB
1
1
Inv
MOV A,R4
0xEC
1
1
Inv
MOV A,R5
0xED
1
1
Inv
MOV A,R6
0xEE
1
1
Inv
MOV A,R7
0xEF
1
1
Inv
MOV A,iram addr
0xE5
2
1
Inv
MOV DPTR,#data16
0x90
3
2
Inv
MOV R0,#data
0x78
2
1
Inv
MOV R1,#data
0x79
2
1
Inv
MOV R2,#data
0x7A
2
1
Inv
MOV R3,#data
0x7B
2
1
Inv
MOV R4,#data
0x7C
2
1
Inv
MOV R5,#data
0x7D
2
1
Inv
MOV R6,#data
0x7E
2
1
Inv
MOV R7,#data
0x7F
2
1
Inv
MOV R0,A
0xF8
1
1
Inv
MOV R1,A
0xF9
1
1
Inv
MOV R2,A
0xFA
1
1
Inv
MOV R3,A
0xFB
1
1
Inv
MOV R4,A
0xFC
1
1
Inv
MOV R5,A
0xFD
1
1
Inv
MOV R6,A
0xFE
1
1
Inv
MOV R7,A
0xFF
1
1
Inv
MOV R0,iram addr
0xA8
2
2
Inv
MOV R1,iram addr
0xA9
2
2
Inv
MOV R2,iram addr
0xAA
2
2
Inv
MOV R3,iram addr
0xAB
2
2
Inv
MOV R4,iram addr
0xAC
2
2
Inv
MOV R5,iram addr
0xAD
2
2
Inv
MOV R6,iram addr
0xAE
2
2
Inv
MOV R7,iram addr
0xAF
2
2
Inv
MOV bit addr,C
0x92
2
2
Inv
MOV iram addr,#data
0x75
3
2
Inv
MOV iram addr,@R0
0x86
2
2
Inv
MOV iram addr,@R1
0x87
2
2
Inv
MOV iram addr,R0
0x88
2
2
Inv
MOV iram addr,R1
0x89
2
2
Inv
MOV iram addr,R2
0x8A
2
2
Inv
MOV iram addr,R3
0x8B
2
2
Inv
MOV iram addr,R4
0x8C
2
2
Inv
MOV iram addr,R5
0x8D
2
2
Inv
MOV iram addr,R6
0x8E
2
2
Inv
MOV iram addr,R7
0x8F
2
2
Inv
MOV iram addr,A
0xF5
2
1
Inv
MOV iram addr,iram addr
0x85
3
1
Inv
Descrizione: MOV copia il valore dell'Operando 2 nell'Operando 1. Il valore dell'Operando 2 rimane inalterato. Ambedue gli operandi devono risiedere nella RAM interna. Nessun flag viene modificato a meno che l'istruzione non trasferisce il valore nel registro PSW (che contiene esso stesso i flag).
** Nota: Nel caso di "MOV iram addr,iram addr" il trasferimento viene effettuato all'inverso delle altre operazioni di mov. Per esempio l'istruzione 0x85, 0x20, 0x20 va interpretata come:
"Carica il contenuto della locazione 0x20 nella locazione 0x50" e non il viceversa come si e' portati a presumere.
MOVC
Istruzione:
MOVC
Funzione:
Trasferisci il byte di codice nell'Accumulatore
Sintassi:
MOVC A,@A+Registro
Istruzione
OpCode
N.Byte
N.Cicli
Flag
MOVC A,@A+DPTR
0x93
1
2
Inv
MOVC A,@A+PC
0x83
1
1
Inv
Descrizione: MOVC trasferisce un byte di memoria programma nell'Accumulatore. L'indirizzo del byte da trasferire e' calcolato sommando il valore dell'Accumulatore o con DPTR o con il PC (Program Counter). Nel secondo caso il valore del Program Counter viene incrementato di uno prima di essere usato.
MOVX
Istruzione:
MOVX
Funzione:
Trasferisci i dati alla/dalla memoria esterna (XRAM)
Sintassi:
MOVX Operando1,Operando2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
MOVX @DPTR,A
0xF0
1
2
Inv
MOVX @R0,A
0xF2
1
2
Inv
MOVX @R1,A
0xF3
1
2
Inv
MOVX A,@DPTR
0xE0
1
2
Inv
MOVX A,@R0
0xE2
1
2
Inv
MOVX A,@R1
0xE3
1
2
Inv
Descrizione: MOVX trasferisce un byte alla o dalla memoria esterna dal o all'Accumulatore.
Se l'Operando 1 e' @DPTR, l'Accumulatore e' trasferito nell'indirizzo a 16-bit della memoria esterna indicato da DPTR. Questa istruzione usa entrambe le porte P0 e P2 per trasferire l'indirizzo a 16-bit ed il dato verso l'esterno. Se l'operando 2 e' @DPTR il trasferimento viene eseguito dalla memoria esterna all'Accumulatore.
Se l'Operando 1 e' @R0 o @R1, l'Accumulatore e' trasferito nell'indirizzo a 8-bit della memoria esterna indicata dal registro corrispondente. Questa istruzione usa soltanto la porta P0 per trasferire l'indirizzo a 8-bit ed il dato verso l'esterno. La porta P2 non viene modificata. Se l'operando 2 e' @R0 o @R1 allora il byte viene trasferito dalla memoria esterna all'Accumulatore.
POP
Istruzione:
POP
Funzione:
Prendi il valore dallo Stack
Sintassi:
POP
Istruzione
OpCode
N.Byte
N.Cicli
Flag
POP iram addr
0xD0
2
2
Inv
Descrizione: POP effettua il "pop" dallo stack all'indirizzo iram addr specificato. L'istruzione POP prende il valore contenuto nella RAM interna puntato dallo stack pointer e lo carica nell'indirizzo iram addr. Lo stack pointer viene poi decrementato di uno.
PUSH
Istruzione:
PUSH
Funzione:
Metti il valore nello Stack
Sintassi:
PUSH
Istruzione
OpCode
N.Byte
N.Cicli
Flag
PUSH iram addr
0xC0
2
2
Inv
Descrizione: PUSH effettua l'operazione di "push" del valore specificato da iram addr nello stack. L'istruzione PUSH, prima incrementa il valore dello stack pointer di uno, poi prende il valore contenuto nell'indirizzo iram addr e lo memorizza nella RAM interna all'indirizzo puntato dallo Stack Pointer.
XCH
Istruzione:
XCH
Funzione:
Scambia i byte
Sintassi:
XCH A,Registro
Istruzione
OpCode
N.Byte
N.Cicli
Flag
XCH A,@R0
0xC6
1
1
Inv
XCH A,@R1
0xC7
1
1
Inv
XCH A,R0
0xC8
1
1
Inv
XCH A,R1
0xC9
1
1
Inv
XCH A,R2
0xCA
1
1
Inv
XCH A,R3
0xCB
1
1
Inv
XCH A,R4
0xCC
1
1
Inv
XCH A,R5
0xCD
1
1
Inv
XCH A,R6
0xCE
1
1
Inv
XCH A,R7
0xCF
1
1
Inv
XCH A,iram addr
0xC5
2
1
Inv
Descrizione: L'istruzione scambia il valore dell'Accumulatore con il valore del registro indicato nell'istruzione.
XCHD
Istruzione:
XCHD
Funzione:
Scambia i digit
Sintassi:
XCHD A,[@R0/@R1]
Istruzione
OpCode
N.Byte
N.Cicli
Flag
XCHD A,@R0
0xD6
1
1
Inv
XCHD A,@R1
0xD7
1
1
Inv
Descrizione: Scambia il nibble meno significato dell'Accumulatore con il nibble meno significativo della locazione di RAM interna indirizzata da R0 o R1. Il nibble piu' significativo dei registri non viene modificato.
ISTRUZIONI SU VARIABILI A BIT
• ANL: AND per variabili a bit
• CLR: Azzera il bit
• CPL: Complementa il bit
• JB: Salta se il bit e' a uno
• JBC: Salta se il bit e' a uno e resettalo
• JC: Salta se il Carry e' a uno
• JNB: Salta se il bit non e' a uno
• JNC: Salta se il Carry non e' a uno
• MOV: Trasferisci un bit
• ORL: OR a bit
• SETB: Poni il bit a uno
ANL
Istruzione:
ANL
Funzione:
AND a bit
Sintassi:
ANL C, bit
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ANL C,bit addr
0x82
2
1
C
ANL C,/bit addr
0xB0
2
1
C
Descrizione: Il valore del bit C e' calcolato in AND logico con il bit indirizzato e il risultato viene lasciato in C. Un simbolo "/" davanti al bit indica che verra' preso il suo valore negato. Il valore del bit indirizzato rimane in ogni caso inalterato.
CLR
Istruzione:
CLR
Funzione:
Poni a zero il bit
Sintassi:
CLR bit
Istruzione
OpCode
N.Byte
N.Cicli
Flag
CLR bit addr
0xC2
2
1
Inv
CLR C
0xC3
1
1
C
Descrizione: CLR pone a zero il bit indicato nell'istruzione.
CPL
Istruzione:
CPL
Funzione:
Complementa il bit
Sintassi:
CPL bit
Istruzione
OpCode
N.Byte
N.Cicli
Flag
CPL C
0xB3
1
1
C
CPL bit addr
0xB2
2
1
Inv
Descrizione: CPL complementa il valore del bit indicato nell'istruzione.
JB
Istruzione:
JB
Funzione:
Salta se il bit e' ad uno
Sintassi:
JB bit addr, reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JB bit addr,reladdr
0x20
3
2
Inv
Descrizione: JB salta all'indirizzo indicato da reladdr se il bit indicato da bit addr e' da uno, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JB.
JBC
Istruzione:
JBC
Funzione:
Salta se il bit e' ad uno e resettato
Sintassi:
JB bit addr, reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JBC bit addr,reladdr
0x10
3
2
Inv
Descrizione: JBC salta all'indirizzo indicato da reladdr se il bit indicato da bit addr e' ad uno e prima di saltare resetta il bit di condizione. Se il bit di condizione non e' settato l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JBC.
JC
Istruzione:
JC
Funzione:
Salta se il Carry e' settato
Sintassi:
JC reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JC reladdr
0x40
2
2
Inv
Descrizione: JC salta all'indirizzo indicato da reladdr se il Carry bit e' ad uno, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JC.
JNB
Istruzione:
JNB
Funzione:
Salta se il bit non e' settato
Sintassi:
JNB bit addr,reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JNB bit addr,reladdr
0x30
3
2
Inv
Descrizione: JNB salta all'indirizzo indicato da reladdr se il bit indicato da bit addr non e' settato, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JNB.
JNC
Istruzione:
JNC
Funzione:
Salta se il Carry non e' settato
Sintassi:
JNC reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JNC reladdr
0x50
2
2
Inv
Descrizione: JNC salta all'indirizzo indicato da reladdr se il Carry bit non e' settato, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JNC.
MOV
Istruzione:
MOV
Funzione:
Trasferisci un bit
Sintassi:
MOV bit
Istruzione
OpCode
N.Byte
N.Cicli
Flag
MOV C,bit addr
0xA2
2
1
C
MOV bit addr,C
0x92
2
2
Inv
Descrizione: MOV copia il valore del secondo operando a bit nel primo. Il valore del secondo operando a bit rimane inalterato.
ORL
Istruzione:
ORL
Funzione:
OR a bit
Sintassi:
ORL Operando1,Operando2
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ORL C,bit addr
0x72
2
2
C
ORL C,/bit addr
0xA0
2
1
C
Descrizione: Il valore del bit C e' calcolato in OR logico con il bit indirizzato e il risultato viene lasciato in C. Un simbolo "/" davanti al bit indica che verra' preso il suo valore negato. Il valore del bit indirizzato rimane in ogni caso inalterato.
SETB
Istruzione:
SETB
Funzione:
Setta il Bit
Sintassi:
SETB bit addr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
SETB C
0xD3
1
1
C
SETB bit addr
0xD2
2
1
Inv
Descrizione: Setta il bit specificato
ISTRUZIONI DI SALTO
• ACALL: Chiamata a subroutine con indirizzo assoluto
• AJMP: Salto asssoluto
• CJNE: Compara e salta se non uguale
• DJNZ: Decrementa il registro e salta se il risultato non e' nullo
• JMP: Salta all'indirizzo
• JNZ: Salta se l'Accumulatore non e' nullo
• JZ: Salta se l'Accumulatore e' nullo
• LCALL: Chiamata a subroutine con indirizzo a 16-bit
• LJMP: Salto con indirizzo a 16-bit
• NOP: Nessuna operazione
• RET: Torna da subroutine
• RETI: Torna da interrupt
• SJMP: Salto con indirizzo relativo a 8-bit
ACALL
Istruzione:
ACALL
Funzione:
Chiama una subroutine con salto assoluto in un blocco di 2K
Sintassi:
ACALL code address
Istruzione
OpCode
N.Byte
N.Cicli
Flag
ACALL page0
0x11
2
2
Inv
ACALL page1
0x31
2
2
Inv
ACALL page2
0x51
2
2
Inv
ACALL page3
0x71
2
2
Inv
ACALL page4
0x91
2
2
Inv
ACALL page5
0xB1
2
2
Inv
ACALL page6
0xD1
2
2
Inv
ACALL page7
0xF1
2
2
Inv
Descrizione: ACALL chiama una subroutine senza condizioni all'indirizzo di codice indicato da code address. A questo punto viene salvato nello stack l'indirizzo dell'istruzione che segue ACALL, prima il byte meno significativo e poi quello piu' significativo. Il Program Counter viene caricato con il valore dove risiede la subroutine chiamata.
Il nuovo valore del Program Counter e' calcolato sostituendo il suo byte meno significativo con il secondo byte dell'istruzione ACALL e sostituendo i bit da 0 a 2 del byte piu' significativo del Program Counter con i 3 bit che indicano la pagina ove saltare. I bit da 3 a 7 del byte piu' signficativo del Program Counter restano inalterati.
Poiche' ACALL modifica solo 11 bit del Program Counter, le chiamate possono dirette a routine locate all'interno dello stesso blocco di 2k come il primo byte che segue l'istruzione ACALL.
AJMP
Istruzione:
AJMP
Funzione:
Salto assoluto in un blocco di 2k
Sintassi:
AJMP code address
Istruzione
OpCode
N.Byte
N.Cicli
Flag
AJMP page0
0x01
2
2
Inv
AJMP page1
0x21
2
2
Inv
AJMP page2
0x41
2
2
Inv
AJMP page3
0x61
2
2
Inv
AJMP page4
0x81
2
2
Inv
AJMP page5
0xA1
2
2
Inv
AJMP page6
0xC1
2
2
Inv
AJMP page7
0xE1
2
2
Inv
Descrizione: AJMP salta senza condizioni all'indirizzo di codice indicato da code address.
Il nuovo valore del Program Counter e' calcolato sostituendo il suo byte meno significativo con il secondo byte dell'istruzione AJMP e sostituendo i bit da 0 a 2 del byte piu' significativo del Program Counter con i 3 bit che indicano la pagina ove saltare. I bit da 3 a 7 del byte piu' signficativo del Program Counter restano inalterati.
Poiche' AJMP modifica solo 11 bit del Program Counter, le chiamate possono dirette a routine locate all'interno dello stesso blocco di 2k come il primo byte che segue l'istruzione AJMP.
CJNE
Istruzione:
CJNE
Funzione:
Compara e salta se non uguale
Sintassi:
CJNE Operando1,Operando2,reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
CJNE A,#data,reladdr
0xB4
3
2
C
CJNE A,iram addr,reladdr
0xB5
3
2
C
CJNE @R0,#data,reladdr
0xB6
3
2
C
CJNE @R1,#data,reladdr
0xB7
3
2
C
CJNE R0,#data,reladdr
0xB8
3
2
C
CJNE R1,#data,reladdr
0xB9
3
2
C
CJNE R2,#data,reladdr
0xBA
3
2
C
CJNE R3,#data,reladdr
0xBB
3
2
C
CJNE R4,#data,reladdr
0xBC
3
2
C
CJNE R5,#data,reladdr
0xBD
3
2
C
CJNE R6,#data,reladdr
0xBE
3
2
C
CJNE R7,#data,reladdr
0xBF
3
2
C
Descrizione: CJNE compara il valore dell'operando 1 con quello dell'operando 2 e salta all'indirizzo relativo indicato se essi non sono uguali. In caso contrario, il programma prosegue la sua esecuzione dell'istruzione successiva a quella dell'istruzione CJNE.
Il bit Carry (C) e' settato se l'operando 1 e' inferiore all'operando 2, altrimenti e' resettato.
DJNZ
Istruzione:
DJNZ
Funzione:
Decrementa e salta se il risultato non e' zero
Sintassi:
DJNZ Registro,reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
DJNZ iram addr,reladdr
0xD5
3
2
Inv
DJNZ R0,reladdr
0xD8
2
2
Inv
DJNZ R1,reladdr
0xD9
2
2
Inv
DJNZ R2,reladdr
0xDA
2
2
Inv
DJNZ R3,reladdr
0xDB
2
2
Inv
DJNZ R4,reladdr
0xDC
2
2
Inv
DJNZ R5,reladdr
0xDD
2
2
Inv
DJNZ R6,reladdr
0xDE
2
2
Inv
DJNZ R7,reladdr
0xDF
2
2
Inv
Descrizione: DJNZ decementa il valore del registro di 1. Se il valore iniziale del registro e' 0, l'operazione fara' in modo che esso contenga 255 (0xFF Esadecimale). Se il nuovo valore del Registro non e' zero, il programma saltera' all'indirizzo indicato da relative addr. Se invece il nuovo valore del Registro e' zero, il programma continuera' dall'istruzione che segue l'istruzione di DJNZ.
JMP
Istruzione:
JMP
Funzione:
Salra al Data Pointer piu' l'Accumulatore
Sintassi:
JMP @A+DPTR
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JMP @A+DPTRE
0x73
1
2
Inv
Descrizione: JMP salta senza condizioni all'indirizzo rappresentato dalla somma del valore di DPTR e il valore dell'Accumulatore.
JNZ
Istruzione:
JNZ
Funzione:
Salta se l'Accumulatore non e' nullo
Sintassi:
JNZ reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JNZ reladdr
0x70
2
2
Inv
Descrizione: JNZ salta all'indirizzo indicato da reladdr se l'Accumulatore un qualsiasi valore tranne lo zero. Nell'altro caso, il programma continua con l'istruzione che segue l'istruzione JNZ.
JZ
Istruzione:
JZ
Funzione:
Salta se l'Accumulatore e' nullo
Sintassi:
JNZ reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
JZ reladdr
0x60
2
2
Inv
Descrizione: JZ salta all'indirizzo indicato da reladdr se l'Accumulatore contiene il valore zero. Nell'altro caso, il programma continua con l'istruzione che segue l'istruzione JZ.
LCALL
Istruzione:
LCALL
Funzione:
Chiamata lunga
Sintassi:
LCALL code addr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
LCALL code addr
0x12
3
2
Inv
Descrizione: LCALL chiama una subroutine. Essa incrementa il Program Counter (per puntare all'istruzione seguente) ed effettua il push del PC nello stack (il byte meno significativo prima e poi quello piu' significativo). Il Program Counter viene caricato con il valore a 16-bit corrispondente ai due byte successivi al codice operativo dell'istruzione LCALL.
LJMP
Istruzione:
LJMP
Funzione:
Salto lungo
Sintassi:
LJMP code addr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
LJMP code addr
0x02
3
2
Inv
Descrizione: LJMP salta senza condizioni all'indirizzo specificato da code addr.
NOP
Istruzione:
NOP
Funzione:
Nessuna operazione, attendi
Sintassi:
NOP
Istruzione
OpCode
N.Byte
N.Cicli
Flag
NOP
0x00
1
1
Inv
Descrizione: NOP, come suggerisce anche il nome nonfanulla per la durata di un ciclo macchina. Essa e' generalmente usata per scopi di temporizzazione. Assolutamente, nessun Flag o registro viene alterato.
RET
Istruzione:
RET
Funzione:
Ritorna da Subroutine
Sintassi:
RET
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RET
0x22
1
2
Inv
Descrizione: RET e' usato per tornare da una subroutine percedentemente chiamata da LCALL o da ACALL. l'esecuzione del programma continua dall'indirizzo calcolato prendendo due byte dalla cima dello stack. Prima viene preso il byte piu' significativo e poi quello meno significativo.
RETI
Istruzione:
RETI
Funzione:
Ritorna da Interrupt
Sintassi:
RETI
Istruzione
OpCode
N.Byte
N.Cicli
Flag
RETI
0x32
1
2
Inv
Descrizione: RETI e' usato per ritonare da un routine di servizio di un interrupt. RETI prima abilita tutti gli interrupt di priorita' uguale o inferiore a quella dell'interrupr che si sta terminando. Poi l'esecuzione del programma prosegue all'indirizzo calcolato prendendo due byte dalla cima dello stack. Prima viene preso il byte piu' significativo e poi quello meno significativo.
RETI funziona come RET che viene pero' utilizzato al di fuori delle routine di interrupt.
SJMP
Istruzione:
SJMP
Funzione:
Salto corto
Sintassi:
SJMP reladdr
Istruzione
OpCode
N.Byte
N.Cicli
Flag
SJMP reladdr
0x80
2
2
Inv
Descrizione: SJMP salta senza condizioni all'indirizzo specificato da reladdr. Reladdr deve essere contenuto nel range da -128 a +127 byte dall'istruzione che segue SJMP stesso.
ELENCO ALFABETICO DELLE ISTRUZIONI - 8051
• ACALL: Chiamata a subroutine con indirizzo assoluto
• ADD, ADDC: Somma l'Accumulatore (con il riporto)
• AJMP: Salto asssoluto
• ANL: AND logico
• ANL: AND per variabili a bit
• CJNE: Compara e salta se non uguale
• CLR: Azzera il registro
• CLR: Azzera il bit
• CPL: Complementa il registro
• CPL: Complementa il bit
• DA: Aggiusta la parte decimale
• DEC: Decrementa il registro
• DIV: Dividi l'Accumulatore per il registro B
• DJNZ: Decrementa il registro e salta se il risultato non e' nullo
• INC: Incrementa il registro
• JB: Salta se il bit e' a uno
• JBC: Salta se il bit e' a uno e resettalo
• JC: Salta se il Carry e' a uno
• JMP: Salta all'indirizzo
• JNB: Salta se il bit non e' a uno
• JNC: Salta se il Carry non e' a uno
• JNZ: Salta se l'Accumulatore non e' nullo
• JZ: Salta se l'Accumulatore e' nullo
• LCALL: Chiamata a subroutine con indirizzo a 16-bit
• LJMP: Salto con indirizzo a 16-bit
• MOV: Trasferisci un byte
• MOV: Trasferisci un bit
• MOVC: Trasferisci un byte della memoria programma
• MOVX: Trasferisci un byte della memoria estesa
• MUL: Moltiplica l'Accumulatore per il registro B
• NOP: Nessuna operazione
• ORL: OR logico
• ORL: OR a bit
• POP: Prendi l'Accumulatore dallo stack
• PUSH: Metti l'accumulatore nello stack
• RET: Torna da subroutine
• RETI: Torna da interrupt
• RL: Ruota l'accumulatore a sinistra
• RLC: Ruota l'Accumulatore a sinistra attraverso il Carry
• RR: Ruota l'accumulatore a destra
• RRC: Ruota l'Accumulatore a destra attraverso il Carry
• SETB: Poni il bit ad uno
• SJMP: Salto con indirizzo relativo a 8-bit
• SUBB: Sottrai dall'Accumulatore con il prestito
• SWAP: Scambia i nibble dell'Accumulatore
• XCH: Scambia i byte
• XCHD: Scambia i digit
• XRL: OR esclusivo logico
1
Fabio Classe 5 BN

Esempio