Intel 8051: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
fix incipit
 
(108 versioni intermedie di 35 utenti non mostrate)
Riga 1:
[[ImageFile:KL Intel P8051.jpg|right|thumb|Microcontrollore Intel P8051.]]
[[ImageFile:SAB-C515-LN.jpg|thumb|Microcontrollore SAB-C515-LN delladi Infineon è, basato sull'sul core 8051.]]
L' '''Intel 8051''' è un [[microcontrollore]] su singolo chip basato su [[architettura Harvard]], prodotto da [[Intel]] nel 1980 come processore per [[Sistema embedded|sistemi integrati]]. la versione originale di Intel era popolare negli anni '80 e i primi '90, ma oggigiorno è stata ampiamente sorpassata da una vasta gamma di dispositivi 8051-compatibili, più veloci e/o funzionali, prodotti da più di 20 aziende indipendenti come: [[Atmel]], [[Infineon Technologies]] (precedentemente [[Siemens AG]]), [[Maxim Integrated Products]] (tramite la sua sussidiaria [[Dallas Semiconductor]]), [[NXP Semiconductors|NXP]] (precedentemente [[Philips]] Semiconductor), Nuvoton (precedentemente [[Winbond]]), [[ST Microelectronics]], [[Silicon Laboratories]] (precedentemente Cygnal), [[Texas Instruments]] e [[Cypress Semiconductor]]. La designazione ufficiale di Intel per la famiglia 8051 di microcontrollori è '''MCS 51'''.
 
L{{'}}'''Intel 8051''' è un [[microcontrollore]] a 8 [[bit]] su singolo chip basato su [[architettura Harvard]], prodotto da [[Intel]] a partire dal [[1980]] come processore per [[Sistema embedded|sistemi integrati]]. La versione originale di Intel era popolare negli [[anni 1980|anni ottanta]] e i primi [[anni 1990|anni novanta]] ma è stata in seguito ampiamente sorpassata da una vasta gamma di dispositivi 8051-compatibili, più veloci e/o funzionali, prodotti da oltre 20 aziende indipendenti come [[Atmel]], [[Infineon Technologies]] (precedentemente [[Siemens AG]]), [[Maxim Integrated Products]] (tramite la sua sussidiaria [[Dallas Semiconductor]]), [[NXP Semiconductors|NXP]] (precedentemente [[Philips]] Semiconductor), Nuvoton (precedentemente [[Winbond]]), [[ST Microelectronics]], [[Silicon Laboratories]] (precedentemente Cygnal), [[Texas Instruments]] e [[Cypress Semiconductor]].
la famiglia originale di Intel fù prodotta utilizzando tecnologia [[NMOS]], ma le versioni successive, identificate da una lettera C nel loro nome (es., 80C51) usavano tecnologia [[CMOS]] ed erano più efficenti dal punto di vista energetico dei loro predecessori NMOS. Ciò li rese più adatti per l'uso su dispositivi a [[batteria]].
La differenza tra una vera e propria CPU e l'8051 è che quest'ultimo possiede 32 linee di I/O, organizzate in gruppi di 8 bit ciascuno. ad ognuno di questi è possibile collegare un pulsante, un LED, oppure altri dispositivi che possano fornire I/O all'8051.
==Applicazioni e funzioni importanti==
[[Image:Intel_8051_arch.svg|right|thumb|Microarchitettura i8051.]]
* è provvisto di ([[Central processing unit|CPU]], [[Random access memory|RAM]], [[Read-only memory|ROM]], [[Input/output|I/O]], [[interrupt]] logici, [[timer]], ecc.) su chip
* ALU a 8-bit, Registri e Accumulatori; Ciò rende l'Intel 8051 un [[microcontrollore]] a [[8-bit]]
* [[Bus dati]] a 8-bit - è possibile accedere a dati di 8 bit in un'unica operazione
* [[Bus indirizzi]] a 16-bit - Può indirizzare 2<sup>16</sup> locazioni di memoria - 64&nbsp;[[kibibyte|kiB]] (65536 locazioni) indipendenti su RAM e ROM
* RAM integrata - 128 [[bytes]] (memoria dati)
* ROM integrata - 4&nbsp;kiB (memoria programma)
* Quattro porte dati di I/O orientate al byte
* [[UART]] ([[porta seriale]])
* Due contatori a 16-bit/[[timer]]s
* Due livelli di priorità degli interupt
* Modalità di risparmio energetico
 
La designazione ufficiale di Intel per la famiglia 8051 di microcontrollori è '''MCS 51'''. La prima versione fu prodotta utilizzando tecnologia [[Logica NMOS|NMOS]] mentre le versioni successive, identificate da una lettera C nel loro nome (es., 80C51) usavano tecnologia [[CMOS]] ed erano quindi più efficienti dal punto di vista energetico dei loro predecessori NMOS. Ciò li rendeva particolarmente adatti per l'uso su dispositivi a [[Batteria (chimica)|batteria]].
Una caratteristica particolarmente utile dell'8051 è la possibilità di elaborare [[booleani]] a livello di bit con logica booleana, direttamente e in modo efficiente su registri interni e RAM. Questa caratteristica ha contribuito a cementare la popolarità delll'8051 in applicazioni di controllo industriale. Un'altra caratteristica apprezzata è la presenza di quattro gruppi separati di registri, che possono essere usati per ridurre drasticamente le latenze degli interrupt se comparato con i più comuni metodi di immagazzinamento del contesto degli interupt su una pila.
 
== Architettura 8051 ==
Le [[UART]]s dell'8051 rendono semplice l'uso del chip come interfaccia per comunicazioni seriali. I pin esterni possono essere configurati per connettersi ai registri shifter interni in differenti maniere, è possibile anche utilizzare i temporizzatori interni, permettendo connessioni seriali in un buon numero di modi diversi, sia sincrono che asincrono. Alcuni modi non consentono le comunicazioni con componenti esterni. è possibile pure un modo compatibile con una comunicazione [[EIA-485|RS-485]] su più punti, ma la vera forza dell'8051 è la sua capacità di integrazione su sistemi con protocolli ad-hoc già esistenti (ad esempio, pilotare dispositivi controllati con una connessione seriale).
L'8051 possiede 60000 transistor. Il cuore dell'8051 è rappresentato dal bus principale cui sono collegati vari registri, quasi tutti destinati a lettura o scrittura, sotto il controllo del programma.
 
L'8051 è dotato di due memorie separate per codice e dati. La RAM dei dati è di soli 256 byte, mentre la memoria ROM del codice può raggiungere i 64 KB. Oltre al bus principale e ai registri, sul chip dell'8051 ci sono due timer a 16 bit che risultano indispensabili per le applicazioni in tempo reale. Sono presenti anche 4 porte I/O a 8 bit, che permettono all'8051 di controllare 32 dispositivi esterni come pulsanti, luci, sensori, attuatori e altro.
Una volta che una UART, e un temporizzatore se necessario, è stata configurata, il programmatore deve solo scrivere una semplice routine di interrupt per riempire il registro shifter di ''invio'' ogni volta l'ultimo bit shiftato è inviato tramite la UART e/o riempie lo ''spazio vuoto'' nel registro shifte del ''destinatario''. Il programma principale allora effettua letture e scritture seriali semplicemente leggendo e scrivendo dati a 8-bit sugli stacks.
 
L'8051 è un processore sincrono in cui la maggior parte delle istruzioni, seppur non tutte, impiegano un solo ciclo macchina. Ogni ciclo macchina è suddiviso in dodici cicli di clock, e da sei stati. Ad ogni stato viene eseguita una precisa operazione che portano all'esecuzione dell'istruzione.
8051 based microcontrollers typically include one or two [[UART]]s, two or three timers, 128 or 256 bytes of internal data [[RAM]] (16 bytes of which are bit-addressable), up to 128 bytes of [[Input/Output|I/O]], 512 bytes to 64 kB of internal program memory, and sometimes a quantity of extended data RAM (ERAM) located in the external data space. The original 8051 core ran at 12 clock cycles per machine cycle, with most instructions executing in one or two machine cycles. With a 12&nbsp;MHz [[clock frequency]], the 8051 could thus execute 1 million one-cycle instructions per second or 500,000 two-cycle instructions per second. Enhanced 8051 cores are now commonly used which run at six, four, two, or even one clock per machine cycle, and have clock frequencies of up to 100 MHz, and are thus capable of an even greater number of instructions per second. All SILabs, some Dallas and a few Atmel devices have single cycle cores.
 
== Applicazioni e funzioni importanti ==
Even higher speed single cycle 8051 cores, in the range 130&nbsp;MHz to 150&nbsp;MHz, are now available in internet downloadable form for use in [[programmable logic devices]] such as [[FPGAs]], and at many hundreds of MHz in [[ASICs]], for example the [[netlist]] from [http://www.e8051.com www.e8051.com]. Top clock speed 8051 cores reach over 200&nbsp;MHz in today's [[FPGA]] technologies - as an example [http://www.dcd.pl/acore.php?idcore=41 www.dcd.pl].
[[File:Intel 8051 arch.svg|thumb|Microarchitettura i8051.]]
 
Il chip dell'8051 integra le funzionalità seguenti:
Common features included in modern 8051 based microcontrollers include built-in reset timers with brown-out detection, on-chip oscillators, self-programmable [[Flash ROM]] program memory, bootloader code in ROM, EEPROM non-volatile data storage, [[I²C]], [[Serial Peripheral Interface|SPI]], and [[USB]] host interfaces, [[Pulse-width modulation|PWM]] generators, analog comparators, [[Analog to digital converter|A/D]] and [[Digital to analog converter|D/A]] converters, [[Real-time clock|RTC]]s, extra counters and timers, in-circuit debugging facilities, more interrupt sources, and extra power saving modes.
* [[Central processing unit|CPU]] a 8 bit
* Registri, accumulatore e unità aritmetico-logica [[unità aritmetica e logica|ALU]] a 8 bit
* [[Bus (informatica)#Bus dati|bus dati]] a 8 bit
* [[Bus (informatica)#Bus indirizzi|Bus indirizzi]] a 16 bit (spazio indirizzabile complessivo: 2<sup>16</sup> = 64[[kilobyte|kB]] indipendenti su RAM e ROM)
* RAM interna (memoria dati) - 256 [[byte]]
* ROM interna (memoria programma) - 4kB
* Quattro porte di I/O orientate al byte
* [[UART]] (porte seriali) di tipo sincrono (SPI, ''Serial Peripheral Interface'') e asincrono
* Due contatori/[[timer (informatica)|timer]] a 16 bit
* Gestore di ''[[interrupt]]'' a due livelli di priorità
* Controllo del consumo (modalità di risparmio energetico)
 
Una caratteristica particolarmente utile dell'8051 è la possibilità di elaborare direttamente e in modo efficiente [[Variabile booleana|variabili booleane]] a un solo bit, nei registri e nella RAM. Questa caratteristica ha contribuito a consolidare la popolarità dell'8051 in applicazioni di controllo industriale. Un'altra caratteristica apprezzata è la presenza di quattro gruppi separati di registri di contesto, usati per ridurre drasticamente le latenze degli ''interrupt'' rispetto ai metodi tradizionali di immagazzinamento del contesto su [[Pila (informatica)|stack]].
==Programmazione==
Diversi compilatori [[C (linguaggio di programmazione)|C]] sono disponibili per l' 8051, la maggior parte dei quali presenta estensioni che permettono al programmatore di specificare dove ciascuna variabile dovrebbe essere allocata nei suoi sei tipi di memoria, e fornisce l'accesso a specifiche caratteristiche hardware dell'8051 come banchi di registri multipli istruzioni per la manipolazione dei bits. Altri linguaggi di alto livello come [[Forth]], [[BASIC]], [[Pascal (linguaggio)|Pascal]]/[[Object Pascal]], [[PL/M]] e [[Modula 2]] sono disponibili per l' 8051, ma sono meno diffusi rispetto C e [[assembly]].
 
Le porte seriali dell'8051 rendono semplice l'uso del chip come interfaccia di comunicazione. È infatti possibile configurare la modalità di connessione tra i pin esterni e i registri a scorrimento interni, collegandoli anche ai timer interni, ottenendo così il supporto di diverse modalità di comunicazione seriale, di tipo sia sincrono (SPI) che asincrono.
==Related processors==
[[Image:INTEL8031AH.png|thumb|right|Intel 8031 processors]]
The 8051's predecessor, the [[Intel 8048|8048]], was used in the keyboard of the first [[IBM PC]], where it converted keypresses into the serial data stream which is sent to the main unit of the computer. The 8048 and derivatives are still used {{As of|2007|alt=today}} for basic model keyboards.
 
Le porte UART integrate, dalla gestione particolarmente semplice, sono in grado di comunicare secondo i protocolli seriali più diffusi, in particolare è supportata anche una modalità compatibile con il protocollo [[EIA-485|RS-485]] per comunicazioni multipunto. Questa capacità di interfacciamento verso altri dispositivi rende l'8051 particolarmente adatto per applicazioni di tipo embedded.
L' '''8031''' era una versione ''ritagliata'' dell'originale Intel 8051 che non conteneva nessuna memoria di programma interna ([[Read-only memory|ROM]]). Per usare questo chip una [[Read-only memory|ROM]] esterna contenente il programma che l'8031 avrebbe dovuto estrarre ed eseguire, doveva essere aggiunta.
 
La versione originale dell'8051 ha un ciclo macchina pari a 12 cicli di clock. Dato che la maggior parte delle istruzioni richiedono uno o due cicli macchina, usando un clock a 12&nbsp;MHz l'8051 è in grado di eseguire in un secondo fino a un milione di istruzioni da un ciclo macchina e fino a cinquecentomila istruzioni da due cicli macchina. Le ultime versioni dell'8051 hanno ridotto drasticamente il numero di cicli di clock per ciclo macchina, fino ad arrivare a un ciclo macchina per ciclo di clock, come avviene nei modelli prodotti da SILabs, da alcuni Dallas e da qualche Atmel: a una frequenza di clock di 100&nbsp;MHz la CPU risulta quindi particolarmente efficiente, altra caratteristica fondamentale per le applicazioni di tipo embedded. Grazie all'impiego di tecnologie FPGA, gli ultimi modelli di 8051 sono in grado di lavorare a una frequenza di clock pari a 200&nbsp;MHz.
L' '''8052''' era una versione potenziate dell'originale 8051 che implementava 256 bytes di RAM interna invece di 128 bytes, 8&nbsp;kiB di ROM invece di 4&nbsp;kiB, e un terzo temporizzatore a 16-bit. L' '''8032''' aveva le stesse caratteristiche eccetto la memoria programma ROM interna. L' 8052 e 8032 sono considerati ampiamente obsoleti perchè queste caratteristiche e altre sono incluse in tutti i moderni microcontrollori basati su 8051.
 
I più recenti modelli di microcontrollore basati su core 8051 hanno esteso anche le funzionalità integrate nel chip, aumentando il numero di sorgenti di interrupt, estendendo le funzionalità accessorie quali il numero di timer e contatori e integrando ulteriori funzioni ausiliarie: oscillatori interni, memorie non volatili programmabili (flash [[EPROM]], [[EEPROM]]), ROM con ''bootloader'' per un avvio velocizzato, dispositivi avanzati di comunicazione seriale sincrona (I<sup>2</sup>C), gestori di interfaccia USB, modalità a basso consumo e a risparmio energetico, meccanismi di autodiagnostica eccetera.
==References==
*{{cite book | last=Payne | first=William | coauthors= | editor= | others= |
title=Embedded Controller Forth for the 8051 Family |origdate = | origyear= |
origmonth= | url= | format=hardcover | accessdate= | accessyear= | accessmonth= | edition= |
date= December 19, 1990 | publisher=Elsevier | ___location= | language=English |
isbn=978-0125475709 | pages=528 | chapter= | chapterurl= }}
{{reflist}}
 
== Programmazione ==
==Collegamenti Esterni==
Oltre alla programmazione in linguaggio [[assembly]] 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 (informatica)|Forth]], [[BASIC]], [[Pascal (linguaggio)|Pascal]]/[[Object Pascal]], [[PL/M]] e [[Modula 2]].
*[http://www.atmel.com/products/8051/ Atmel]
*[http://www.cast-inc.com/cores/r8051xc2/index.shtml CAST, Inc. (8051 IP core provider)]
*[http://www.standardics.nxp.com/products/80c51/ NXP (Philips)]
*[http://para.maxim-ic.com/cache/en/results/4592.html Maxim Integrated Products]
*[http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/ConsumerElectronicsIC/ Nuvoton]
*[http://www.roman-jones.com/PB8051Microcontroller.htm Roman-Jones FPGA Based 8051 Core]
*[https://www.silabs.com/products/mcu/pages/default.aspx Silicon Labs]
*[http://focus.ti.com/mcu/docs/mcugeneralcontent.tsp?sectionId=98&tabId=1515 Texas Instruments]
*[http://mcu-memory.com/ STC Semiconductor (Chinese supplier of 8051-based products)]
*[http://www.dolphin.fr/flip/logic/logic_overview.html Dolphin Integration (8051 IP provider)]
*[http://www.dcd.pl/acore.php?idcore=44 DIGITAL CORE DESIGN, DCD (8051/80390 IP core provider)]
 
== Instruction set ==
{{Intel controllers}}
'''Istruzioni aritmetiche'''
{| 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 posizione ''direct''
| 2
| 1
|-
| ADD A,@Ri
| Somma ad A il contenuto della posizione 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 posizione ''direct'' e il CY
| 2
| 1
|-
| ADDC A,@Ri
| Somma ad A il contenuto della posizione 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 posizione ''direct'' e il CY
| 2
| 1
|-
| SUBB A,@Ri
| Sottrae da A il contenuto della posizione 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 posizione ''direct''
| 2
| 1
|-
| INC @Ri
| Aumenta di 1 il contenuto della posizione 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 posizione direct
| 2
| 1
|-
| DEC @Ri
| Diminuisce di 1 il contenuto della posizione 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'''
{{8bitMCUs}}
{| 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 posizione direct
| 2
| 1
|-
| ANL A,@Ri
| AND logico tra A e il contenuto della posizione 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 posizione direct e dell'ACC; il risultato rimane nella posizione direct
| 2
| 1
|-
| ANL direct,#data
| AND logico tra il contenuto della posizione direct ed il dato; il risultato rimane nella posizione 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 posizione direct
| 2
| 1
|-
| ORL A,@Ri
| OR logico tra A e il contenuto della posizione 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 posizione direct e dell'ACC; il risultato rimane nella posizione direct
| 2
| 1
|-
| ORL direct,#data
| OR logico tra il contenuto della posizione direct ed il dato immediato; il risultato rimane nella posizione 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 posizione direct
| 2
| 1
|-
| XRL A,@Ri
| EX-OR logico tra A e il contenuto della posizione 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 posizione direct e A, il risultato rimane nella posizione direct
| 2
| 1
|-
| XRL direct,#data
| EX-OR logico tra il contenuto della posizione direct e il dato, il risultato rimane nella posizione 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'''
{{FOLDOC}}
{| class="wikitable" border="1"
|-
! Mnemonici
! Descrizione
! Bytes
! Cicli
|-
| MOV A,Rn
| Copia in A il contenuto del registro Rn
| 1
| 1
|-
| MOV A,direct
| Copia in A il contenuto della posizione direct
| 2
| 1
|-
| MOV A,@Ri
| Copia in A il contenuto della posizione 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 posizione direct
| 2
| 2
|-
| MOV Rn,#data
| Copia nel registro Rn il dato immediato
| 2
| 1
|-
| MOV direct,A
| Copia nella posizione direct il contenuto di A
| 2
| 1
|-
| MOV direct,Rn
| Copia nella posizione direct il contenuto del registro Rn
| 2
| 2
|-
| MOV direct, direct
| Copia nella posizione direct il contenuto della posizione direct
| 3
| 2
|-
| MOV direct,@Ri
| Copia nella posizione direct il contenuto della posizione puntata da Ri
| 2
| 2
|-
| MOV direct,#data
| Copia nella posizione direct il dato immediato
| 3
| 2
|-
| MOV @Ri,A
| Copia nella posizione puntata da Ri il contenuto di A
| 1
| 1
|-
| MOV @Ri,direct
| Copia nella posizione puntata da Ri il contenuto. della posizione direct
| 2
| 2
|-
| MOV @Ri,#data
| Copia nella posizione 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 posizione di memoria dati esterna puntata da Ri il contenuto di A
| 1
| 2
|-
| MOVX @DPTR,A
| Copia nella posizione di memoria dati esterna puntata da DPTR il contenuto di A
| 1
| 2
|-
| PUSH direct
| Copia nella posizione puntata da SP il contenuto della posizione direct e aumentalo Stack di una unità
| 2
| 2
|-
| POP direct
| Copia nella posizione direct il contenuto della posizione 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 posizione direct
| 2
| 1
|-
| XCH A,@Ri
| Scambia il contenuto di A con quello della posizione puntata da Ri
| 1
| 1
|-
| XCHD A,@Ri
| Scambia il nibble meno significativo di A con il più significativo della posizione puntata da Ri
| 1
| 1
|}
 
'''Istruzioni sui bit (Variabili Booleane) Operations'''
[[Category:Microcontrollers]]
{| 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'''
[[ar:المتحكم الدقيق ثمانون واحد وخمسين]]
{| class="wikitable" border="1"
[[ca:Intel 8051]]
|-
[[cs:Intel 8051]]
! Mnemonici
[[de:Intel MCS-51]]
! Descrizione
[[el:Intel 8051]]
! Bytes
[[es:Intel 8051]]
! Cicli
[[fr:Intel 8051]]
|-
[[ko:인텔 8051]]
| ACALL addr11
[[id:Intel 8051]]
| Manda in esecuzione una routine entro un segmento da 2K (solo in avanti)
[[he:מיקרו-בקר 8051]]
| 2
[[nl:8051-microcontroller]]
| 2
[[ja:Intel 8051]]
|-
[[pl:Intel 8051]]
| LCALL addr16
[[pt:Intel 8051]]
| Manda in esecuzione una routine (anche fuori segmento, fino a ±32K)
[[ru:Intel 8051]]
| 3
[[sv:Intel 8051]]
| 2
[[th:อินเทล 8051]]
|-
[[vi:Intel 8051]]
| RET
[[tr:8051]]
| Termina l'esecuzione di una routine
[[zh:Intel 8051]]
| 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 posizione di PC puntata da A + il contenuto del DPTR
| 1
| 2
|-
| JZ rel
| Salta alla posizione [rel] se il contenuto di A è uguale a zero
| 2
| 2
|-
| JNZ rel
| Salta alla posizione [rel] se il contenuto di A è diverso da zero
| 2
| 2
|-
| JC rel
| Salta alla posizione [rel] se il bit di CY vale 1
| 2
| 2
|-
| JNC rel
| Salta alla posizione [rel] se il bit di CY vale 0
| 2
| 2
|-
| JB bit,rel
| Salta alla posizione [rel] se il bit contenuto nell'indirizzo [bit] vale 1
| 3
| 2
|-
| JNB bit,rel
| Salta alla posizione [rel] se il bit contenuto nell'indirizzo [bit] vale 0
| 3
| 2
|-
| JBC bit,rel
| Salta alla posizione [rel] se il bit contenuto nell'indirizzo [bit] vale 1, e poi lo azzera
| 3
| 2
|-
| CJNE A,direct,rel
| Salta alla posizione [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 posizione [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 posizione [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 posizione [rel] se il contenuto della posizione 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 posizione [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
# data costante a 8 bit inclusa nell'istruzione
# data16 costante a 16 bit inclusa nell'istruzione
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
 
== Varianti ==
[[File:INTEL8031AH.png|thumb|Processore Intel 8031]]
 
{| class="wikitable" border="1"
|-
! Chip
! Memoria dedicata al programma
! Tipo di memoria
! RAM
! Numero di timer
! Numero di interrupt
|-
| 8031
| 0 KB
| ---
| 128
| 2
| 5
|-
| 8051
| 4 KB
| [[Read-Only Memory|ROM]]
| 128
| 2
| 5
|-
| 8751
| 8 KB
| [[EPROM]]
| 128
| 2
| 5
|-
| 8032
| 0 KB
| ---
| 256
| 3
| 6
|-
| 8052
| 8 KB
| [[Read-Only Memory|ROM]]
| 256
| 3
| 6
|-
| 8752
| 8 KB
| [[EPROM]]
| 256
| 3
| 6
|}
 
== Bibliografia ==
* {{Cita libro | cognome=Payne | nome=William |
titolo=Embedded Controller Forth for the 8051 Family |tipo=hardcover |
data=19 dicembre 1990 | editore=Elsevier | città= | lingua=inglese |isbn=978-0-12-547570-9 | pagine=528 }}
* Andrew S. Tanenbaum, Architettura degli elaboratori, un approccio strutturale, Pearson Prentice Hall
 
== Altri progetti ==
{{interprogetto|preposizione=sull'}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|http://www.atmel.com/products/8051/|Atmel}}
* {{cita web | 1 = http://www.cast-inc.com/cores/r8051xc2/index.shtml | 2 = CAST, Inc. (8051 IP core provider) | accesso = 21 maggio 2009 | urlarchivio = https://web.archive.org/web/20090430022418/http://www.cast-inc.com/cores/r8051xc2/index.shtml | dataarchivio = 30 aprile 2009 | urlmorto = sì }}
* {{cita web | 1 = http://www.standardics.nxp.com/products/80c51/ | 2 = NXP (Philips) | accesso = 21 maggio 2009 | urlarchivio = https://web.archive.org/web/20090428045327/http://www.standardics.nxp.com/products/80c51/ | dataarchivio = 28 aprile 2009 | urlmorto = sì }}
* {{cita web |1=http://para.maxim-ic.com/cache/en/results/4592.html |2=Maxim Integrated Products |accesso=21 maggio 2009 |urlarchivio=https://web.archive.org/web/20070307014316/http://para.maxim-ic.com/cache/en/results/4592.html |dataarchivio=7 marzo 2007 |urlmorto=sì }}
* {{cita web | 1 = http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/ConsumerElectronicsIC/ | 2 = Nuvoton | accesso = 21 maggio 2009 | urlarchivio = https://web.archive.org/web/20090617155113/http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/ConsumerElectronicsIC/ | dataarchivio = 17 giugno 2009 | urlmorto = sì }}
* {{cita web|http://www.roman-jones.com/PB8051Microcontroller.htm|Roman-Jones FPGA Based 8051 Core}}
* {{cita web|https://www.silabs.com/products/mcu/pages/default.aspx|Silicon Labs}}
* {{cita web|url=http://focus.ti.com/mcu/docs/mcugeneralcontent.tsp?sectionId=98&tabId=1515|titolo=Texas Instruments}}
* {{cita web | 1 = http://mcu-memory.com/ | 2 = STC Semiconductor (Chinese supplier of 8051-based products) | accesso = 21 maggio 2009 | urlarchivio = https://web.archive.org/web/20090228171624/http://www.mcu-memory.com/ | dataarchivio = 28 febbraio 2009 | urlmorto = sì }}
* {{cita web |1=http://www.dolphin.fr/flip/logic/logic_overview.html |2=Dolphin Integration (8051 IP provider) |accesso=21 maggio 2009 |urlarchivio=https://web.archive.org/web/20090601183242/http://www.dolphin.fr/flip/logic/logic_overview.html |dataarchivio=1º giugno 2009 |urlmorto=sì }}
* {{cita web|url=http://www.dcd.pl/acore.php?idcore=44|titolo=DIGITAL CORE DESIGN, DCD (8051/80390 IP core provider)|accesso=21 maggio 2009|urlarchivio=https://web.archive.org/web/20080213042913/http://www.dcd.pl/acore.php?idcore=44|dataarchivio=13 febbraio 2008|urlmorto=sì}}
 
{{Controllo di autorità}}
{{Portale|informatica}}
 
[[Categoria:Microcontrollori]]