Intel 8051: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
il nome corretto della versione potenziata dall'8052 è 8752, non 8072 |
Nessun oggetto della modifica |
||
Riga 40:
== Programmazione ==
Oltre alla programmazione in linguaggio [[assembler]] nativo, sono disponibili diversi [[compilatore|compilatori]] [[C (linguaggio di programmazione)|C]], completi di estensioni per il controllo dell'allocazione delle variabili nei vari tipi di memoria e per l'accesso alle caratteristiche hardware specifiche dell'8051, come ad esempio i banchi di registri per le variabili a singolo bit. Sono inoltre disponibili compilatori e interpreti di altri linguaggi di alto livello come: [[Forth]], [[BASIC]], [[Pascal (linguaggio)|Pascal]]/[[Object Pascal]], [[PL/M]] e [[Modula 2]].
==Instruction set==
'''Arithmetic Operations'''
{| class="wikitable" border="1"
|-
! Mnemonici
! Descrizione
! Bytes
! Cicli
|-
| ADD A,Rn
| Somma ad A il contenuto del registro Rn
| 1
| 1
|-
| ADD A,direct
| Somma ad A il contenuto della locazione direct
| 2
| 1
|-
| ADD A,@Ri
| Somma ad A il contenuto della locazione puntata da Ri
| 1
| 1
|-
| ADD A,#data
| Somma ad A il dato immediato
| 2
| 1
|-
| ADDC A,Rn
| Somma ad A il contenuto del registro Rn e il CY
| 1
| 1
|-
| ADDC A,direct
| Somma ad A il contenuto della locazione direct e il CY
| 2
| 1
|-
| ADDC A,@Ri
| Somma ad A il contenuto della locazione puntata da Ri e il CY
| 1
| 1
|-
| ADDC A,#data
| Somma ad A il dato immediato e il CY
| 2
| 1
|-
| SUBB A,Rn
| Sottrae da A il contenuto del registro Rn e il CY
| 1
| 1
|-
| SUBB A,direct
| Sottrae da A il contenuto della locazione direct e il CY
| 2
| 1
|-
| SUBB A,@Ri
| Sottrae da A il contenuto della locazione puntata da Ri e il CY
| 1
| 1
|-
| SUBB A,#data
| Sottrae da A il dato immediato e il CY
| 2
| 1
|-
| INC A
| Aumenta di 1 il contenuto di A
| 1
| 1
|-
| INC Rn
| Aumenta di 1 il contenuto del registro Rn
| 1
| 1
|-
| INC direct
| Aumenta di 1 il contenuto della locazione direct
| 2
| 1
|-
| INC @Ri
| Aumenta di 1 il contenuto della locaz. puntata da Ri
| 1
| 1
|-
| DEC A
| Diminuisce di 1 il contenuto di A
| 1
| 1
|-
| DEC Rn
| Diminuisce di 1 il contenuto del registro Rn
| 1
| 1
|-
| DEC direct
| Diminuisce dI 1 il contenuto della locazione direct
| 2
| 1
|-
| DEC @Ri
| Diminuisce di 1 il contenuto della locaz. puntata da Ri
| 1
| 1
|-
| INC DPTR
| Aumenta di 1 il contenuto del registro DPTR
| 1
| 2
|-
| MUL AB
| Moltiplica il contenuto di A per quello di B; la parte bassa del risultato va in A e la parte alta va in B
| 1
| 4
|-
| DIV AB
| Divide il contenuto di A per B; il quoziente va in A e il resto in B
| 1
| 4
|-
| DA A
| Realizza l'aggiustamento decimale del contenuto di A. Utilizzando la rappresentazione in BCD le istruzioni ADD e ADDC debbono essere seguite da DA: ciò assicura che il risultato sia ancora in BCD
| 1
| 1
|}
'''Operazioni Logiche'''
{| class="wikitable" border="1"
|-
! Mnemonici
! Descrizione
! Bytes
! Cicli
|-
| ANL A,Rn
| AND logico tra A e il contenuto del registro Rn
| 1
| 1
|-
| ANL A,direct
| AND logico tra A e il contenuto della locazione direct
| 2
| 1
|-
| ANL A,@Ri
| AND logico tra A e il contenuto della locazione puntata da Ri
| 1
| 1
|-
| ANL A,#data
| AND logico tra A e il dato immediato
| 2
| 1
|-
| ANL direct,A
| AND logico tra il contenuto della locazione direct e dell'ACC; il risultato rimane nella locazione direct
| 2
| 1
|-
| ANL direct,#data
| AND logico tra il contenuto della locazione direct ed il dato; il risultato rimane nella locazione direct
| 3
| 2
|-
| ORL A,Rn
| OR logico tra A e il contenuto del registro Rn
| 1
| 1
|-
| ORL A,direct
| OR logico tra A e il contenuto della locazione direct
| 2
| 1
|-
| ORL A,@Ri
| OR logico tra A e il contenuto della locazione puntata da Ri
| 1
| 1
|-
| ORL A,#data
| OR logico tra A e il dato immediato
| 2
| 1
|-
| ORL direct,A
| OR logico tra il contenuto della locazione direct e dell'ACC; il risultato rimane nella locazione direct
| 2
| 1
|-
| ORL direct,#data
| OR logico tra il contenuto della locazione direct ed il dato immediato; il risultato rimane nella locazione direct
| 3
| 2
|-
| XRL A,Rn
| EX-OR logico tra A e il contenuto del registro Rn
| 1
| 1
|-
| XRL A,direct
| EX-OR logico tra A e il contenuto della locazione direct
| 2
| 1
|-
| XRL A,@Ri
| EX-OR logico tra A e il contenuto della locazione puntata da Ri
| 1
| 1
|-
| XRL A,#data
| EX-OR logico tra A e il dato immediato
| 2
| 1
|-
| XRL direct A
| EX-OR logico tra il contenuto della locazione direct e A, il risultato rimane nella locazione direct
| 2
| 1
|-
| XRL direct,#data
| EX-OR logico tra il contenuto della locazione direct e il dato, il risultato rimane nella locazione direct
| 3
| 2
|-
| CLR A
| Azzera tutti i bit di A
| 1
| 1
|-
| CPL A
| Complementa a 1 (ovvero inverte) tutti i bit di A
| 1
| 1
|-
| RL A
| Ruota di un posto verso sinistra i bit di A
| 1
| 1
|-
| RLC A
| Ruota di un posto verso sinistra i bit di A con riporto al CY
| 1
| 1
|-
| RR A
| Ruota di un posto verso destra i bit di A
| 1
| 1
|-
| RRC A
| Ruota di un posto verso destra i bit di A con riporto al CY
| 1
| 1
|-
| SWAP A
| scambia i due nibble dell’accumulatore
| 1
| 1
|}
'''Operazioni di Trasferimento Dati'''
{| class="wikitable" border="1"
|-
! Mnemonic
! Description
! Bytes
! Cycles
|-
| MOV A,Rn
| Copia in A il contenuto del registro Rn
| 1
| 1
|-
| MOV A,direct
| Copia in A il contenuto della locazione direct
| 2
| 1
|-
| MOV A,@Ri
| Copia in A il contenuto della locazione puntata da Ri
| 1
| 1
|-
| MOV A,#data
| Copia in A il dato immediato
| 2
| 1
|-
| MOV Rn,A
| Copia nel registro Rn il contenuto di A
| 1
| 1
|-
| MOV Rn,direct
| Copia nel registro Rn il contenuto della locazione direct
| 2
| 2
|-
| MOV Rn,#data
| Copia nel registro Rn il dato immediato
| 2
| 1
|-
| MOV direct,A
| Copia nella locazione direct il contenuto di A
| 2
| 1
|-
| MOV direct,Rn
| Copia nella locazione direct il contenuto del registro Rn
| 2
| 2
|-
| MOV direct,direct
| Copia nella locazione direct il contenuto della locazione direct
| 3
| 2
|-
| MOV direct,@Ri
| Copia nella locazione direct il contenuto della locazione puntata da Ri
| 2
| 2
|-
| MOV direct,#data
| Copia nella locazione direct il dato immediato
| 3
| 2
|-
| MOV @Ri,A
| Copia nella locazione puntata da Ri il contenuto di A
| 1
| 1
|-
| MOV @Ri,direct
| Copia nella locazione puntata da Ri il contenuto. della locazione direct
| 2
| 2
|-
| MOV @Ri,#data
| Copia nella locazione puntata da Ri il dato immediato
| 2
| 1
|-
| MOV DPTR,#data16
| Copia in DPTR un dato a 16 bit
| 2
| 1
|-
| MOVC A,@A+DPTR
| Copia in A il contenuto della memoria programma di indirizzo DPTR + A
| 1
| 2
|-
| MOVC A,@A+PC
| Copia in A il contenuto della memoria programma di indirizzo PC + A +1
| 1
| 2
|-
| MOVX A,@Ri
| Copia in A il contenuto della memoria dati esterna puntata da Ri
| 1
| 2
|-
| MOVX A,@DPTR
| Copia in A il contenuto della memoria dati esterna puntata da DPTR
| 1
| 2
|-
| MOVX @Ri,A
| Copia nella locazione di memoria dati esterna puntata da Ri il contenuto di A
| 1
| 2
|-
| MOVX @DPTR,A
| Copia nella locazione di memoria dati esterna puntata da DPTR il contenuto di A
| 1
| 2
|-
| PUSH direct
| Copia nella locazione puntata da SP il contenuto della locazione direct e aumentalo Stack di una unità
| 2
| 2
|-
| POP direct
| Copia nella locazione direct il contenuto della locazione puntata da SP e diminuisce lo Stack di una unità
| 2
| 2
|-
| XCH A,Rn
| Scambia il contenuto di A con quello di Rn
| 1
| 1
|-
| XCH A,direct
| Scambia il contenuto di A con quello della locazione direct
| 2
| 1
|-
| XCH A,@Ri
| Scambia il contenuto di A con quello della locazione puntata da Ri
| 1
| 1
|-
| XCHD A,@Ri
| Scambia il nibble meno significativo di A con il più significativo della locazione puntata da Ri
| 1
| 1
|}
'''Single Bit (Boolean Variable) Operations'''
{| class="wikitable" border="1"
|-
! Mnemonici
! Descrizione
! Bytes
! Cicli
|-
| CLR C
| Azzera il flag CY
| 1
| 1
|-
| CLR bit
| Azzera il bit dell’indirizzo [bit]
| 2
| 1
|-
| SETB C
| Pone a 1 il flag CY
| 1
| 1
|-
| SETB bit
| Pone a 1 il bit dell’indirizzo [bit]
| 2
| 1
|-
| CPL C
| Inverte il flag CY
| 1
| 1
|-
| CPL bit
| Inverte il bit dell’indirizzo [bit]
| 2
| 1
|-
| ANL C,bit
| AND logico fra CY e il bit dell’indirizzo [bit]
| 2
| 2
|-
| ANL C,/bit
| AND logico fra CY e la negazione del bit dell’indirizzo [bit]
| 2
| 2
|-
| ORL C,bit
| OR logico fra CY e il bit dell’indirizzo [bit]
| 2
| 2
|-
| ORL C,/bit
| OR logico fra CY e la negazione del bit dell’indirizzo [bit]
| 2
| 2
|-
| MOV C,bit
| Copia nel carry il bit di indirizzo bit
| 2
| 1
|-
| MOV bit,C
| Copia il carry nell'indirizzo bit
| 2
| 2
|}
'''Istruzioni di controllo'''
{| class="wikitable" border="1"
|-
! Mnemonici
! Descrizione
! Bytes
! Cicli
|-
| ACALL addr11
| Manda in esecuzione una routine entro un segmento da 2K (solo in avanti)
| 2
| 2
|-
| LCALL addr16
| Manda in esecuzione una routine (anche fuori segmento, fino a ±32K)
| 3
| 2
|-
| RET
| Termina l’esecuzione di una routine
| 1
| 2
|-
| RETI
| Termina l’esecuzione della routine di risposta ad un’interruzione
| 1
| 2
|-
| AJMP addr11
| Salta all’indirizzo specificato entro un segmento da 2K (solo in avanti)
| 2
| 2
|-
| LJMP addr16
| Salta all’indirizzo specificato (anche fuori segmento, fino a ±32K)
| 3
| 2
|-
| SJMP rel
| Salta a [rel] posizioni successive del Program Counter (entro –128 e +127)
| 2
| 2
|-
| JMP @A+DPTR
| Salta alla locazione di PC puntata da A + il contenuto del DPTR
| 1
| 2
|-
| JZ rel
| Salta alla locazione [rel] se il contenuto di A è uguale a zero
| 2
| 2
|-
| JNZ rel
| Salta alla locazione [rel] se il contenuto di A è diverso da zero
| 2
| 2
|-
| JC rel
| Salta alla locazione [rel] se il bit di CY vale 1
| 2
| 2
|-
| JNC rel
| Salta alla locazione [rel] se il bit di CY vale 0
| 2
| 2
|-
| JB bit,rel
| Salta alla locazione [rel] se il bit contenuto nell’indirizzo [bit] vale 1
| 3
| 2
|-
| JNB bit,rel
| Salta alla locazione [rel] se il bit contenuto nell’indirizzo [bit] vale 0
| 3
| 2
|-
| JBC bit,rel
| Salta alla locazione [rel] se il bit contenuto nell’indirizzo [bit] vale 1, e poi lo azzera
| 3
| 2
|-
| CJNE A,direct,rel
| Salta alla locazione [rel] se il contenuto di A è diverso da quello di [direct]; se A è minore di [direct] pone CY=1, altrimenti CY=0
| 3
| 2
|-
| CJNE A,#data,rel
| Salta alla locazione [rel] se il contenuto di A è diverso dal dato immediato; se A è minore di #dato pone CY=1, altrimenti CY=0
| 3
| 2
|-
| CJNE Rn,#data,rel
| Salta alla locazione [rel] se il contenuto di Rn è diverso dal dato immediato; se Rn è minore del dato pone CY=1, altrimenti CY=0
| 3
| 2
|-
| CJNE @Ri,#data,rel
| Salta alla locazione [rel] se il contenuto della locazione puntata da Ri è diverso dal dato immediato; se il contenuto del riferimento è minore del dato pone CY=1, altrimenti CY=0
| 3
| 2
|-
| DJNZ Rn,rel
| Diminuisce di 1 il contenuto di Rn; se Rn non diventa 0, salta a [rel]
| 2
| 2
|-
| DJNZ direct,rel
| Diminuisce di 1 il contenuto della locazione [direct]; se il contenuto non diventa 0, salta a [rel]
| 3
| 2
|-
| NOP
| Nessuna operazione (ritardo di un ciclo macchina)
| 1
| 1
|}
'''Note'''
Rn Registri di lavoro R0-R7<br />
direct 128 locazioni di ram interna, porta di I/O, registro di controllo o stato<br />
@Ri Locazione di RAM interna indiretta indirizzata dal registro R0 o R1<br />
#data costante a 8 bit inclusa nell'istruzione<br />
#data16 costante a 16 bit inclusa nell'istruzione<br />
bit 128 flag software, pin di I/O, bit di controllo o stato<br />
addr16 L'indirizzo di destinazione può essere ovunque nei 64-kByte dello spazio di memoria programma<br />
addr11 L'indirizzo di destinazione sarà nella stessa pagina di memoria programma ampia 2-kByte come primo byte della corrente istruzione<br />
rel offset a 8-bit relativo al primo byte della corrente istruzione (+127, -128)<br />
All mnemonics copyrighted (C) Intel Corporation 1979<br />
== Varianti ==
| |||