Intel 8051

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Microcontroler Intel P8051.
Microcontrolerul SAB-C515-LN al Infineon, bazat pe nucleul 8051.

Intel 8051 este un singur cip 8- biți microcontroler bazat pe arhitectura Harvard , fabricat de Intel în 1980 , ca sisteme integrate de procesor. Versiunea originală Intel a fost populară în anii 1980 și începutul anilor 1990, dar a fost ulterior depășită în mare măsură de o gamă largă de dispozitive compatibile 8051 mai rapide și / sau funcționale, fabricate de peste 20 de companii independente precum Atmel , Infineon Technologies (fosta Siemens AG ), Maxim Integrated Produse (prin intermediul filialei sale Dallas Semiconductor ), NXP (fost Philips Semiconductor), Nuvoton (fost Winbond ), ST Microelectronics , Silicon Laboratories (fost Cygnal), Texas Instruments și Cypress Semiconductor . Diferența dintre un procesor real și 8051 este că acesta din urmă are 32 de linii I / O, organizate în grupuri de câte 8 biți fiecare. la fiecare dintre acestea este posibil să conectați un buton, un LED sau alte dispozitive care pot furniza I / O la 8051.

Denumirea oficială Intel pentru familia de microcontrolere 8051 este MCS 51 . Prima versiune a fost produsă folosind tehnologia NMOS , în timp ce versiunile ulterioare, identificate printr-o literă C în numele lor (de exemplu, 80C51), foloseau tehnologia CMOS și, prin urmare, erau mai eficiente din punct de vedere energetic decât predecesorii lor NMOS. Acest lucru le-a făcut să fie deosebit de potrivite pentru utilizarea pe dispozitive cu baterii .

Arhitectura 8051

8051 are 60.000 de tranzistori. Inima modelului 8051 este reprezentată de magistrala principală la care sunt conectate diferite registre, aproape toate destinate citirii sau scrierii, sub controlul programului.

8051 are două memorii separate pentru cod și date. RAM-ul de date este de numai 256 de octeți, în timp ce codul RAM poate ajunge la 64K. Pe lângă magistrala și registrele principale, există două temporizatoare pe 16 biți pe cipul 8051 care sunt indispensabile pentru aplicații în timp real. Există, de asemenea, 4 porturi I / O de 8 biți, care permit 8051 să controleze 32 de dispozitive externe, cum ar fi butoane, lumini, senzori, actuatoare și multe altele.

8051 este un procesor sincron în care majoritatea, deși nu toate, din instrucțiuni au un singur ciclu de mașină. Fiecare ciclu de mașină este împărțit în douăsprezece cicluri de ceas și șase stări. La fiecare stare se efectuează o operație specifică care duce la executarea instrucțiunii.

Aplicații și funcții importante

I8051 microarhitectură.

Cipul 8051 integrează următoarele caracteristici:

  • CPU pe 8 biți
  • Registre ALU pe 8 biți, acumulator și unitate aritmetică-logică
  • Magistrală de date pe 8 biți
  • Magistrală de adrese pe 16 biți (spațiu total adresabil: 2 16 = 64 kB independent pe RAM și ROM)
  • RAM internă (memorie de date) - 256 octeți
  • ROM internă (memorie program) - 4kB
  • Patru porturi I / O orientate pe octeți
  • UART (porturi seriale) de tip sincron (SPI, Serial Peripheral Interface ) și asincron
  • Două contoare / temporizatoare de 16 biți
  • Handler de întrerupere cu prioritate pe două niveluri
  • Controlul consumului (modul de economisire a energiei)

O caracteristică deosebit de utilă a modelului 8051 este capacitatea de a procesa direct și eficient variabilele booleene pe un singur bit în registre și RAM. Această caracteristică a contribuit la consolidarea popularității 8051 în aplicațiile de control industrial. O altă caracteristică populară este prezența a patru seturi separate de registre de context, care sunt folosite pentru a reduce dramatic latențele de întrerupere față de metodele tradiționale de stivuire a contextului.

Porturile seriale ale modelului 8051 facilitează utilizarea cipului ca interfață de comunicație. De fapt, este posibilă configurarea modului de conectare între pinii externi și registrele de schimbare interne, conectându-le și la temporizatoarele interne, obținându-se astfel suportul diferitelor moduri de comunicații seriale, atât sincrone (SPI), cât și asincrone.

Porturile UART integrate, cu o gestionare deosebit de simplă, sunt capabile să comunice în conformitate cu cele mai comune protocoale seriale, în special un mod compatibil cu protocolul RS-485 pentru comunicații multipunct este de asemenea acceptat. Această capacitate de interfață cu alte dispozitive face ca modelul 8051 să fie deosebit de potrivit pentru aplicații încorporate.

Versiunea originală a modelului 8051 are un ciclu de mașină egal cu 12 cicluri de ceas. Deoarece majoritatea instrucțiunilor necesită unul sau două cicluri de mașină, folosind un ceas de 12 MHz, 8051 este capabil să execute până la un milion de instrucțiuni dintr-un ciclu de mașină și până la cinci sute de mii de instrucțiuni din două cicluri de mașini într-o secundă. Cele mai recente versiuni ale modelului 8051 au redus drastic numărul de cicluri de ceas pe ciclu de mașină, până la un ciclu de mașină pe ciclu de ceas, așa cum este cazul în modelele produse de SILabs, unele Dallas și unele Atmels: la o frecvență cu un ceas de 100 MHz, CPU este, prin urmare, deosebit de eficient, o altă caracteristică fundamentală pentru aplicațiile încorporate. Datorită utilizării tehnologiilor FPGA, cele mai noi modele 8051 pot funcționa la o frecvență de ceas de 200 MHz.

Cele mai recente modele de microcontrolere bazate pe nucleu 8051 au extins, de asemenea, funcționalitatea integrată în cip, crescând numărul de surse de întrerupere, extinzând funcționalitățile accesorii, cum ar fi numărul de temporizatoare și contoare și integrând funcții auxiliare suplimentare: oscilatoare interne, memorii non-volatile. programabil (flash EPROM , EEPROM ), ROM cu bootloader pentru boot mai rapid, dispozitive de comunicații seriale sincrone avansate (I 2 C), administratori de interfețe USB, moduri de consum redus și economie de energie, mecanisme de autodiagnostic etc.

Programare

În plus față de programarea limbajului de asamblare nativ, sunt disponibile mai multe compilatoare C , completate cu extensii pentru controlul alocării variabilelor în diferite tipuri de memorie și pentru accesarea caracteristicilor hardware specifice 8051, cum ar fi băncile de registre. Pentru variabilele cu un singur bit. Există, de asemenea, compilatori și interpreți ai altor limbaje de nivel înalt, cum ar fi: Forth , BASIC , Pascal / Object Pascal , PL / M și Modula 2 .

Set de instructiuni

Instrucțiuni aritmetice

Mnemonică Descriere Octet Cicluri
ADAUGĂ A, Rn Adăugați conținutul registrului Rn la A 1 1
ADAUGĂ A, direct Adaugă conținutul poziției directe la A 2 1
ADĂUGAȚI A, @ Ri Adăugați la A conținutul poziției arătate de Ri 1 1
ADĂUGAȚI A, # dată Adăugați datele imediate la A. 2 1
ADDC A, Rn Adăugați conținutul registrului Rn și CY la A 1 1
ADDC A, direct Adăugați conținutul poziției directe și CY la A. 2 1
ADDC A, @ Ri Adăugați la A conținutul poziției arătate de Ri și CY 1 1
ADDC A, # data Adăugați datele imediate și CY la A. 2 1
SUBB A, Rn Scade conținutul registrului Rn și CY din A 1 1
SUBB A, direct Scade conținutul poziției directe și CY din A 2 1
SUBB A, @ Ri Scade din A conținutul poziției arătat de Ri și CY 1 1
SUBB A, # data Scade datele imediate și CY din A 2 1
INC A Măriți conținutul lui A cu 1 1 1
INC Rn Crește conținutul registrului Rn cu 1 1 1
INC direct Crește conținutul poziției directe cu 1 2 1
INC @Ri Crește conținutul poziției arătate de Ri cu 1 1 1
DEC A Scade conținutul lui A cu 1 1 1
DEC Rn Scade conținutul registrului Rn cu 1 1 1
DEC direct Scade conținutul poziției directe cu 1 2 1
DEC @Ri Scade conținutul poziției arătate de Ri cu 1 1 1
INC DPTR Crește conținutul registrului DPTR cu 1 1 2
MUL AB Înmulțiți conținutul lui A cu cel al lui B; partea inferioară a rezultatului merge la A și partea superioară merge la B. 1 4
DIV AB Împarte conținutul lui A la B; coeficientul merge la A și restul la B. 1 4
DE LA CATRE Efectuați ajustarea zecimală a conținutului A. Folosind reprezentarea în BCD instrucțiunile ADD și ADDC trebuie să fie urmate de DA: aceasta asigură faptul că rezultatul este încă în BCD 1 1

Operațiuni logice

Mnemonică Descriere Octeți Cicluri
ANL A, Rn Logic ȘI între A și conținutul registrului Rn 1 1
ANL A, direct Logic ȘI între A și conținutul poziției directe 2 1
ANL A, @ Ri Logic ȘI între A și conținutul poziției arătate de Ri 1 1
ANL A, # data Logic ȘI între A și datele imediate 2 1
ANL direct, A Logic ȘI între conținutul poziției directe și ACC; rezultatul rămâne în poziție directă 2 1
ANL direct, # date Logic ȘI între conținutul poziției directe și date; rezultatul rămâne în poziție directă 3 2
ORL A, Rn SAU logic între A și conținutul registrului Rn 1 1
ORL O, direct SAU logic între A și conținutul poziției directe 2 1
ENT A, @ Ri SAU logic între A și conținutul poziției arătate de Ri 1 1
ENT A, # data SAU logic între A și originea imediată 2 1
ORL direct, A SAU logic între conținutul poziției directe și ACC; rezultatul rămâne în poziție directă 2 1
ORL direct, # date SAU logic între conținutul poziției directe și datele imediate; rezultatul rămâne în poziție directă 3 2
XRL A, Rn Logic EX-OR între A și conținutul registrului Rn 1 1
XRL A, direct EX-OR logic între A și conținutul poziției directe 2 1
XRL A, @ Ri EX-OR logic între A și conținutul poziției arătate de Ri 1 1
XRL A, # dată EX-OR logic între A și datele imediate 2 1
XRL direct A Logic EX-OR între conținutul poziției directe și A, rezultatul rămâne în poziția directă 2 1
XRL direct, # date Logic EX-OR între conținutul poziției directe și date, rezultatul rămâne în poziția directă 3 2
CLR A Resetați toți biții de A. 1 1
CPL A Completează (adică inversează) toți biții lui A. 1 1
RL A Întoarceți bucățile de A un loc spre stânga 1 1
RLC A Rotiți biții de la A la CY cu un singur loc 1 1
RR A Întoarceți bucățile A la un loc spre dreapta 1 1
RRC A Rotiți biții de la A la CY cu un singur loc 1 1
SWAP A schimbați cele două ciugulite ale acumulatorului 1 1

Operațiuni de transfer de date

Mnemonică Descriere Octeți Cicluri
MOV A, Rn Copiați conținutul registrului Rn în A 1 1
MOV A, direct Copiați conținutul poziției directe în A 2 1
MOV A, @ Ri Copiază conținutul poziției arătate de Ri în A 1 1
MOV A, # data Copiați datele imediate în A 2 1
MOV Rn, A Copiați conținutul A pentru a înregistra Rn 1 1
MOV Rn, direct Copiați conținutul poziției directe în registrul Rn 2 2
MOV Rn, # data Copiați datele imediate în registrul Rn 2 1
MOV direct, A Copiați conținutul lui A în locația directă 2 1
MOV direct, Rn Copiați conținutul registrului Rn în poziția directă 2 2
MOV direct, direct Copiază conținutul poziției directe în locația directă 3 2
MOV direct, @ Ri Copiază conținutul poziției arătate de Ri în poziția directă 2 2
MOV direct, # date Copiați datele imediate în poziția directă 3 2
MOV @ Ri, A Copiați conținutul lui A în poziția indicată de Ri 1 1
MOV @ Ri, direct Copiați conținutul în poziția indicată de Ri. a poziției directe 2 2
MOV @ Ri, # date Copiază datele imediate în poziția indicată de Ri 2 1
MOV DPTR, # date16 Copiați datele pe 16 biți în DPTR 2 1
MOVC A, @ A + DPTR Copiază conținutul memoriei programului cu adresa DPTR + A în A 1 2
MOVC A, @ A + PC Copiază conținutul memoriei programului cu adresa PC + A +1 la A 1 2
MOVX A, @ Ri Copiază conținutul memoriei de date externe indicat de Ri în A. 1 2
MOVX A, @ DPTR Copiați pe A conținutul memoriei de date externe indicat de DPTR 1 2
MOVX @ Ri, A Copiază conținutul lui A în locația externă a memoriei de date indicată de Ri 1 2
MOVX @ DPTR, A Copiază conținutul lui A în locația externă a memoriei de date indicată de DPTR 1 2
PUSH direct Copiați conținutul poziției directe în poziția indicată de SP și măriți-l Stivați cu o unitate 2 2
POP direct Copiază conținutul poziției indicate de SP în poziția directă și scade stiva cu o unitate 2 2
XCH A, Rn Schimbați conținutul lui A cu cel al lui Rn 1 1
XCH A, direct Schimbați conținutul lui A cu cel al poziției directe 2 1
XCH A, @ Ri Schimbați conținutul lui A cu cel al poziției arătate de Ri 1 1
XCHD A, @ Ri Schimbați picătura cea mai puțin semnificativă din A cu cea mai semnificativă din poziția indicată de Ri 1 1

Instrucțiuni de biți (variabile booleene) Operațiuni

Mnemonică Descriere Octet Cicluri
CLR C Resetați steagul CY 1 1
Bit CLR Resetați bitul de adresă [bit] 2 1
SETB C Setează steagul CY la 1 1 1
Bit SETB Setează bitul de adresă la 1 [bit] 2 1
CPL C Inversează steagul CY 1 1
Bit CPL Inversați bitul adresei [bit] 2 1
ANL C, bit Logic ȘI între CY și bitul de adresă [bit] 2 2
ANL C, / bit Logic ȘI între CY și negarea bitului de adresă [bit] 2 2
ENT C, bit SAU logic între CY și bitul de adresă [bit] 2 2
ORL C, / bit SAU logic între CY și negarea bitului de adresă [bit] 2 2
MOV C, bit Copiați bitul de adresă în port 2 1
Bit MOV, C Copiați transportul la adresa bitului 2 2

Instrucțiuni de control

Mnemonică Descriere Octeți Cicluri
ACALL addr11 Rulați o rutină într-un segment de 2K (numai înainte) 2 2
LCALL addr16 Rulați o rutină (chiar și din segment, până la ± 32K) 3 2
RET Încheie executarea unei rutine 1 2
REȚELE Termină executarea rutinei de răspuns la întrerupere 1 2
AJMP addr11 Salt la adresa specificată într-un segment de 2K (numai înainte) 2 2
LJMP addr16 Treceți la adresa specificată (chiar și în afara segmentului, până la ± 32K) 3 2
SJMP rel Salt la pozițiile [rel] ulterioare ale contorului de program (în intervalul –128 și +127) 2 2
JMP @ A + DPTR Salt la poziția computerului indicat de A + conținutul DPTR 1 2
JZ rel Salt la poziția [rel] dacă conținutul lui A este egal cu zero 2 2
JNZ rel Salt la poziția [rel] dacă conținutul lui A este diferit de zero 2 2
JC rel Salt la poziția [rel] dacă bitul CY este 1 2 2
JNC rel Salt la poziția [rel] dacă bitul CY este 0 2 2
Bit JB, rel Salt la poziția [rel] dacă bitul conținut în adresa [bit] este 1 3 2
Bit JNB, rel Salt la poziția [rel] dacă bitul conținut în adresa [bit] este 0 3 2
Bit JBC, rel Salt la poziția [rel] dacă bitul conținut în adresa [bit] este 1, apoi îl șterge 3 2
CJNE A, direct, rel Salt la poziția [rel] dacă conținutul lui A este diferit de cel al [direct]; dacă A este mai mic decât [direct] setează CY = 1, altfel CY = 0 3 2
CJNE A, # data, rel Salt la poziția [rel] dacă conținutul lui A este diferit de datele imediate; dacă A este mai mic decât #date se setează CY = 1, altfel CY = 0 3 2
CJNE Rn, # data, rel Salt la poziția [rel] dacă conținutul Rn este diferit de datele imediate; dacă Rn este mai mic decât datumul, setează CY = 1, altfel CY = 0 3 2
CJNE @ Ri, # data, rel Salt la poziția [rel] dacă conținutul poziției arătate de Ri este diferit de datele imediate; dacă conținutul referinței este mai mic decât datumul, setează CY = 1, altfel CY = 0 3 2
DJNZ Rn, rel Scade conținutul de Rn cu 1; dacă Rn nu devine 0, săriți la [rel] 2 2
DJNZ direct, rel Scade conținutul poziției [directe] cu 1; dacă conținutul nu devine 0, treceți la [rel] 3 2
NOP Fără funcționare (întârziere a ciclului mașinii) 1 1

Notă

Rn Registrele de lucru R0-R7
direcționează 128 de locații RAM interne, port I / O, registru de control sau stare
@Ri Locație RAM internă indirectă adresată de registrul R0 sau R1

  1. Data constantă pe 8 biți inclusă în instrucțiune
  2. Date constante pe 16 biți16 incluse în instrucțiune

Semnalizare software pe 128 biți, pin I / O, control sau bit de stare
addr16 Adresa de destinație poate fi oriunde în 64-kByte din spațiul de memorie al programului
addr11 Adresa de destinație va fi în aceeași pagină de memorie a programului de 2 kByte ca primul octet al instrucțiunii curente
8-bit offset rel relativ la primul octet al instrucțiunii curente (+127, -128)
Toate mnemonice protejate prin drepturi de autor (C) Intel Corporation 1979

Variante

Procesor Intel 8031
Chip Memorie dedicată programului Tipul de memorie RAM Numărul de temporizatoare Numărul de întreruperi
8031 0 KB --- 128 2 5
8051 4 KB rom 128 2 5
8751 8 KB EPROM 128 2 5
8032 0 KB --- 256 3 6
8052 8 KB rom 256 3 6
8752 8 KB EPROM 256 3 6

Bibliografie

  • (EN) William Payne, Embedded Controller Forth for the 8051 Family (Hardcover), Elsevier, 19 decembrie 1990, p. 528, ISBN 978-0-12-547570-9 .
  • Andrew S. Tanenbaum, Arhitectura computerelor, o abordare structurală, Pearson Prentice Hall

Alte proiecte

linkuri externe

Controlul autorității LCCN (EN) sh85067142 · GND (DE) 4196737-9 · BNF (FR) cb12333452n (data)
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT