Sunteți pe pagina 1din 25

În 1965, cu 3 ani înainte de înfiinţarea companiei Intel, viitorul co-fondator Gordon E.

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.

Aparatele şi sistemele controlate cu microprocesor au apărut şi s-au perfecţionat odată cu


apariţia pe piaţă a miroprocesoarelor (1970 -1980) după care (în special după 1985) s-au răspândit
foarte rapid, înlocuind aproape complet aparatele şi sistemele de măsură şi control numerice clasice
(cu logică cablată), atît în tehnica de laborator cît şi în instrumentaţia industrială, mai ales în
controlul automat.
Clasificarea sistemelor cu microprocesor

În funcţie de complexitatea sistemului din care face parte vom avea:


- aparate de măsură cu microprocesor – utilizate ca instrumente de laborator sau de teren;
- sisteme de măsură cu microprocesor – folosite în complexe de măsură şi control în industrie.
1.1Avantajele folosirii microprocesoarelor în sistemele de măsură şi control
Includerea unui microprocesor într-un sistem de măsură şi control dă posibilitatea ca
manevrele de operator să fie preluate (parţial sau total) de către microprocesor şi în plus să se obţină
cîteva avantaje importante:
1. Preluarea comenzilor de operator cum ar fi reglaje de zero şi de cap de scară, selectarea
gamelor asigurând un plus de precizie şi siguranţă în exploatare.
2. Autocalibrarea şi compensarea automată a influenţei factorilor de climă. De asemenea se
calculează abaterile şi se corectează rezultatul final al măsurării.
3. Îmbunătăţirea preciziei prin eliminarea erorilor sistematice (prin autocalibrare, autocorecţie).
4. Micşorarea numărului de componente ale sistemului prin eliminarea componentelor
destinate implementării logicii cablate.
5. Creşterea versatilităţii aparatului prin obţinerea unor posibilităţi suplimentare de măsură pe
baza programelor interne.
6. Creşterea vitezei de lucru prin automatizarea operaţiilor de măsurare.
7. Posibilitatea determinării prin calcul a altor parametrii de semnal (valoare de vârf, valoare
medie, valoare efectivă, calculul distorsiunilor, a spectrului de amplitudini, determinarea fazei,
defazajului).
8. Posibilitatea autotestării prin programe speciale executate de microprocesorul încorporat, la
comanda operatorului sau în cazul apariţiei unei anomalii in funcţionare. În acest caz se poate
declanşa o procedură de testare şi semnalizare a eventualelor defecte.
Toate aceste avantaje arată clar că sistemele de măsură şi control moderne nu pot exista fără a
fi controlate de către microprocesoare.
Arhitectura Harvard este o arhitectură a calculatoarelor caracterizată prin stocarea separată a
instrucțiunilor și datelor. Numele acestei arhitecturi provine de la sistemul de calcul Harvard Mark
I, ce stoca instrucțiunile pe 24 biți pe o bandă perforată, iar datele în contoare electromecanice ce
permiteau 23 de cifre.
Din cauza lungimii cuvintelor, a tehnologiei de implementare și a structurii memoriei de
adresare diferite, în cadrul acestei arhitecturi nu este necesar ca cele două tipuri de
memorie (program si date) să dispună de aceleași caracteristici. De regulă memoria pentru
instrucțiuni are o capacitate mai mare decât cea de date. De exemplu, microcontrolerele PIC au un
cuvânt de date de 8 biți și o lungime a instrucțiunii de 12, 14, 16 sau 32 biți.

1.2 Microprocesoare : o privire generală


În cele ce urmează ne vom referi la un microprocesor generic (presupus de 8 biţi) şi vom
începe cu precizarea unor termeni şi notaţii utilizate în lucrările din domeniul microprocesoarelor.
Definiţii şi terminologie
Sistemul de calcul este un echipament care transformă datele de intare în rezultate de ieşire pe
baza unui algoritm materializat într-un program. Această definiţie reprezintă sensul clasic al
noţiunii de calculator .
Sistemele inteligente sunt acele sisteme care pot prelucra informaţii incomplet definite sau
aproape complet definite. Astfel de sisteme sunt sistemele fuzzy sau reţelele neuronale.
În cazul în care informaţiile de prelucrat sunt complet definite atunci avem de-a face cu
algoritmi secvenţiali. Acest tip de algoritmi a stat la baza construcţiei maşinilor secvenţiale (Von
Newman).
Dacă operaţiile elementare independente se pot executa paralel (pe mai multe unităţi de calcul),
avem de-a face cu algoritmi paraleli.
Începând cu anii 1970 au apărut tendinţe de automatizare a proceselor de producţie bazate
iniţial pe automate numerice cablate (logică cablată) şi apoi pe sisteme cu microprocesoare (logică
programată). De dată recentă sunt sistemele bazate pe arhitecturi paralele (sisteme multiprocesor ,
sisteme distribuite).
În funcție de necesarul de memorie, instrucțiunile pot fi stocate de exemplu într-o memorie de
tip ROM („read-only”), în timp ce datele se află într-o memorie de tip „citire-scriere”.
Arhitectura Harvard are spații de adresare separate pentru date și instrucțiuni: adresa 0 pentru
date nu este aceeași cu adresa 0 pentru instrucțiuni.
În arhitectura von Neumann pură CPU-ul poate fie citi o instrucțiune, fie citi/scrie date din/în
memorie. Nu pot fi efectuate ambele operațiuni simultan, deoarece se folosește aceeași magistrală.
Prin contrast, într-un calculator bazat pe arhitectura Harvard, CPU-ul poate citi o instrucțiune și în
același timp poate accesa și date, chiar și fără cache. De aceea o arhitectură Harvard poate fi mai
rapidă: fetch-urile instrucțiunilor și accesul la date nu concurează pentru aceeași cale de transfer de
date. 
În perioada modernă, arhitectura Harvard este folosită în principal în două tipuri de
dispozitive:
Procesoarele de semnale (DSP) specializate din cadrul dispozitivelor pentru prelucrarea
semnalelor audio și/sau video.
Microcontrollerele din cadrul aplicațiilor electronice (PIC de la Microchip, AVR de la
Atmel); acestea dispun de dimensiuni mici ale memoriilor de program și de date și se folosesc de
avantajul arhitecturii RISC – executarea instrucțiunilor într-un ciclu mașină (nu neapărat un ciclu de
ceas).

Începând cu anii 1970 au apărut tendinţe de automatizare a proceselor de producţie bazate


iniţial pe automate numerice cablate (logică cablată) şi apoi pe sisteme cu microprocesoare (logică
programată). De dată recentă sunt sistemele bazate pe arhitecturi paralele (sisteme multiprocesor ,
sisteme distribuite).
Arhitectura maşinii secvenţiale standard (Von Newman) este următoarea:

Unitate Memorie

Centrală

Subsistem de intrare/ieşire

Om/proces

Unitatea centrală (CPU-Central Processing Unit), transformă datele în rezultate pe baza


execuţiei instrucţiunilor programului memorat.
Memoria este mediul principal de stocare/regăsire a datelor, rezultatelor şi programelor.

Subsistemul de intrare-ieşire este destinat realizării interfeţei om-maşină sau proces-maşină.


Partea fizică a unui sistem de calcul (componentele electronice) este relativ simplă, poate fi
produsă în serie şi este relativ ieftină. Termenul hardware se referă tocmai la această parte
Ceea ce transformă acest echipament ieftin într-o diversitate de instrumente, controlere
industriale, calculatoare speciale sau de uz general, sunt programele (utilitare sau de aplicaţii) şi
sistemele de programe (operare, exploatare), adică software care vor determina hardware-ul de uz
general să execute ceea ce dorim.
Un alt termen frecvent utilizat este firmware, care desemnează programe speciale stocate în
memorii nevolatile, al căror rol este de a asigura facilităţi de configurare şi testare a echipamentului,
precum şi minima sa funcţionare. Exemplu biosul de la calculatoarele personale.
Microprocesoarele actuale se produc într-o gamă largă de variante, de la cele de uz general
sau cele destinate aplicaţiilor industriale, până la procesoarele de semnal sau coprocesoarele cu
funcţii bine precizate. De asemenea, microprocesoarele pot fi:
- microprocesoare monocip (unitatea centrală şi circuitele de suport sunt dispuse în
interiorul aceleiaşi capsule de circuit integrat).
- microprocesoare multicip la care unitatea centrală şi circuitele de suport, sunt realizate sub
formă de circuite integrate distincte.
Microprocesoarele pentru aplicaţii dedicate mai ales cele destinate mediului industrial sunt
realizate monocip, oferind un plus de comoditate în proiectare şi o fiabilitate sporită. De exemplu,
microprocesorul 80186, al firmei Intel, include aproximativ toate componentele sistemelor cu
8086, adică unitatea centrală, generatorul de tact, controlerul de magistrală şi cel de întreruperi,
controlerul DMA, contor/timer-ul, logica de decodificare, etc.
Deseori microprocesoarele monocip includ atât memorie de lucru, cât şi interfeţe de
intrare/ieşire, adică structura minimală a unui microcalculator, motiv pentru care ele se mai numesc
şi microcalculatoare într-un singur cip (Single Component Microcomputer). Deoarece această
categorie de microprocesoare sunt destinate mai ales aplicaţiilor de control în mediul industrial, ele
se întâlnesc şi sub denumirea de microcontrolere.
Microprocesoarele de uz general multicip au fost realizate şi în variante monocip, purtând
numele de microprocesoare înglobate. De exemplu, familiile 80186 sau 80386EX sunt produse de
Intel şi în varianta monocip având avantajul utilizării suportului de programe şi exploatare dezvoltat
pentru sistemele de calcul existente curent pe piaţă (de exemplu calculatoarele personale).

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

noilor sale generaţii de microprocesoare şi microcontrolere. Această tehnologie foloseşte

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.

Biţi , octeţi , cuvinte


Marea majoritate a echipamentelor numerice folosesc pentru reprezentarea internă a numerelor

sistemul binar, caracterizat de utilizarea a numai 2 cifre: 0 şi 1. Bitul reprezintă cea mai mică

unitate de informaţie, echivalentă cu o afirmaţie (DA , 1) sau o infirmaţie (NU, 0).

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.

Logică cablată şi logică programată


Logica cablată presupune un automat de control în care secvenţa de semnale de
sincronizare/coordonare sunt elaborate pe baza unei scheme fixe (de obicei cu porţi şi bistabile
interconectate convenabil), imposibil de modificat.
Logica programată se bazează pe un automat de control flexibil, capabil să genereze semnale
de sincronizare/coordonare, pe baza unui program executat de microprocesor. Majoritatea aparaturii
moderne utilizează logică programată. Prin simpla modificare a programului, întreaga funcţionare a
aparatului se poate schimba.

Puterea de calcul şi viteza de lucru a microprocesorului


Prin putere de calcul se înţelege mai ales capabilitatea de prelucrare numerică a acestuia şi
este determinată de lungimea cuvântului, de arhitectura internă şi viteza de execuţie a
instrucţiunilor.Viteza microprocesorului este condiţionată de 2 factori:
-Frecvenţa ceasului – un tact mai rapid determină un procesor să execute un program mult mai
rapid;
-Arhitectura internă – permite creşterea vitezei de lucru (menţinând frecvenţa ceasului
neschimbată) pe baza trecerii de la execuţia strict secvenţială a operaţiilor, la execuţia lor paralelă,
într-un mod transparent pentru utilizator, folosind tehnici ca: utilizarea memoriilor CACHE,
creşterea numărului de magistrale interne ale unităţilor de prelucrare, succesiune pipeline
(suprapunerea parţială a operaţiilor).
-Viteza de execuţie a instrucţiunilor – este dificil de măsurat direct. Se defineşte de obicei ca
durata de execuţie a unor instrucţiuni foarte des folosite sau ca număr mediu de instrucţiuni
executate într-o secundă.
-Setul de instrucţiuni - condiţionează indirect viteza de calcul. Cu cât modul de codificare a
instrucţiunilor este mai simplu şi secvenţa microoperaţiilor este mai rapidă, cu atât microprocesorul
va avea o viteză de lucru mai mare.
Microprocesoarele cu set complet de instrucţiuni (CISC) consumă un timp relative ridicat pe
instrucţiune, dar compensează acest lucru printr-o gamă diversă de instrucţiuni.
Spre deosebire de ele, microprocesoarele cu set redus de instrucţiuni (RISC) sunt optimizate
astfel încât instrucţiunile să fie executate foarte rapid, chiar mai multe într-un singur tact maşină .
Arhitectura internă a unui microprocessor
Ca orice unitate centrală a unui sistem de calcul, microprocesorul conţine următoarele
componente principale:
- unitatea de control CPU ;
- unitatea logico-aritmetică ALU;
- registre interne;

Cuartz
Acestea comunică între ele prin căi de transfer a informaţiei numite magistrale, ce leagă între
ele mai multe dispozitive, dar la un moment dat doar două dispozitive pot schimba informaţie:
sursa şi destinaţia. Coordonarea transferurilor pe magistrală se face de către un dispozitiv master,

CLK
Gen
cele subordonate fiind slave. Microprocesorul posedă şi o magistrală internă, legată printr-o
interfaţă la magistrala externă.

TMP

ACC
Structura internă a unui microprocesor generic este următoarea:
Inst DCD

ALU
PS
IR
Reset

CPU

REG DCD
INT

R3
R1
SP
PC

B
X
R2
R4
BI

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,
DATA

ADD
CMD

BUS
BUS
BUS

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);

Execuţia instrucţiunilor şi indicatorii de condiţie


Vom considera citirea şi execuţia unei instrucţiuni tipice de un cuvânt. Pentru aceasta:
-de la adresa conţinută în contorul de program (PC) interfaţa de magistrală citeşte un cuvânt,
printr-un ciclu de citire al instrucţiunii
-conţinutul locaţiei citite este transferat prin magistrala internă în registrul de instrucţiuni (IR);
-contorul de program este incrementat pentru a indica instrucţiunea imediat următoare;
-imediat ce codul instrucţiunii este disponibil, în registrul de instrucţiuni (IR), el este decodificat
şi transformat în semnale de activare a diverselor microoperaţii din care este compusă execuţia
propriu-zisă a instrucţiunii;
-încă din faza finală a execuţiei instrucţiunii, se poate declanşa citirea instrucţiunii următoare;
În cazul instrucţiunilor de mai multe cuvinte, se fac referiri succesive la memorie.
Multe microoperaţii presupun folosirea ALU pentru calcule “ascunse” (calcule de adresă).
Operaţiile de calcul produc rezultate ce trebuie testate pentru a lua o decizie. ALU dispune de un set
de bistabili care fac parte integrantă din registrul de stare program (PS) şi care memorează modul de
finalizare al operaţiei executate. Aceşti bistabili se numesc indicatori de condiţie şi ei pot fi testaţi în
instrucţiuni de salt condiţionat.
Indicatorii cei mai utilizaţi sunt prezentaţi în continuare:
-Z (ZERO) – se setează dacă rezultatul este nul;
-S (SIGN) – se setează dacă rezultatul este negativ;
-C (CARRY) – se setează dacă apare un transport;
-V (OVERFLOW) – se setează dacă rezultatul unei operaţii între numere cu semn are un
semn incorect (datorită transporturilor nedorite spre poziţia semnului).
==============================================================
Seturi de instrucţiuni
Instrucţiunea este o operaţie elementară ce se execută de microprocesor în cadrul unui
program. Orice instrucţiune este identificată pe baza unui cod de operaţie ce face parte integrantă
din corpul acesteia. Codul de operaţie este completat de informaţii suplimentare, numite uzual
argumente.
Codul operaţiei este singura porţiune a instrucţiunii care se decodifică intern şi declanşează
secvenţa de microoperaţii din unitatea de comandă (există instrucţiuni formate numai din cod).
Lista completă de instrucţiuni pe care o poate interpreta şi executa un microprocesor se
numeşte set de instrucţiuni. Instrucţiunile sunt stocate în memorie sub formă de cuvinte
consecutive, care materializează programul existând două categorii de instrucţiuni împărţite pe baza
formatului:
- instrucţiuni cu format fix – la care lungimea acestora şi structura diverselor câmpuri
componente este fixă, indiferent de codul instrucţiunii;
- instrucţiuni cu format variabil – la care lungimea şi structura câmpurilor componente este
dependentă de codul instrucţiunii.

Formate uzuale de instrucţiuni

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 .

Instrucţiuni de transfer de date


Transferă informaţia dintr-un registru (sau locaţie de memorie) în alt registru. Operaţiile
curente sunt de transfer (încărcare, memorare) şi interschimbare.

Instrucţiuni aritmetice şi logice


În această categorie intră: adunare (ADD), scădere (SUB), înmulţire (MUL), împărţire (DIV),
complementare (CPL), test şi comparare, ŞI logic (AND), SAU logic (OR), SAU exclusiv (XOR),
negare (NEG), incrementare (INC), decrementare (DEC), deplasări stânga sau dreapta, rotiri stânga
(RL) sau dreapta (RR), ştergerea (CLR) unui registru sau înscrierea unui bit cu o valoare dorită
(SETB/RESB).

Instrucţiuni de control al programului


Instrucţiunile din acestă categorie au drept caracteristică faptul că oricare din ele modifică
derularea secvenţială a programului, provocând încărcarea contorului de program cu o valoare
dintr-un câmp de adresă al instrucţiunii curente, sau cu o adresă calculată într-un pas precedent al
programului.
O instrucţiune de ramificare, numită şi salt, determină părăsirea secvenţei normale a
programului, fără un mecanism de reţinere a locului unde s-a întâmplat acest lucru. O posibilă
revenire este lăsată complet în seama programatorului.
Există două tipuri de salt:
-salt necondiţionat (JMP);
-salt condiţionat (JZ, JC), ce are loc doar dacă este îndeplinită o condiţie specificată prin
starea indicatorilor de condiţie poziţionaţi anterior.
Unele microprocesoare au o instrucţiune, considerată tot de salt, care determină CPU să
ignore una sau mai multe instrucţiuni dintr-o secvenţă (SKIP).
Instrucţiunile de apel (CALL) şi revenire (RET) din subroutine, realizează şi salvarea adresei
de întoarcere (a locului de unde trebuie reluat programul după execuţia subrutinei).
Instrucţiuni de control al microprocesorului
În acest grup pot fi înscrise unele instrucţiuni speciale de control:
-oprire (HALT) – ce suspendă execuţia programului curent până la apariţia unei cereri de
întrerupere externă ;
-nici o operaţie (NOP);
-activarea (EI) sau dezactivarea (DI) sistemului de întreruperi.

Instrucţiuni de intrare / ieşire


Acest grup include două instrucţiuni de transfer, cu porturi de intrare/ieşire, adică citire port
(IN) sau scriere port (OUT).

Tehnici de adresare a memoriei


Din analiza formatelor de instrucţiuni, am observat că pentru a defini complet operaţia de
executat este nevoie să cunoaştem locul unde sunt amplasaţi operanzii, adică adresele lor. În
general, un operand se poate afla în registre sau în memoria de lucru.
Adresa unui registru se poate codifica pe un număr redus de biţi (uzual 3 sau 4 biţi), ce
poate face parte chiar din câmpul destinat codului operaţie.
În al doilea caz, adresa locaţiei de memorie unde se află operandul este precizată într-un câmp
separat, ce face parte din corpul instrucţiunii.
Regăsirea unei informaţii presupune determinarea adresei utilizând un set de convenţii şi
metode de calcul, cunoscute sub numele de tehnici de adresare.
Principalele tehnici de adresare întâlnite la majoritatea microprocesoarelor sunt:

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.

Microprocesorul şi circuitele externe

Un sistem cu microprocesor, în afară de unitatea centrală, cuprinde memoria şi subsistemul de


intrare/ieşire ce sunt conectate printr–o magistrală externă.

Magistrală externă a unui microprocesor


Realizarea unui sistem cu microprocesor se face în jurul unei magistrale ce serveşte drept cale
de transfer a informaţiei. Şi în interiorul microprocesorului principalele sale componente sunt
dispuse tot în jurul unei magistrale, numită magistrală internă. În afara microprocesorului, aceasta
are drept corespondent magistrala externă.
Legătura între cele două magistrale se face printr-o interfaţă specială, al cărui rol este de a
asigura atât o separare electrică, un număr relativ redus de terminale externe, dar şi adaptarea la
acelaşi protocol de comunicaţie între dispozitive.
Liniile unei magistrale se grupează în date (DATA BUS), adrese (AD BUS),
comenzi/control (CMD BUS) şi alimentări.
Magistrala de date (DATA BUS), permite transferal informaţiei bidirecţional, fiind compusă
dintr-un număr de linii egal cu lungimea cuvântului microprocesorului. Disciplina de magistrală
impune ca la un moment dat într-un sistem să se afle în dialog doar două dispozitive, unul sursă şi
unul destinaţie, sensul de transfer fiind unic şi dictat de cele două tipuri de operaţii de bază admise:
citire şi scriere. Rezultă că dispozitivele ce se conectează împreună pe aceeaşi magistrală de date
trebuie să dispună de buffere cu trei stări (3-State) astfel încât să nu apară conflicte electrice în
timpul transferurilor.
Magistrala de adrese (AD BUS) este unidirecţională (de la microprocesor spre exterior) şi
serveşte la vehicularea adreselor ce permit localizarea în memorie sau într-un registru de interfaţă a
informaţiei utile.
Magistrala de comenzi (CMD BUS) conţine semnale unidirecţionale, menite să asigure
coordonarea şi sincronizarea transferurilor cu dispozitivele externe precum memorie şi interfeţe I/O.
Aceste semnale permit identificarea tipului de operaţie de transfer ( RD -citire, WR -scriere),

natura dispozitivului ( MRQ -memorie, IORQ -interfeţe I/O), precum şi natura informaţiei
vehiculate (date, MI -instrucţiuni).
Microprocesorul dispune şi de linii speciale pentru generatorul de tact (X1 şi X2, pentru
conectarea cuarţului sau CLK pentru semnalul de tact extern),precum şi pentru sincronizarea cu
dispozitivele externe (RDY), iniţializarea (RESET), cereri de întrerupere (INT) şi de magistrală
(BRQ şi BACK). Unele microprocesoare folosesc aceleaşi linii pentru adrese şi date, acestea fiind
multiplexate. La începutul fiecărui transfer, procesorul depune întâi adresele (ce pot fi ˝îngheţate˝
într-un registru LATCH) şi apoi foloseşte aceleaşi linii pentru citirea sau scrierea datelor.

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.

Structura simplificată a unei interfeţe este prezentată în figura următoare:

CMD BUS
Decodor şi
control Registru
interfaţă de control
AD BUS

DISPOZITIV
Registru
PERIFERIC
de stare
Registru
de date

DATA Registru
Tampon
BUS de date

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.

Transferuri , cicluri , stări


Principala utilitate a unei magistrale este transferul informaţiei. Pentru aceasta, un
microprocesor trebuie să precizeze:
-natura operaţiei dorite: poate fi citire sau scriere şi este identificată cu ajutorul unor semnale
speciale de pe magistrala de comenzi ( RD sau WR );
-natura dispozitivului implicat în transfer ce poate fi memorie sau interfaţă de intrare/ieşire (
MRQ - memorie, IORQ - interfaţa I/O);
-adresa locaţiei sau registrului dorit (AD BUS);
Transferul are loc pe durata unui ciclu de magistrală. Cum microprocesorul este guvernat de
un semnal de tact precis, rezultă că şi ciclul de magistrală este corelat cu acest tact. Perioada tactului
se numeşte stare, iar fiecare ciclu are un număr determinat de stări.
Ciclurile de citire/scriere ale microprocesorului sunt date în diagramele următoare:

Ciclu de citire
T1 T2 T3

CLK

AD BUS Adresă
stabilă dresă
MRQ , IRQ stabilă

RD

DATA BUS Dată


stabilă
Ciclu de
scriere
T1 T2 T3

CLK

AD BUS Adresă
stabilă
MRQ , IRQ

WR

DATA BUS Dată


stabilă

Î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.

Întreruperi şi accesul direct la memorie


O problemă importantă în orice sistem de calcul este sincronizarea activităţii
microprocesorului cu evenimentele externe. Toate aceste evenimente au un punct comun: sunt
asincrone în raport cu execuţia programului de către procesor. Programul trebuie informat printr-un
mijloc oarecare că un astfel de eveniment s-a produs şi că trebuie tratat corespunzător (printr-o
secvenţă specifică numită rutină de tratare).
Există trei tipuri de mecanisme utilizate pentru tratarea evenimentelor externe:
- aşteptarea (bucla) programată;
- întreruperi;
- accesul direct la memorie.

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ă.
Periferic 1 0

Controler INT
de
Periferic 2 1 întreruperi

MICROPROCESOR

Periferic n n NMI

Întrerupere nemascabilă

‘1’

IEI
Periferic 1
IEO

IEI INT
Periferic 2
MICROPROCESOR
IEO

NMI
IEI
Periferic n

IEO

Întrerupere nemascabilă

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

eliberarea temporară a magistralei de către procesor prin activarea semnalului BREQ.

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
DACK Microprocesor
DACK1
Controler DMA

Avantajul imediat al tehnicii de transfer prin acces direct la memorie este că acesta permite
eliberarea procesorului de sarcina gestionării directe a intrărilor şi ieşirilor de date din sistem: este
suficient să programăm controlerul DMA pentru citirea unui bloc de date de la un periferic (de
exemplu. CAN), după care procesorul este liber să realizeze o altă activitate ce nu are nevoie de
datele solicitate. Unitatea de transfer a datelor prin DMA este blocul, de aceea la sfârşitul
transferului este considerat a fi epuizarea blocului de date.

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

Microcontrolerul 8051 are în structura sa:


 unitate aritmetica şi logică de 8 biţi ce poate executa operaţii de adunare, scădere, înmulţire,
împărţire, incrementare, ŞI, SAU, SAU Exclusiv, complementare şi rotire,
 memorie de program de tip ROM 4k octeţi
 memorie de date RAM 128 octeţi
 4 porturi paralele de intrare/ieşire P0 ÷P3 de 8 biţi
 un port serial duplex
 două circuite numărătoare/temporizatoare N/T0, N/T1 de câte 16 biţi
 5 surse de întrerupere cu două nivele de priorităţi
 generator de tact 1, 2  12MH z
Deasemenea microcontrolerul are posibilitatea de adresare a unei memorii externe de program şi a
unei memorii externe de date cu capacitate maximă de 64k octeţi.
Toate microcontrolerele din familia MCS51 au spaţiu separat pentru memoria de date şi de
program. Acest lucru permite o creştere de viteză datorată atât suprapunerii parţiale a unor
microoperatii, cât şi crearea posibilitatii de adresare scurtă (cu un singur octet de adresă).
Memoria de program poate fi doar citită. La 8051 primii 4k octeţi de program sunt în chip.
Restul se află în exterior, iar pentru a citi această memorie de program externă se foloseşte semnalul
PSEN (Program Store Enable).
Memoria de date ocupă un spaţiu separat faţă de memoria program. La 8051 există 128 octeţi
RAM în chip. Memoria de date externă poate fi accesată prin generarea de către unitatea centrală a
semnalelor de citire RD sau scriere WR. Memoria de program şi cea de date (externă) pot fi
combinate dacă dorim prin folosirea semnalelor RD si PSEN pentru a genera smnal de citire pentru
o memorie comună în care să avem atât memorie program cât şi memorie de date.

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
2000 extern
sau
h
1FFF
h 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
MEM
ALE STB PROG

P2 A8-A15

PSEN OE

Pentru citirea memoriei program se emite octetul inferior al PC (Program Counter) ca o

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.

Adresarea memoriei program se face întotdeauna pe 16 biţi. Execuţia programelor din


memoria program externă sacrifică astfel două porturi P0 şi P2.

Memoria de date internă


Microcontrolerul 8051 are o memorie internă de date RAM de 128 octeţi adresabilă direct şi
indirect în spaţiul de adresare 00h÷7 Fh . Această zonă este împărţită astfel:

7Fh

Zona de uz
general

30h
28h 7Fh 2Fh Zona adresabila
la nivel de bit
20h 00h
Spaţiul 00h-07h reprezintă, după reset, grupul de registre R0-R7 utilizate pentru surse sau
18h 1Fh
destinaţii în multe instrucţiuni ca:
10h 17h Zona registrelor
ADD A,Rn R0-R7
08h 0Fh
00h R0 R1 R2 R3 R4 R5 R6 R7 07h
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:

PSW.4 PSW.3 Adresa grupului


RS1 RS0 R0-R7
0 0 00h-07h
0 1 08h-0Fh
1 0 10h-17h
1 1 18h-1Fh

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)
Memoria internă de date este utilizată deasemenea pentru stivă. Registrul indicator de stivă SP este
încărcat, după reset,
80h cu valoarea 07h. Există posibilitatea de modificare a zonei din memoria internă de
date utilizată pentru
7Fh stivă, prin încărcarea altei valori în registrul SP.
De exemplu prin încarcarea valorii 2Fh în registrul SP stiva începe de la valoarea 30h.
Adresabila
direct si
Registrele interne aleindirect
8051
Registrele interne 00h
se numesc registre cu funcţii speciale şi sunt adresabile doar direct în
spatiul de adresare 80h-FFh. Deasemenea se pot adresa direct biţii unora din registrele cu funcţii
speciale.
Registrele interne şi funcţiile speciale ale acestora:
A – registru acumulator (8 biţi)
Se foloseste ca sursă şi destinaţie, prin adresare implicită, în multe operaţii aritmetice şi
logice. De exemplu, în instructiunea ADD A,@data, acumulatorul dă un operand sursă şi este şi
destinaţia rezultatului prin adresarea implicită.
B – registru de 8 biţi
Este un registru ce se utilizează ca sursă şi destinaţie, prin adresare implicită, în instrucţiunile
de înmulţire MUL AB şi împărţire DIV AB precum şi pentru uz general prin adresare directă.
DPTR – registru pointer pentru date (16 biţi) compus din DPH (8 biţi) şi DPL (8 biţi).
Registrul DPTR se utilizează pentru adresarea indirectă a memoriei de date externă în instrucţiunile
MOVX A,@DPTR şi MOVX @DPTR, A precum şi pentru adresarea indirectă a memoriei de
program în instrucţiunea MOVC A,@A+DPTR.
SP – registru indicator de stivă (8 biţi). Stiva necesară funcţionării microcontrolerului este
organizată în memoria internă de date. După reset, SP are valoarea 07h. La scrierea unui octet în
memoria stivă, conţinutului registrului SP se incrementează cu o unitate.
PSW – registru de stare a programului (registru cu indicatorii de condiţii)
Indicatorul de transport C (PSW.7) se poziţionează la nivel “1” logic în urma execuţiei unei
instrucţiuni de adresare care a produs un transport şi în urma execuţiei unei instrucţiuni de scădere
care a necesitat un împrumut. Dacă execuţia unei instrucţiuni de scădere/adunare nu produce
împrumut/transport, indicatorul C se poziţionează la nivel logic “0”. Astfel, indicatorul C se
utilizează pentru aplicaţii în operaţii aritmetice cu operanzi fără semn.
Deasemenea indicatorul C este folosit şi în operaţii logice şi de transfer al controlului:
ADD A,direct
ANL C,bit
RLC A
JC Rel
Indicatorul de transport auxiliar AC (PSW.6) se poziţionează la nivel logic “1” în urma unei
operaţii de adunare/scădere care produce transport/împrumut din/în poziţia bitului 3.
Indicatorul de depăşire OV (PSW.2) se poziţionează la nivel logic “1” în urma execuţiei unei
instrucţiuni de adunare dacă s-a produs un transport din poziţia bitului 6 şi nu s-a produs un
transport din poziţia bitului 7 indicând astfel depăşirea domeniului de valori (−128÷127 ) .
Indicatorul de paritate P (PSW.0) conţine suma modulo 2 a biţilor registrului acumulator. La
nivel logic “1” indică un număr impar de biţi cu nivel logic “1” în acumulator. Bitul P nu este
modificat de nici o instrucţiune de scriere în registrul PSW.
Ceilalţi biţi ai PSW sunt: F (PSW.5) disponibil pentru uz general, PSW.1 rezervat pentru
dezvoltări ulterioare (nefolosit), RS1 şi RS0 (PSW.4 şi PSW.3) pentru selecţia grupului de registre
R0-R7.
 SBUF – registru serial fiind compus de fapt din două registre separate de 8 biţi având
aceeaşi adresă directă, unul pentru transmisie şi unul pentru recepţie folosite pentru interfaţa serială.
Când un octet de date este scris în SBUF acesta este plasat în bufferul de transmisie şi declansează
începutul transmisiei seriale a acestuia. Când se realizează o recepţie se citeşte conţinutul bufferului
de recepţie. Adresa directă a registrului SBUF este 99H.
Registrele de control – există mai multe astfel de registre, care conţin biţi de control şi de
stare pentru întreruperi, temporizatoare/numărătoare şi portul serial. Ele vor fi descrise la funcţiile
corespunzatoare.
Registrele de temporizare – există două perechi de registre de câte 8 biţi T0 (TH0, TL0) T1
(TH1, TL1) folosite ca numărătoare/temporizatoare de 16 biţi programabile în 4 moduri diferite.
Celelalte registre interne şi funcţiile acestora vor fi discutate ulterior.

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

S-ar putea să vă placă și