Sunteți pe pagina 1din 7

Capitolul 2 – Familia MCS-51.

Microcontrolerul 8051

2.1. Caracteristici generale


Familia MCS-51 este o serie de microcontrolere cu un singur cip, având o arhitectură
Harvard, ce a fost dezvolatată de compania americană Intel în 1980 pentru folosirea în sisteme
embedded (sisteme cu microprocesoare integrate). Familia originală MCS-51 a lui Intel a fost
dezvoltată utilizând tehnologia NMOS (N-type Metal-Oxide-Semiconductor, consum 125
), dar versiunile ulterioare folosesc tehnologia CMOS (Complementary Metal-Oxide-
Semiconductor, consum 15 ) și necesită mai puțină putere de alimentare decât
predecesoarele cu NMOS. Acest lucru le-a făcut mai potrivite pentru dispozitivele cu baterii.
Familia cuprinde microcontrolere pe 8 biţi (8051, 8751, 8031).
Microcontrolerul standard 8051 este realizat într-o capsulă cu 40 de pini (DIL=Dual In
Line) sau 44 de pini (PLCC=Plastic Leaded Chip Carrier = capsulă de plastic cu tetraetil de
plumb), având următoarele caracteristici tehnice:
 arhitectura orientată pe acumulator;
 4 KB (Kocteţi) memorie de program (ROM) on-chip (nu şi pentru 8031);
 128 kocteţi memorie de date (RAM) on-chip;
 memoria ROM şi RAM cu mecanisme de adresare diferite;
 adresabilitate de până la 64kB atât pentru RAM, cât şi pentru memoria de program,
prin extensii de memorie în afara cipului;
 4 bancuri (blocuri) de registre în memoria RAM (registre RAM);
 flaguri definite prin software de către utilizator;
 32 linii de I/O organizate ca 4 porturi de 8 biţi (la 8031 - 6 linii I/O);
 port serial multi-mod de mare viteză;
 timer/numărător de 16 biţi cu două moduri de funcţionare;
 logica de tratare a întreruperilor cu două nivele de priorităţi;
 stiva internă pentru stocarea datelor şi pentru apelurile de subrutină;
 multiplicator şi divizor hardware ce execută operaţiile în 4 microsecunde;
 detecţie a depăşirilor la bitul de semn şi calcul de paritate;
 set extins de instrucţiuni comparativ cu setul famiilor anterioare de microcontrolere
(MCS-48);
 adresabilitate directă pe octet şi bit;
 folosesc aritmetica zecimală şi binară;

Page 1 of 7
 operaţii logice la nivel de bit (Boolean Operations);
 un ciclu de instrucţiune de o microsecundă la o frecvenţă a ceasului de 12 MHz;
 pentru funcționare are nevoie de o singură sursă de tensiune de +5V.
Familia MCS-8051 cuprinde diverse variante ale circuitului standard:
- circuitul 8051 conține 4KB memorie PROM și 128 octeți RAM;
- circuitul 8031 conține 128 octeți RAM și nu are memorie ROM (ROMless);
- circuitul 8751 conține 4KB memorie EPROM și 128 octeți RAM
- circuitul 8052 conține 8KB memorie PROM și 256 octeți RAM
- circuitul 8032 conține 256 octeți RAM nu are memorie ROM
- circuitul 8732 conține 8KB memorie EPROM și 256 octeți RAM
- circuitul 8754 conține 16KB memorie EPROM și 256 octeți RAM
- circuitul 8758 conține 32KB memorie EPROM și 256 octeți RAM.
Toate aceste versiuni preyintă procesorul propriu zis, 4 porturi paraleel de câte 8 biți (3
având un caracter opțional), un canal pentru comunicații seriale, 2 canale timer, logică de
întreruperi ce gestionează 2 întreruperi externe și 3 întreruperi interne (2 de la canalul timer și
una de la canalul serial).
Diferenţele între reprezentanţii familiei MCS-51 constau în tipurile de memorie de
program (ROM/EPROM) cu care sunt prevăzute:
- 8751 are 4kocteţi „UV-EPROM” (programabil cu ultraviolete);
- 8051 are 4kocteţi „mask-programmed ROM” (programabil prin mascare);
- 8031 nu are memorie de program on-chip, dar permite adresarea unei memorii
externe ROM de până la 64kocteţi.

2.2. Arhitectura microcontrolerului Intel 8051


În figura 1 sunt prezentate elementele constitutive ale microcontrolerului şi anume:
 Unitatea Centrală de Prelucrare (UCP);
 Memoria internă (RAM + ROM);
 Porturi de I/O;
 Registrele de configurare (cu sufixul CON), de mod (cu sufixul MOD) şi stare;
 Logica de comandă şi control.
Toate unitățile funcționale sunt conectate la o magistrală internă pe 8 biți (INTERNAL
BUS). Această magistrală este conectată cu exteriorul prin porturi de I/O, atunci când se dorește
extinderea capacității de memorie sau I/O în exterior. Conectarea memoriei ROM la busul intern
se face cu amplificatoare de sens unic (SENSE AMPS). IR (Instruction Register) reprezintă

Page 2 of 7
registrul în care se încarcă instrucţiunea din memoria program, iar PLA (Programmable Logic
Array) este decodorul pentru instrucţiune (notate cu RI şi, respectiv, DI, în Figura 1).

Unitatea Centrală de Prelucrare (UCP)


Elementele de bază ale UCP sunt: UAL pe 8 biţi cu regiştri de 8 biţi, acumulatorul (A),
registrul de date suplimentar (B), registrul indicatorilor condiţionali (PSW) şi regiştrii cu funcţii
speciale: SP – Stack Pointer (Indicator de stivă), PC – Program Counter (Numărător de program)
şi DC - Data Counter (Numărător de date).
Funcţiile de calcul ale UAL sunt:
- execuţia operaţiilor aritmetice (adunări, scăderi, înmulţiri, împărţiri pe 8 biţi) şi logice
(AND, OR, XOR, rotaţii, complementări, etc.);
- ia decizii pe baza stării flagurilor (indicatorilor) la operaţiile de salt condiţionat;
- calculează adresa operanzilor;
- permite combinarea automată a operaţiilor simple pentru a obţine instrucţiuni complexe,
cum ar fi incrementarea sau compararea unor date pe 16 biţi.
O caracteristică deosebit de importantă este capacitatea UAL de a opera cu date pe 1 bit
(aşa numitul procesor boolean) care reprezintă un avantaj major în cazul operaţiilor în care
intervin variabile cu două stări ca în cazul manipulării comenzilor numerice care pot avea doar
două niveluri: 0 sau 1.
În concluzie UAL poate opera cu date pe 1, 8 şi 16 biţi.

Page 3 of 7
Figura 1 – Schema bloc a microcontrolerului 8051

Registrele de uz general
Microcontrolerul foloseşte patru bancuri de registre situate în memoria RAM, fiecare
banc conţinând 8 registre, notate R0 ÷ R7. La un moment dat procesorul lucrează doar cu
registrele din bancul de memorie curent. Instrucţiunile care adresează registrele folosesc 3 biţi
pentru specificarea registrului.

Registrele cu funcţii speciale

Microcontrolerul 80C51 conţine un grup de registre interne, cu funcţiuni speciale, numite


registre cu funcțiuni speciale SFR (“Special Function Registers”). Există cîteva tipuri de registre
şi anume: registre de uz general, registre care corespund porturilor, registre pentru comanda
modulelor periferice şi registre pentru transferul datelor cu modulele periferice.
Page 4 of 7
Registrele cu funcţiuni speciale sunt adresabile în mod direct, adresele lor se află în zona
80H - FFH (128-255), iar registrele ale căror adrese se termină în 0 sau 8 pot fi adresate şi la
nivel de bit. Registrele şi adresele lor sunt prezentate în tabelul următor:

Tabelul 1 - Registrele cu funcţii speciale (SFR=Special Function Registers)


ale microcontrolerului 80C51

F8 FF
F0 B F7
E8 EF
E0 ACC E7
D8 DF
D0 PSW D7
C8 CF
C0 C7
B8 IP BF
B0 P3 B7
A8 IE AF
A0 P2 A7
98 SCON SBUF 9F
90 P1 97
88 TCON TMOD TL0 TL1 TH0 TH1 8F
80 P0 SP DPL DPH PCON 87

Legenda:
- sunt SFR de control (controleaza modul de functionare si configurarea MC)
- sunt SFR asociate porturilor I/O (8051 are 4 porturi I/O de 8b fiecare)
- sunt alte SFR (nu controleaza in mod direct configurarea lui 8051, dar
bineinteles 8051 nu poate functiona fara ele)

ACC (Accumulator) - este registrul acumulator. Denumirea folosită în cadrul instrucţiunilor


este A. Arhitectura lui 8051 este orientată pe acumulator. Acumulatorul (A) conţine unul din
operanzi, iar după execuţia operaţiei conţine rezultatul. El este folosit la unele operaţii de transfer
de date fiind utilizat obligatoriu la operaţii de transfer cu memoria RAM externă, la rotaţii, calcul
al parităţii, test cu zero, etc.

Page 5 of 7
Deşi arhitectura este bazată pe acumulator există instrucţiuni de transfer la care sursa
poate fi orice locaţie din memoria internă, iar destinaţia poate fi orice registru sau locaţie de
memorie, regiştrii pot fi încărcaţi cu o constantă, ş.a.m.d..

Registrul PSW ("Program Status Word") - reprezintă registrul de stare și este pe 8 biți.
Conţine biţi de stare (indicatori condiţionali) care reflectă starea curentă a UCP. Indicatorii
condiţionali sunt afectaţi de execuţia unor instrucţiuni. Registrul PSW trebuie salvat prin
program înainte de servirea rutinelor de cerere de întrerupere alături de PC şi DP:
MSB LSB
P - OV RS0 RS1 F0 A C
7 6 5 4 3 2 1 0
C - flag (indicator) de transport setat hard/soft de anumite instrucţiuni logice şi
aritmetice;
A - flag (indicator) de transport auxiliar util la operațiile în BCD (zecimale codificate
binar);
F0 - flag 0 – bit ce poate fi folosit de utilizator pentru scopuri generale de semnalizare;
RS0, RS1 - biţi folosiți pentru selectarea bancului de regiștri activi . Selecția se
face conform tabelului următor; ei pot fi setaţi sau resetaţi software.
RS1 RS0 SELECȚIE
0 0 Bancul activ în celulele , adică Blocul 0
0 1 Bancul activ în celulele , adică Blocul 1
1 0 Bancul activ în celulele , adică Blocul 2
1 1 Bancul activ în celulele 18 , adică Blocul 3

OV - flag (indicator) de depăşire a rezultatelor obținute la operații aritmetice efectuate


asupra operanzilor exprimați în cod complement față de 2;
P - flag (indicator) de paritate, indică paritatea rezultatelor obținute în acumulator.
B (Battery Extension) - este un registru de 8 biți care este utilizat împreună cu acumulatorul
(are un rol predeterminat, se mai numește și registru extensie acumulator) în operațiile de
înmulţire şi împărţire. El conține al doilea operand, iar după execuția instrucțiunii, conține cei 8
biți mai semnificativi ai rezultatului pentru înmulțire, respectiv restul pentru împărțire (câtul se
găsește în acumulator). Pentru celelalte instrucţiuni, poate fi utilizat ca registru general.
IP ("Interrupt Priority") – este un registru de control priorități întreruperi pe 8 biți.
IE ("Interrupt Enable") – este un registru de control validare întreruperi pe 8 biți.
SCON ("Serial Control") – este un registru de control serial de 8 biți.
SBUF ("Serial Data Buffer") - este un registru tampon folosit la transferul serie şi este fizic
alcătuit din 2 registre: un registru tampon pentru transmisie şi unul pentru recepţie. Transmisia
este iniţiată prin scrierea unui octet în SBUF. La citire, se primeşte un octet de la registrul
tamponul pentru recepţie.
TCON ("Timer Control") – registru de control timer/counter pe 8 biți.
Page 6 of 7
TMOD ("Timer Mode") – registru de control mod timer/counter pe 8 biți.
TH0, TL0 ("Timer 0 Counter") – sunt două numărătoare pe cîte 8 biţi care alcătuiesc împreună
un numărător pe 16 biţi pentru contorul/temporizatorul 0.
TH1, TL1 ("Timer 1 Counter") – sunt două numărătoare pe cîte 8 biţi care alcătuiesc
împreună un numărător pe 16 biţi pentru contorul/ temporizatorul 1.
P0, P1, P2, P3 – sunt registrele ce corespund porturilor Port 0, Port 1, Port 2, respectiv Port 3.
Dacă un port este ieşire şi se scrie 1 sau 0 într-unul din registrele P0 - P3 (registre
corespunzătoare porturilor 0 3), terminalul corespunzător al portului va avea nivelul logic 1 sau
0.
SP ("Stack Pointer" = indicatorul de stivă) - este un registru de 8 biți care se referă la prima
locație ocupată din vârful stivei. Este folosit pentru adresarea stivei și este incrementat înaintea
unei depuneri în stivă prin intermediul instrucţiunilor CALL sau PUSH. După iniţializare este
încărcat cu valoarea 07H, deci stiva începe de la adresa 08H. Poate fi încărcat, prin program, cu
orice valoare. Stiva poate avea maxim 128B (128 octeți).
DPH, DPL ("Data Pointer High, Low") - sunt două registre pe cîte 8 biţi care alcătuiesc
împreună DPTR ("Data Pointer Register"), unde DPH este jumătatea superioară din DPTR, iar
DPL este jumătatea inferioară din DPTR. DPTR este folosit la adresarea indirectă a unei locaţii
din memoria externă şi poate fi accesat ca registru pe 16 biţi sau ca 2 registre pe 8 biţi. Deci
DPTR este folosit pentru adresarea memoriei externe de date și de program.
PCON ("Power Control") – este un registru pentru gestionarea energetică a microcontrolerului
(este un registru de control al alimentării).

Page 7 of 7