Intel 8051: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
fix incipit
 
(43 versioni intermedie di 29 utenti non mostrate)
Riga 1:
[[File:KL Intel P8051.jpg|right|thumb|Microcontrollore Intel P8051.]]
[[File:SAB-C515-LN.jpg|thumb|Microcontrollore SAB-C515-LN di Infineon, basato sul core 8051.]]
 
L{{'}}'''Intel 8051''' è un [[microcontrollore]] a 8 [[bit]] su singolo chip basato su [[architettura Harvard]], prodotto da [[Intel]] nela 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 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.
 
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ù efficentiefficienti dal punto di vista energetico dei loro predecessori NMOS. Ciò li rendeva particolarmente adatti per l'uso su dispositivi a [[Batteria (chimica)|batteria]].
 
== Architettura 8051 ==
L'8051 possiede 60000 transistor. ilIl 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 solesoli 128256 byte, metrementre la memoria RAMROM del codice può raggiugnereraggiungere 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.
 
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.
 
== Applicazioni e funzioni importanti ==
[[File:Intel_8051_archIntel 8051 arch.svg|right|thumb|Microarchitettura i8051.]]
[[File:http://it.wikipedia.org/wiki/File:File-Architettura_dell%278051.jpg]]
 
Il chip dell'8051 integra le funzionalità seguenti:
* [[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) - 128256 [[byte]]
* ROM interna (memoria programma) - 4kB
* Quattro porte di I/O orientate al byte
* [[UART]] (porte seriali) di tipo sincrono (SPI, ''Serial PerypheralPeripheral 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]].
 
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.
 
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.
 
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 Mhz&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 100MHz100&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 200MHz200&nbsp;MHz.
 
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.
 
== Programmazione ==
Oltre alla programmazione in linguaggio [[assemblerassembly]] 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]].
 
== Instruction set ==
'''Istruzioni aritmetiche'''
{| class="wikitable" border="1"
Riga 58:
|-
| ADD A,direct
| Somma ad A il contenuto della locazioneposizione ''direct''
| 2
| 1
|-
| ADD A,@Ri
| Somma ad A il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 78:
|-
| ADDC A,direct
| Somma ad A il contenuto della locazioneposizione ''direct'' e il CY
| 2
| 1
|-
| ADDC A,@Ri
| Somma ad A il contenuto della locazioneposizione puntata da Ri e il CY
| 1
| 1
Riga 98:
|-
| SUBB A,direct
| Sottrae da A il contenuto della locazioneposizione ''direct'' e il CY
| 2
| 1
|-
| SUBB A,@Ri
| Sottrae da A il contenuto della locazioneposizione puntata da Ri e il CY
| 1
| 1
Riga 123:
|-
| INC direct
| Aumenta di 1 il contenuto della locazioneposizione ''direct ''
| 2
| 1
|-
| INC @Ri
| Aumenta di 1 il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 143:
|-
| DEC direct
| Diminuisce dI 1 il contenuto della locazioneposizione direct
| 2
| 1
|-
| DEC @Ri
| Diminuisce di 1 il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 187:
|-
| ANL A,direct
| AND logico tra A e il contenuto della locazioneposizione direct
| 2
| 1
|-
| ANL A,@Ri
| AND logico tra A e il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 202:
|-
| ANL direct,A
| AND logico tra il contenuto della locazioneposizione direct e dell'ACC; il risultato rimane nella locazioneposizione direct
| 2
| 1
|-
| ANL direct,#data
| AND logico tra il contenuto della locazioneposizione direct ed il dato; il risultato rimane nella locazioneposizione direct
| 3
| 2
Riga 217:
|-
| ORL A,direct
| OR logico tra A e il contenuto della locazioneposizione direct
| 2
| 1
|-
| ORL A,@Ri
| OR logico tra A e il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 232:
|-
| ORL direct,A
| OR logico tra il contenuto della locazioneposizione direct e dell'ACC; il risultato rimane nella locazioneposizione direct
| 2
| 1
|-
| ORL direct,#data
| OR logico tra il contenuto della locazioneposizione direct ed il dato immediato; il risultato rimane nella locazioneposizione direct
| 3
| 2
Riga 247:
|-
| XRL A,direct
| EX-OR logico tra A e il contenuto della locazioneposizione direct
| 2
| 1
|-
| XRL A,@Ri
| EX-OR logico tra A e il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 262:
|-
| XRL direct A
| EX-OR logico tra il contenuto della locazioneposizione direct e A, il risultato rimane nella locazioneposizione direct
| 2
| 1
|-
| XRL direct,#data
| EX-OR logico tra il contenuto della locazioneposizione direct e il dato, il risultato rimane nella locazioneposizione direct
| 3
| 2
Riga 302:
|-
| SWAP A
| scambia i due nibble dell’accumulatoredell'accumulatore
| 1
| 1
Riga 321:
|-
| MOV A,direct
| Copia in A il contenuto della locazioneposizione direct
| 2
| 1
|-
| MOV A,@Ri
| Copia in A il contenuto della locazioneposizione puntata da Ri
| 1
| 1
Riga 341:
|-
| MOV Rn,direct
| Copia nel registro Rn il contenuto della locazioneposizione direct
| 2
| 2
Riga 351:
|-
| MOV direct,A
| Copia nella locazioneposizione direct il contenuto di A
| 2
| 1
|-
| MOV direct,Rn
| Copia nella locazioneposizione direct il contenuto del registro Rn
| 2
| 2
|-
| MOV direct, direct
| Copia nella locazioneposizione direct il contenuto della locazioneposizione direct
| 3
| 2
|-
| MOV direct,@Ri
| Copia nella locazioneposizione direct il contenuto della locazioneposizione puntata da Ri
| 2
| 2
|-
| MOV direct,#data
| Copia nella locazioneposizione direct il dato immediato
| 3
| 2
|-
| MOV @Ri,A
| Copia nella locazioneposizione puntata da Ri il contenuto di A
| 1
| 1
|-
| MOV @Ri,direct
| Copia nella locazioneposizione puntata da Ri il contenuto. della locazioneposizione direct
| 2
| 2
|-
| MOV @Ri,#data
| Copia nella locazioneposizione puntata da Ri il dato immediato
| 2
| 1
Riga 416:
|-
| MOVX @Ri,A
| Copia nella locazioneposizione di memoria dati esterna puntata da Ri il contenuto di A
| 1
| 2
|-
| MOVX @DPTR,A
| Copia nella locazioneposizione di memoria dati esterna puntata da DPTR il contenuto di A
| 1
| 2
|-
| PUSH direct
| Copia nella locazioneposizione puntata da SP il contenuto della locazioneposizione direct e aumentalo Stack di una unità
| 2
| 2
|-
| POP direct
| Copia nella locazioneposizione direct il contenuto della locazioneposizione puntata da SP e diminuisce lo Stack di una unità
| 2
| 2
Riga 441:
|-
| XCH A,direct
| Scambia il contenuto di A con quello della locazioneposizione direct
| 2
| 1
|-
| XCH A,@Ri
| Scambia il contenuto di A con quello della locazioneposizione puntata da Ri
| 1
| 1
|-
| XCHD A,@Ri
| Scambia il nibble meno significativo di A con il più significativo della locazioneposizione puntata da Ri
| 1
| 1
Riga 470:
|-
| CLR bit
| Azzera il bit dell’indirizzodell'indirizzo [bit]
| 2
| 1
Riga 480:
|-
| SETB bit
| Pone a 1 il bit dell’indirizzodell'indirizzo [bit]
| 2
| 1
Riga 490:
|-
| CPL bit
| Inverte il bit dell’indirizzodell'indirizzo [bit]
| 2
| 1
|-
| ANL C,bit
| AND logico fra CY e il bit dell’indirizzodell'indirizzo [bit]
| 2
| 2
|-
| ANL C,/bit
| AND logico fra CY e la negazione del bit dell’indirizzodell'indirizzo [bit]
| 2
| 2
|-
| ORL C,bit
| OR logico fra CY e il bit dell’indirizzodell'indirizzo [bit]
| 2
| 2
|-
| ORL C,/bit
| OR logico fra CY e la negazione del bit dell’indirizzodell'indirizzo [bit]
| 2
| 2
Riga 544:
|-
| RET
| Termina l’esecuzionel'esecuzione di una routine
| 1
| 2
|-
| RETI
| Termina l’esecuzionel'esecuzione della routine di risposta ad un’interruzioneun'interruzione
| 1
| 2
|-
| AJMP addr11
| Salta all’indirizzoall'indirizzo specificato entro un segmento da 2K (solo in avanti)
| 2
| 2
|-
| LJMP addr16
| Salta all’indirizzoall'indirizzo specificato (anche fuori segmento, fino a ±32K)
| 3
| 2
Riga 569:
|-
| JMP @A+DPTR
| Salta alla locazioneposizione di PC puntata da A + il contenuto del DPTR
| 1
| 2
|-
| JZ rel
| Salta alla locazioneposizione [rel] se il contenuto di A è uguale a zero
| 2
| 2
|-
| JNZ rel
| Salta alla locazioneposizione [rel] se il contenuto di A è diverso da zero
| 2
| 2
|-
| JC rel
| Salta alla locazioneposizione [rel] se il bit di CY vale 1
| 2
| 2
|-
| JNC rel
| Salta alla locazioneposizione [rel] se il bit di CY vale 0
| 2
| 2
|-
| JB bit,rel
| Salta alla locazioneposizione [rel] se il bit contenuto nell’indirizzonell'indirizzo [bit] vale 1
| 3
| 2
|-
| JNB bit,rel
| Salta alla locazioneposizione [rel] se il bit contenuto nell’indirizzonell'indirizzo [bit] vale 0
| 3
| 2
|-
| JBC bit,rel
| Salta alla locazioneposizione [rel] se il bit contenuto nell’indirizzonell'indirizzo [bit] vale 1, e poi lo azzera
| 3
| 2
|-
| CJNE A,direct,rel
| Salta alla locazioneposizione [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 locazioneposizione [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 locazioneposizione [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 locazioneposizione [rel] se il contenuto della locazioneposizione puntata da Ri è diverso dal dato immediato; se il contenuto del riferimento è minore del dato pone CY=1, altrimenti CY=0
| 3
| 2
Riga 634:
|-
| DJNZ direct,rel
| Diminuisce di 1 il contenuto della locazioneposizione [direct]; se il contenuto non diventa 0, salta a [rel]
| 3
| 2
Riga 648:
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 ==
[[File:INTEL8031AH.png|thumb|right|Processore Intel 8031]]
 
{| class="wikitable" border="1"
Riga 678:
| 8051
| 4 KB
| [[Read-Only_MemoryOnly Memory|ROM]]
| 128
| 2
Riga 699:
| 8052
| 8 KB
| [[Read-Only_MemoryOnly Memory|ROM]]
| 256
| 3
Riga 713:
 
== Bibliografia ==
* {{citeCita booklibro | lastcognome=Payne | firstnome=William | coauthors= | editor= | others= |
titletitolo=Embedded Controller Forth for the 8051 Family |origdate = | origyeartipo=hardcover |
data=19 dicembre 1990 | editore=Elsevier | città= | lingua=inglese |isbn=978-0-12-547570-9 | pagine=528 }}
origmonth= | url= | format=hardcover | accessdate= | accessyear= | accessmonth= | edition= |
* Andrew S. Tanenbaum, Architettura degli elaboratori, un approccio strutturale, Pearson Prentice Hall
date= December 19, 1990 | publisher=Elsevier | ___location= | language=English |
 
isbn=978-0125475709 | pages=528 | chapter= | chapterurl= }}
== Altri progetti ==
{{interprogetto|preposizione=sull'}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*[ {{cita web|http://www.atmel.com/products/8051/ |Atmel]}}
*[http://www.cast-inc.com/cores/r8051xc2/index.shtml CAST, Inc. (8051 IP core provider)]
* {{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ì }}
*[http://www.standardics.nxp.com/products/80c51/ NXP (Philips)]
* {{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ì }}
*[http://para.maxim-ic.com/cache/en/results/4592.html Maxim Integrated Products]
* {{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ì }}
*[http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/ConsumerElectronicsIC/ Nuvoton]
* {{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]}}
*[http://mcu-memory.com/ STC Semiconductor (Chinese supplier of 8051-based products)]
* {{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ì }}
*[http://www.dolphin.fr/flip/logic/logic_overview.html Dolphin Integration (8051 IP provider)]
* {{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ì }}
*[http://www.dcd.pl/acore.php?idcore=44 DIGITAL CORE DESIGN, DCD (8051/80390 IP core provider)]
* {{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à}}
[[Categoria:Microcontrollori]]
{{Portale|informatica}}
 
[[Categoria:Microcontrollori]]
[[ar:المتحكم الدقيق ثمانون واحد وخمسين]]
[[ca:Intel 8051]]
[[cs:Intel 8051]]
[[de:Intel MCS-51]]
[[el:Intel 8051]]
[[en:Intel 8051]]
[[es:Intel 8051]]
[[fr:Intel 8051]]
[[he:מיקרו-בקר 8051]]
[[id:Intel 8051]]
[[ja:Intel 8051]]
[[ko:인텔 8051]]
[[nl:8051-microcontroller]]
[[pl:Intel 8051]]
[[pt:Intel 8051]]
[[ru:Intel 8051]]
[[sv:Intel 8051]]
[[th:อินเทล 8051]]
[[tr:8051]]
[[vi:Intel 8051]]
[[zh:Intel 8051]]