Documente Academic
Documente Profesional
Documente Cultură
Moore a făcut la invitaţia revistei Electronics Magazine din SUA o predicţie pentru industria
electronicii, predicţie care este valabilă şi astăzi fiind cunoscută ca Legea lui Moore care spune ca
numărul de tranzistori de pe un circuit integrat se va putea dubla la un anumit interval de timp, în
timp ce costul de producţie va continua să scadă.
Pe 19 Aprilie 2015, Legea lui Moore a împlinit 50 de ani, impactul şi efectele majore ale
acesteia fiind aplicabile nu doar în zona PC-urilor, ci şi a tabletelor, telefoanelor, televizoarelor, a
dispozitivelor wearables, în industria auto, construcţii sau medicină.
Generaţia de procesoare pe 14nm (ex: Core i5) sunt comparativ cu primul procesor Intel, Intel 4004
- realizat în anul 1971, de 3.500 de ori mai performante şi de 90.000 de ori mai eficiente, la un cost
de 1/60.000 mai mic. Dacă primii tranzistori erau vizibili cu ochiul liber fiind de mărimea unei
gume de şters din capătul unui creion, ca să vedem un singur tranzistor din procesoarele actuale,
suntem nevoiti să aducem procesorul la nivelul marimii unei case.
Evolutia numarului de tranzistori de pe un circuit integrat pe o perioada de 40 de ani si
oricum se observa faptul evolutia are un caracter pozitiv deci numarul circuitelor integrate continua
sa creasca.
Unitate
Centrală Memorie
Subsistem de intrare/ieşire
Om/proces
Elemente tehnologice
Microprocesoarele şi circuitele de suport se pot produce în următoarele tehnologii:
1 . Tehnologia bipolară – permite obţinerea unor viteze de lucru mari, dar cu un consum
ridicat şi cu probleme de climatizare deosebite.
2 . Tehnologia MOS – a evoluat mult, oferind condiţii de obţinere a unor performanţe de
viteză deosebită, în condiţiile unui consum redus şi al unui grad de integrare foarte ridicat. Există 3
familii MOS mai importante:
PMOS – se bazează pe realizarea tranzistoarelor MOS cu canal p, prin difuzia impurităţilor de
tip p (bor), într-un substrat de siliciu de tip n , pentru a forma drena şi sursa. Se remarcă prin
densitate mare de integrare, însă microprocesorul este relativ lent.
NMOS – se bazează pe relizarea tranzistoarelor MOS cu canal n prin difuzia impurităţilor de
tip n (fosfor sau arseniu) într-un substrat de siliciu de tip p, pentru a forma drena şi sursa. Se obţine
o densitate de componente similară cu cea specifică PMOS, dar asigură o viteză mai mare pentru
circuitele realizate, însă este mult mai scumpă decât tehnologia PMOS.
CMOS – combină ambele tipuri de tranzistoare într-o structură complementară, rezultatul
fiind o viteză de lucru medie, imunitate mare la zgomote şi un consum extreme de redus.
HMOS – este o tehnologie mai recentă şi a fost utilizată cu succes de firma INTEL la realizarea
tranzistoare cu canal n, proiectate special pentru a lucra la tensiuni joase şi la viteze mari.
CHMOS – este rodul îmbinării performanţelor de viteză deosebită ale tehnologiei HMOS, cu
consumul scăzut al celei CMOS. Rezultatul a fost remarcabil, astfel încât majoritatea producătorilor
de microprocesoare şi microcontrolere au trecut la această tehnologie.
sistemul binar, caracterizat de utilizarea a numai 2 cifre: 0 şi 1. Bitul reprezintă cea mai mică
Pentru unităţi mai mari, cea mai importantă este octetul, obţinut din gruparea a 2³ ═ 8 biţi.
Octetul reprezintă unitatea cea mai folosită pentru caracterizarea dimensiunii blocurilor de
memorie. Dacă această dimensiune este mare, se pot folosi multiplii acestuia:
Kilooctet ═ 210 biţi
Megaoctet═ 220 biţi═ 210 KB
Gigaoctet ═ 230 biţi ═ 210 MB ═ 220 KB
Un cuvânt este un grup de biţi ce desemnează cantitatea maximă de informaţie ce poate fi
transferată la un moment dat de un dispozitiv numeric. Cuvântul este materializat prin căi paralele
de comunicaţie a informaţiei numite magistrale. Numărul de biţi al unui cuvânt constituie lungimea
sa. Lungimea unui cuvânt este una dintre caracteristicile cele mai importante ale unui
microprocesor, deoarece hotărăşte precizia datelor şi viteza de prelucrare a acestora.
Algoritmi , programe şi limbaj maşină
Fiind dată o problemă pentru rezolvarea acesteia trebuie găsită o metodă adecvată –
algoritmul. Un algoritm este o secvenţă de operaţii, grupate într-o succesiune de etape (paşi) ce
permit rezolvarea problemelor specificate. Pentru a fi înţeles de microprocesor, algoritmul trebuie
prezentat într-un limbaj adecvat, limbaj care constă într-un set de simboluri şi reguli de sintaxă
foarte bine precizate. Materializarea algoritmului cu ajutorul unui limbaj se face într-un program ce
constă într-o succesiune de operaţii elementare – instrucţiuni.
La nivelul cel mai de jos, instrucţiunile programului se prezintă ca şiruri de biţi ce pot fi
transformate cu uşurinţă în impulsuri electrice, dar care sunt foarte greu de manevrat de către
programator. Acest limbaj, singurul înţeles de procesor este numit limbaj maşină. Din acest motiv,
au fost create programe speciale, care permit utilizarea unor limbaje mai apropiate de cel uman
(limbaj de asamblare).
Ulterior au fost create o multitudine de limbaje (BASIC, FORTRAN, C etc) , numite de nivel
ridicat, a căror scop a fost găsirea unei modalităţi cât mai accesibile de a programa un
microprocesor.
DATA
BUS
IR PC
CLK SP
Gen CPU
Inst DCD CMD
Cuartz BUS
Reset INT
Unitatea de control
Asigură sincronizarea şi coordonarea operaţiilor din interiorul şi exteriorul microprocesorului.
Ca orice automat secvenţial sincron, unitatea centrală este guvernată de un semnal de tact (CLK),
produs de un circuit de ceas intern sau extern microprocesorului. În majoritatea cazurilor,
oscilatorul, care asigură tactul, este pilotat cu cuarţ şi asigură frecvenţe între 1 şi 40 MHz
(microprocesoarele ce echipează calculatoarele moderne ajung până la frecvenţe de ordinal GHz).
În principal, unitatea de control solicită instrucţiunile stocate în memoria de program, le
decodifică şi pe baza acestora comandă funcţionarea celorlalte blocuri (ALU, registre etc ) interne
microprocesorului, în vederea executării corecte a acestora.
Unitatea logico – aritmetică
ALU execută operaţiile aritmetice şi logice impuse de instrucţiunile programului, sub
coordonarea directă a unităţii de control.
Operaţiile aritmetice pot fi: adunare şi scădere (de bază - obligatorii), respectiv înmulţire,
împărţire, ridicare la putere (suplimentare).
Operaţiile logice pot fi: NU, ŞI, SAU (de bază - obligatorii), respectiv SAU – EXCLUSIV,
deplasări, rotiri (suplimentare).
Participanţii la o operaţie aritmetică sau logică se numesc operanzi, iar semnul grafic asociat
acesteia se numeşte operator. Dacă operaţia necesită un singur operand (schimbarea semnului sau
negarea), ea se numeşte operaţie unară. Dacă operaţia necesită 2 operanzi (adunare, ŞI logic), ea se
numeşte binară.
Registrele interne
Au rolul de a stoca temporar operanzii şi rezultatele vehiculate prin ALU, pe parcursul uneia
sau mai multor instrucţiuni. Registrele folosite în mod uzual la calcule se numesc registre generale,
iar cele folosite la operaţii speciale (adresarea, manevrarea stivelor) se numesc registre funcţionale.
Registrele generale pot îndeplini mai multe roluri:
- manevră – pentru stocarearea temporară a unui operand sau a unui rezultat;
- acumulator (ACC) – registru folosit în operaţiile de adunare pentru cumularea unui şir de
valori (unul din operanzi se găseşte într-un registru de lucru, iar celălalt îl constituie chiar conţinutul
acumularorului), iar la sfârşit rezultatul se depune tot în acumulator;
- contor – cu autoincrementare sau cu autodecrementare, ce permite realizarea simplă a
buclelor de program şi parcurgerea şirurilor de date;
-bază (B) şi index (X) – ce permite adresarea şirurilor de valori (vectori), plasate în locaţii
succesive de memorie;
-indicator de stivă (SP) - permite adresarea unei zone de memorie (stivă), special creată
pentru a facilita manevrarea datelor, pe principiul ultimul sosit–primul servit (LIFO), prin operaţii
de tipul PUSH, POP, precum şi execuţia subrutinelor sau a tratării întreruperilor.
Un microprocesor posedă cel puţin 2 registre generale (acumulator şi manevră). Majoritatea
microprocesoarelor folosesc seturi de 4 – 16 registre, ce pot prelua unul din rolurile prezentate mai
sus.
Registrele funcţionale
Îndeplinesc sarcini dedicate pentru controlul derulării instrucţiunilor în microprocesor.
-Registrul de stare program (PS) – conţine o serie de informaţii ce descriu starea execuţiei
programului (indicatorii de condiţie, care reprezintă modul de terminare a unei operaţii logico-
aritmetice, utilizată la realizarea salturilor condiţionate, precum şi a indicatorilor de semnalare a
evenimentelor speciale şi a modurilor de lucru);
-Registrul de instrucţiuni (IR) – destinat stocării instrucţiunii pe parcursul execuţiei sale;
-Contorul de program (PC) – indică în permanenţă instrucţiunea curentă (de executat);
CO AO AO AR AI
a) Cod operaţie Adresă operand Adresă operand Adresă rezultant Adresă instrucţiune
CO AO AO AR sau AI
b) Cod operaţie Adresă operand Adresă operand Adresă rezultant sau Adresă instrucţiune
CO AO AO sau AI
c) Cod operaţie Adresă operand Adresă operand sau Adresă instrucţiune
CO AO sau AI
d) Cod operaţie Adresă operand sau Adresă instrucţiune
a) - instrucţiune cu patru adrese: două adrese de operanzi, o adresă pentru rezultat şi o adresă
pentru următoarea instrucţiune. Formatul este incomod, datorită numărului mare de argumente, care
nu sunt folosite întotdeauna.
b) - instrucţiune cu trei adrese: două adrese de operanzi şi o adresă pentru rezultat sau pentru
următoarea instrucţiune. În acest caz se presupune că instrucţiunile sunt plasate în locaţii succesive,
astfel că adresa instrucţiunii următoare este subînţeleasă. Instrucţiunile care nu respectă această
secvenţă (salturi, apeluri de subrutine), de regulă nu sunt instrucţiuni de calcul şi ca urmare ultimul
câmp poate fi folosit pentru adresa următoarei instrucţiuni de executat.
c) - instrucţiuni cu două adrese: două adrese de operand, din care ultima poate fi pentru
următoarea instrucţiune. Rezultatul unei operaţii este depus într-un loc implicit cunoscut (de obicei,
în acumulator).
d) - instrucţiuni cu o singură adresă: o adresă de operand sau pentru următoarea instrucţiune.
În această situaţie atât unul din operanzi, cât şi rezultatul operaţiei au un loc prestabilit. Acest
format este cel mai economic.
Microprocesoarele actuale folosesc , de obicei , instrucţiuni cu format variabil cu una sau cu
două adrese , deoarece permit o utilizare optimă a memoriei de program şi o scurtare semnificativă
a timpului de extragere – decodificare .
Adresarea implicită
Pleacă de la ideea că adresa (locul) unui operand este implicit cunoscută şi definită chiar de
operaţia executată, în timp ce al doilea operand se află într-un registru de lucru.
Multe instrucţiuni cu adresare implicită sunt reprezentate pe un singur cuvânt, necesitând
pentru extragere o singură referire la memorie.
Ex: ADD r ACC ← ACC + r ,
unde r este un registru de lucru;
Adresarea directă
Este legată de prezenţa unui operand în memorie, în care adresa lui nu mai poate fi implicit
cunoscută. Corpul instrucţiunii are un câmp explicit pentru adresă. În timpul execuţiei instrucţiunii
se mai face o referire suplimentară la memorie, pentru extragerea operandului.
Ex : ADD r , adr r ← r + ( adr ) ,
unde (adr) este conţinutul locaţiei de memorie cu adresa adr.
În cazul instrucţiunii de forma:
ADD adr ACC ← ACC + ( adr ) ,
avem un caz tipic de combinaţie a adresării implicite şi a celei directe.
Adresare imediată
Presupune aducerea operandului chiar în corpul instrucţiunii (înlocuind corpul de adresă cu
operandul). Avantajul constă în economia unor referiri suplimentare la memorie în timpul execuţiei
unei instrucţiuni, util mai ales la operaţii cu constante.
ADD r ,4 r←r+4 ,
unde 4 este o constantă plasată în corpul instrucţiunii.
Adresarea indexată
Este principalul mijloc de adresare a şirurilor de date dispuse la adrese consecutive, pornind
de la o adresă de bază. Adresarea indexată utilizează un registru special, numit registru de index, în
care se plasează numărul de ordine al elementului din şir, care trebuie prelucrat. În corpul
instrucţiunii sunt specificate adresa de bază şi adresa registrului de index.
Ex : ADD r , adr [ x ] r ← r + ( adr +x )
Adresarea bazată
Este folosită ca mijloc alternativ (la adresarea indexată) de acces la şirurile de date. Adresa
şirului este plasată în registru special numit registru de bază, iar indexul face parte din corpul
instrucţiunii.
Adresarea bazată combinată cu adresarea indexată dau un mijloc foarte eficient de acces la
blocurile mari de date.
Ex : ADD r , B[10] r ← r + (B+10) ,
unde r este registrul de lucru, B este registrul de bază, iar prin (B+10) se înţelege conţinutul
locaţiei de memorie cu adresa dată de registrul de bază la care s-a adăugat 10.
Înlocuind constanta 10 cu x, adică B[x] se obţine o adresare bazată şi indexată.
Adresarea indirectă
Este o modalitate de regăsire a informaţiei pe baza interpretării operandului, nu ca o valoare
de calcul ci ca o nouă adresă de unde se poate extrage valoarea sa adevărată. Adresarea indirectă
permite partajarea unei date între mai multe unităţi de program, dar şi accesul la şirurile de date.
EX : ADD r , (adr) r ← r+(adr)
Prin (adr) se înţelege conţinutul locaţiei de memorie cu adresa adr, la care se află o nouă
adresă.
Alte tipuri de adresări:
-adresare relativă – la care calculul adresei se face în raport cu conţinutul contorului de
program;
-adresare cu autoincrementare şi autodecrementare (punere şi extragere din stivă);
-adresare paginată;
De obicei microprocesoarele nu admit combinarea oricărei insrucţiuni cu orice mod de
adresare. Instrucţiunile de transfer implementează cele mai multe moduri de adresare.
Memoria
Sistemele cu microprocesoare utilizează două tipuri de memorii pentru stocarea datelor si
programelor.
-Memorie numai cu posibilitate de citire care este nevolatilă şi care este scrisă de utilizator
(EPROM şi EEPROM), aceasta fiind memoria de program.
-Memorie cu posibilităţi de citire/scriere (RAM), care este volatilă şi serveşte la stocarea
temporară a informaţiilor (date rezultate şi chiar programe), aceasta fiind memoria de lucru.
Microprocesoarele de uz general, de regulă multicip, nu dispun de resurse proprii de memorie
(cu excepţia registrelor de lucru ce pot fi considerate memorii RAM foarte rapide dar de capacitate
mică).
Multe microprocesoare sunt dotate cu memorie RAM proprie foarte rapidă, de capacitate
relativ modestă (4 ÷ 16 KB), al cărui rol este de a funcţiona ca tampon între CPU şi memoria
externă, mai lentă, dar de mare capacitate. Această memorie, numită memorie CACHE, realizează
funcţia de accelerator, împreună cu un dispozitiv intern de gestionare, funcţie ce este complet
transparentă pentru utilizator.
=======================================================================
Subsistemul de intrare/ieşire
Face legătura între microprocesor şi periferice prin interfeţe specializate, numite generic
porturi. În principiu, transferul datelor de la sau către porturi se face cu instrucţiuni speciale, numite
instrucţiuni de intrare/ieşire. Citirea unui port se face cu o instrucţiune de intrare (IN), iar scrierea
către un port se face cu o instrucţiune de ieşire (OUT). Utilizatorul are acces la funcţiile interfeţei
prin intermediul registrelor acesteia. Registrele de interfaţă se grupează în trei categorii:
-registre de control, destinate manevrării interfeţei şi perifericului asociat;
-registre de stare, cu ajutorul cărora se verifică condiţiile şi modul de execuţie al operaţiilor,
precum şi erorile apărute;
-registre de date, prin care se face transferul propriu – zis.
CMD BUS
Decodor şi R
control e
AD BUS interfaţă g
i
R
e
g
DISPOZITIV
PERIFERIC
R
e
g
Tipuri de Interfeţe
-interfaţa paralelă – permite interconectarea perifericelor cu viteză de lucru ridicată;
-interfaţa serială – permite interconectarea perifericelor cu viteză redusă, dar folosind un
număr mic de linii (de regulă două sau trei), conform unui standard (RS 232, RS 422, RS 485 etc);
-contor/temporizator: este o interfaţă specială folosită ca şi contor sau generator de impulsuri
programabil;
-interfaţa video: permite obţinerea imaginilor grafice ale caracterelor sau curbelor pe un ecran
monitor TV sau cu cristale lichide.
Ciclu de citire
T1 T2 T3
CLK
MRQ , IRQ
RD
CLK
MRQ , IRQ
WR
Întâi microprocesorul pune o adresă validă pe liniile AD BUS (locaţie de memorie sau
registru I/O), apoi activează pe rând semnalele care specifică natura dispozitivului ( MRQ sau
IORQ ) şi apoi operaţia dorită ( RD sau WR ).
În timpul ciclului de citire, microprocesorul aşteaptă dispozitivul adresat să pună pe
magistrala de date un cuvânt valid, pe care-l preia spre sfârşitul ciclului.Dacă dispozitivul nu poate
răspunde în timp util, el poate folosi dezactivarea liniei READY, forţând microprocesorul să
aştepte.
Folosirea liniei READY pentru sincronizarea cu dispozitive lente determină microprocesorul
să insereze automat o succesiune de stări de aşteptare, acestea sunt introduse în interiorul ciclului,
lungindu-i convenabil durata. Dacă dispozitivul adresat nu activează linia READY, sistemul se
poate bloca.
Aşteptarea programată
În forma sa cea mai simplă, constă într-o secvenţă de program care citeşte în permanenţă o
informaţie de stare şi testează un indicator, pentr u a afla dacă evenimentele au avut loc.
Procesorul nu execută nici o altă activitate până ce evenimentul nu s-a produs rezultând timpi
inutilizabili pentru sistem.
Întreruperi
Sunt facilităţi hardware oferite de microprocesoare, prin care un dispozitiv periferic ˝atrage
atenţia˝ asupra producerii unor evenimente externe ce reclamă o intervenţie promptă.
Înainte ca o întrerupere să poată avea loc, este necesar să se îndeplinească condiţiile:
-perifericul în cauză trebuie să fie capabil să genereze o întrerupere;
-sistemul trebuie să posede toate mecanismele hardware de transmitere a semnalului de
întrerupere de la periferic la CPU;
-programul ce se execută de microprocesor trebuie să conţină secvenţe de cod special
destinate lucrului cu întreruperi (rutine de tratare a întreruperilor);
-perifericul trebuie să genereze semnalul de întrerupere.
Apariţia unei întreruperi în activitatea curentă a microproesorului determină următoarea
secvenţă de evenimente:
-instrucţiunea în curs de execuţie se încheie normal;
-starea internă a procesorului (registrul de stare şi contorul de program) este salvată pentru a
permite mai târziu reluarea activităţii din locul unde a fost întreruptă;
-microprocesorul încarcă noi informaţii de stare şi execută un salt de la o rutină de tratare
specifică, ce realizează toate acţiunile urgente implicate de apariţia evenimentului;
-la sfârşitul rutinei de tratare (marcat cu o instrucţiune de revenire din întrerupere IRET) se
restaurează starea procesorului salvată anterior;
-restaurarea este încheiată cu reîncărcarea contorului de program cu valoarea salvată şi prin
aceasta, reluarea programului întrerupt.
Observaţii
-tratarea întreruperii trebuie să înlăture cauza apariţiei acesteia, astfel secvenţa de mai sus se
poate repeta;
-dacă sosesc noi întreruperi de aceeaşi natură, în timpul execuţiei rutinei de tratare, se poate
ajunge la situaţia ca aceasta să fie restartată recursive, până la apariţia unor erori sau pierderea
controlului asupra programului;
-procesoarele actuale suportă instrucţiuni ce permit activarea, respectiv dezactivarea tratării
întreruperilor. Pe baza acestora se pot elimina întreruperile neprevăzute.
Microprocesoarele mai simple sunt dotate cu o singură intare pentru semnale de întrerupere
(INT), dar cele mai multe posedă o intrare suplimentară (NMI), care permite tratarea unor
evenimente imperative, motiv pentru care nu există nici un mecanism intern de inhibare a
acestora
(întreruperi nemascabile). O problemă importantă apare la conectarea întreruperilor de la mai multe
periferice. Cum pot fi luate acestea în considerare dacă microprocesorul dispune doar de o singură
intrare INT. Răspunsul este dat de introducerea unui mecanism de multiplexare/arbitrare a cererilor
de întrerupere, bazat pe o logică cu priorităţi.
O soluţie este folosirea unui controler de întreruperi. Acesta dispune de un codor de priorităţi
care determină solicitantul cu cel mai mare nivel de prioritate şi generează semnalul de întrerupere
către procesor. În momentul acceptării întreruperii, controlerul pune pe magistrală un cuvânt de
identificare al perifericului solicitant, astfel încât microprocesorul să fie capabil să activeze rutina
de tratare specificată.
O altă soluţie este cea în care logica de arbitrare şi multiplexare a fost distribuită chiar în
circuitele de interfaţă. Fiecare circuit are o intrare de autorizare a întreruperilor (IEI) şi o ieşire de
semnalizare a activităţii către perifericul următor (IEO). Dacă IEI═1, atunci perifericul în cauză
poate genera o întrerupere. Dacă acelaşi periferic se află în curs de tratare, el va pune IEO═0. Un
dispozitiv cu IEI═0 este obligat să transmită IEO═0.
Prioritatea este stabilită pe baza poziţiei fizice a perifericului într-un lanţ de priorităţi.
Odată generată întreruperea şi acceptată de procesor, perifericul îşi va pune cuvântul de
identificare pe magistrală, pentru a permite activarea rutinei de tratare corectă.
‘1’
IEI
Periferic 1
IEO
INT
IEI
Periferic 2 MICROPROCESOR
IEO
NMI
IEI
Periferic n
IEO
Accesul direct la memorie
Permite ca două procesoare să partajeze aceeaşi magistrală în scopul realizării accesului la
aceleaşi resurse. Unul dintre ele este chiar unitatea centrală a sistemului, iar celălalt este dedicat
numai interceptării şi arbitrării cererilor provenite de la periferice, precum şi coordonării
transferurilor solicitate, fără a mai apela la unitatea centrală.
Acest procesor dedicat – controler pentru acces direct la memorie (DMA) funcţionează în două
moduri:
-modul slave, funţionând ca un circuit de interfaţă obişnuit, ce poate fi programat prin
instrucţiuni I/O, programarea are ca scop precizarea locaţiei de memorie de unde începe transferul
şi sensul transferului;
-modul master – controlerul preia controlul magistralei (după ce a primit acceptul CPU) şi
dirijează traficul de informaţie, generând toate semnalele de control necesare.
Ciclurile DMA se pot întrepătrunde cu cele CPU, mai ales dacă rata de transfer a perifericului
nu este prea mare, caz în care execuţia programului principal este încetinită foarte puţin.
Multe controlere DMA sunt capabile să gestioneze mai multe periferice. Astfel, cererile DMA,
notate DRQ, emise de periferice, ajung la controler, care le arbitrează şi care solicită apoi
Procesorul termină ciclul de memorie sau I/O în curs, după care se deconectează de la
magistrală şi semnalizează acest lucru activând linia BACK.
Controlerul DMA preia acum controlul magistralei şi semnalizează acest lucru perifericului,
prin smnal de acceptare DACK. La terminarea unui transfer DMA, perifericul dezactivează linia
DRQ, controlerul elibereză magistrala, semnalizând acest lucru şi procesorului prin linia BRQ,
acesta preia din nou controlul magistralei şi totul reintră în normal.
DRQ DRQ0
DACK DACK0
BREQ BREQ
BACK BACK
DRQ DRQ1
Microcontrolerul 8051(INTEL)
Familia de microcontrolere de 8 biţi MCS51 lansată şi produsă de Intel a devenit practic un
standard industrial. Ea a stat la baza dezvoltării de microcontrolere compatibile realizate de firme
ca: Philips, Siemens, Dallas, etc. Arhitectura MCS51 este optimizată pentru aplicaţii de control.
Intel oferă o gamă largă de microcontrolere compatibile cu 8051 ce diferă între ele doar prin opţiuni
şi tehnologie. Principalele caracteristici ale familiei MCS51 sunt prezentate în tabelul următor:
CHIP ROM intern RAM intern Timere Surse int.
16 biti
8031 - 128 2 5
8051 4k 128 2 5
80C51 4k 128 2 5
8032 - 256 3 6
8052 8k 256 3 6
80C52 8k 256 3 6
89C52 8k Flash 256 3 6
Memoria de program
După reset CPU îşi începe execuţia de la adresa 0000H unde trebuie să existe o instrucţiune
de salt peste zona vectorilor de întrerupere. Această zonă începe de la adresa 0003H unde este
plasată rutina de tratare a întreruperii externe INTR0. Harta memoriei program arată astfel:
FFFFh FFFFh
ROM
extern
ROM
2000h extern
sau
1FFFh
ROM
intern
0000h 0000h
Adresele vectorilor de tratare a întreruperilor sunt:
0003h INTRO 0
000Bh Timer 0
0013h INTR 1
001Bh Timer 1
0023h Seriala
002Bh Timer 2 (doar pentru 8x52)
Dacă rutina de tratare a întreruperii este foarte scurtă ea poate fi plasată în cei 8 octeţi
rezervaţi. Rutinele mai lungi pot folosi o instrucţiune de salt peste locaţiile rezervate întreruperilor
următoare, dacă acestea se folosesc.
Cei 4k octeţi (8k octeţi la 8x52) de memorie program pot fi în capsulă sau extern. Această
selecţie este posibilă folosind linia EA (External Acces). Daca EA=0 se accesează 64k octeţi
memorie externă. Dacă EA=1, atunci se execută program din:
- memoria internă 4k octeţi (0000h-0FFFh);
- memoria externa de până la 64k octeţi între adresele 1000h şi FFFFh.
În timpul execuţiei programului din memoria internă nu se generează semnalul PSEN.
Porturile P0 şi P2 sunt dedicate pentru a se folosi ca magistrală de adresă. Deasemenea P0 este
folosit şi ca magistrală de date prin multiplexarea adreselor A0-A7 şi datelor D0-D7.
Modul de conectare al memoriei program este prezentat în continuare:
P0 DO-D7
80C51
LATCH AO-A7
PROG
P2 A8-A15
PSEN OE
adresă la portul P0. Cu ajutorul semnalului ALE (Adress Latch Enable) se înscrie această adresă
într-un latch. Între timp la portul P2 se emite octetul superior al PC. Odată ce adresa este stabilă
se activează semnalul PSEN pentru citirea datelor din memoria de program, date care sunt citite
de portul P0.
Zona de uz
general
30h
28h 7Fh 2Fh Zona adresabila
la nivel de bit
20h 00h
18h 1Fh
10h 17h Zona registrelor
R0-R7
08h 0Fh
00h R0 R1 R2 R3 R4 R5 R6 R7 07h
Spaţiul 00h-07h reprezintă, după reset, grupul de registre R0-R7 utilizate pentru surse sau
destinaţii în multe instrucţiuni ca:
ADD A,Rn
MOV Rn,#data
Într-o astfel de instrucţiune, registrele R0-R7 sunt adresate direct cu un câmp de 3 biţi
( n 0 7 ) cuprins împreună cu codul operaţiei, în primul octet corespunzător codului maşină al
instrucţiunii. Ex:
ADD A,Rn cod instr.: 0010.1rrr
ADD A,R0 28h
ADD A,R1 29h
....................
ADD A,R7 2Fh
Registrele R0 şi R1 sunt utilizate şi pentru adresarea indirectă a memoriei de date interne ca de
exemplu, în instrucţiunile:
MOV A,@Ri
ADD A,@Ri
INC @Ri
În aceste instrucţiuni indicele i cu valorile 0 sau 1 este precizat în primul cuvânt din codul
maşină printr-un bit. Deasemenea, registrele R0 şi R1 sunt utilizate pentru adresarea indirectă a
memoriei de date externe în instrucţiunile:
MOVX A,@Ri
MOVX @Ri,A
În aceste instrucţiuni, conţinutul registrului R0 sau R1 reprezintă octetul mai puţin semnificativ
al adresei. Octetul mai semnificativ al adresei este dat de portul P2.
Există posibilitatea ca, prin programarea biţilor RS1 şi RS0 ai registrului de stare a
programului (PSW), grupul de registre R0-R7 să fie ales conform tabelului:
Locaţiile memoriei din spaţiul 20h-2Fh reprezintă o zonă de memorie adresabilă şi la nivel de
bit în instrucţiuni de tipul:
CPL bit
JB bit,rel
Adresarea biţilor se realizează direct, cu un octet conţinut în codul maşină al instrucţiunii
corespunzatoare. Ex:
CPL C are codul 10110011
CPL bit are codul 10110010 adr.bit
Zona de memorie 80h-FFh este o zonă de memorie cu acces direct şi pe bit folosită pentru
registrele cu funcţiuni speciale. La microcontrolerul 8x52 această zonă este dublată cu o zonă de
memorie RAM dar la care accesul se face numai indirect. Astfel memoria internă de date arată
astfel:
FFh
Adresabila Adresabila
numai indirect numai direct
(8x52) (SFR)
80h
7Fh
Adresabila
direct si
indirect
00h
Memoria internă de date este utilizată deasemenea pentru stivă. Registrul indicator de stivă SP este
încărcat, după reset, cu valoarea 07h. Există posibilitatea de modificare a zonei din memoria internă de
date utilizată pentru stivă, prin încărcarea altei valori în registrul SP.
De exemplu prin încarcarea valorii 2Fh în registrul SP stiva începe de la valoarea 30h.
Moduri de adresare
Modurile de adresare folosite de microcontrolerul 8051 sunt:
Adresare directă
În adresarea directă operandul este specificat de un câmp de 8 biţi de adresă din instrucţiune. Doar
RAM-ul intern de date şi SRF pot fi adresate direct.
Ex: MOV A,30h
MOV A,DPL
Adresarea indirectă
În adresarea indirectă instrucţiunea specifică un registru ce conţine adresa operandului. Doar
RAM-ul intern şi cel extern poate fi adresat indirect. Adresa pe 8 biţi a operandului se află în unul
din registrele R0 sau R1. Registrul Ri, i=0 sau 1 este precizat printr-un bit din codul maşină al
instrucţiunii.
Ex: MOV A,@Ri 1110 011I
MOV @Ri,A 1111 011I
MOV @Ri,direct 1010 011I ADR.DIRECT
MOV direct,@Ri 1000 011I ADR.DIRECT
Adresa pe 16 biţi a operandului se află în DPTR fiind folosit pentru transfer de date din memoria
RAM externă în instrucţiuni de tipul:
MOVX A,@DPTR
MOVX @DPTR,A
Instrucţiuni cu regiştrii
Instrucţiunile cu regiştrii de lucru interni (R0-R7) au avantajul eliminării unui octet de adresă
din instrucţiune deoarece adresa operandului se poate coda pe 3 biţi din codul instrucţiune.
Ex: MOV A,Rn 1110 1rrr
MOV Rn,direct 1010 1rrr adr direct
Există şi instrucţiuni specifice orientate pe manevrarea regiştrilor. Unele instrucţiuni operează
doar în acumulator sau DPTR nefiind necesar nici un octet suplimentar de adresă în codul
instrucţiunii.
Ex: CLR A 1110 0100
DEC A 0001 0100
DIV A,B 1000 0100
JMP @A+DPTR 0111 0011
MOVX A,@DPTR 1110 0000
Constante imediate
Valoarea constantei urmează codului în memoria program. De exemplu MOV A,#data
încarcă valoarea dată în acumulator.
Ex: MOV A,#100 100 A
MOV A,#64H
Adresarea indexată
Se foloseşte pentru a accesa memoria de program ce poate fi doar citită. Acest mod se
foloseşte pentru a citi tabele din memoria de program. Registrul de bază de 16 biţi (unul din registre
DPTR sau PC) indică baza tabelului iar acumulatorul este incărcat cu poziţia din tabel dorită.
Adresa de citire din tabelă rezultă ca sumă dintre conţinutul acumulatorului şi pointerul de bază.
Tipuri de instrucţiuni
Instrucţiuni aritmetice
Aceste instructiuni sunt:
Adunare ADD A,<BYTE>
Adunare cu C ADDC A,<BYTE>
Scădere SUBB A,<BYTE>
Incrementare INC <BYTE>
Decrementare DEC <BYTE>
Înmulţire MUL AB
Împărţire DIV AB
Ajustare zecimală DA
Instrucţiuni logice
Instrucţiunile logice disponibile sunt:
ANL A,<BYTE>
ANL <BYTE>,A
ANL <BYTE>,#data
ORL <BYTE>,A
ORL A,<BYTE>
ORL <BYTE>, #data
XRL A,<BYTE>
XRL <BYTE>, A
XRL <BYTE>,#data
CLR A
CPL A
RL A
RLC A
RR A
RRC A
SWAP A
O operaţie de tipul ANL A,<byte> poate lua una din formele următoare:
Adresare directă ANL A,30H
Adresare indirectă ANL A,@R1
Adresare registru ANL A,R6
Adresare imediată ANL A,#100