Sunteți pe pagina 1din 37

SISTEME CU MICROPROCESOARE

1 . Introducere
Aparatele i sistemele controlate cu microprocesor au aprut i s-au perfecionat odat cu apariia pe pia
a miroproesoarelor (1970 -1980) dup care (n special dup 1985) s-au rspndit foarte rapid, nlocuind aproape
complet aparatele i sistemele de msur i control numerice clasice (cu logic cablat), att n tehnica de
laborator ct i n instrumentaia industrial, mai ales n controlul automat.
Clasificarea sistemelor cu microprocessor
n funcie de complexitatea sistemului din care face parte vom avea:
- aparate de msur cu microprocesor utilizate ca instrumente de laborator sau de teren;
- sisteme de msur cu microprocesor folosite n complexe de msur i control n industrie.

1.1 Avantajele folosirii microprocesoarelor n sistemele de msur i control


Includerea unui microprocesor ntr-un sistem de msur i control d posibilitatea ca manevrele de
operator s fie preluate (parial sau total) de ctre microprocesor i n plus s se obin cteva avantaje
importante:
1. Preluarea comenzilor de operator cum ar fi reglaje de zero i de cap de scar, selectarea gamelor
asigurnd un plus de precizie i siguran n exploatare.
2. Autocalibrarea i compensarea automat a influenei factorilor de clim. De asemenea se calculeaz
abaterile i se corecteaz rezultatul final al msurrii.
3. mbuntirea preciziei prin eliminarea erorilor sistematice (prin autocalibrare, autocorecie).
4. Micorarea numrului de componente ale sistemului prin eliminarea componentelor destinate
implementrii logicii cablate.
5. Creterea versatilitii aparatului prin obinerea unor posibiliti suplimentare de msur pe baza
programelor interne.
6. Creterea vitezei de lucru prin automatizarea operaiilor de msurare.
7. Posibilitatea determinrii prin calcul a altor parametrii de semnal (valoare de vrf, valoare medie, valoare
efectiv, calculul distorsiunilor, a spectrului de amplitudini, determinarea fazei, defazajului).
8. Posibilitatea autotestrii prin programe speciale executate de microprocesorul ncorporat, la comanda
operatorului sau n cazul apariiei unei anomalii in funcionare. n acest caz se poate declana o procedur de
testare i semnalizare a eventualelor defecte.
Toate aceste avantaje arat clar c sistemele de msur i control moderne nu pot exista fr a fi controlate
de ctre microprocesoare.

1.2 Microprocesoare : o privire general


n cele ce urmeaz ne vom referi la un microprocesor generic (presupus de 8 bii) i vom ncepe cu
precizarea unor termeni i notaii utilizate n lucrrile din domeniul microprocesoarelor.
Definiii i terminologie
Sistemul de calcul este un echipament care transform datele de intare n rezultate de ieire pe baza unui
algoritm materializat ntr-un program. Aceast definiie reprezint sensul clasic al noiunii de calculator .
Sistemele inteligente sunt acele sisteme care pot prelucra informaii incomplete definite sau aproape
complet definite. Astfel de sisteme sunt sistemele fuzzy sau reelele neuronale.
n cazul n care informaiile de prelucrat sunt complet definite atunci avem de-a face cu algoritmi
secveniali. Acest tip de algoritmi a stat la baza construciei mainilor secveniale (Von Newman).
Dac operaiile elementare independente se pot executa paralel (pe mai multe uniti de calcul), avem de-a face
cu algoritmi paraleli.

1
ncepnd cu anii 1970 au aprut tendine de automatizare a proceselor de producie bazate iniial 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 mainii secveniale standard (Von Newman) este urmtoarea:

Unitate
Memorie
Central

Subsistem de intrare/ieire

Om/proces

Unitatea central (CPU-Central Processing Unit), transform datele n rezultate pe baza execuiei
instruciunilor programului memorat.
Memoria este mediul principal de stocare/regsire a datelor, rezultatelor i programelor.
Subsistemul de intrare-ieire este destinat realizrii interfeei om-main sau proces-main.
Partea fizic a unui sistem de calcul (componentele electronice) este relative 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 aplicaii) 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 cror rol este de a asigura faciliti de configurare i testare a echipamentului, precum i minima sa
funcionare. 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 aplicaiilor industriale, pn la procesoarele de semnal sau coprocesoarele cu funcii bine precizate. De
asemenea, microprocesoarele pot fi:
- microprocesoare monocip (unitatea central i circuitele de suport sunt dispuse n interiorul aceleiai
capsule de circuit integrat).
- microprocesoare multicip la care unitatea central i circuitele de suport, sunt realizate sub form de
circuite integrate distincte.
Microprocesoarele pentru aplicaii 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 att memorie de lucru, ct i interfee de intrare/ieire, 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 aplicaiilor de control n mediul industrial, ele se ntlnesc i sub denumirea de microcontrolere.

2
Microprocesoarele de uz general multicip au fost realizate i n variante monocip, purtnd numele de
microprocesoare nglobate. De exemplu, familiile 80186 sau 80386EX sunt produse de Intel i n varianta
monocip avnd avantajul utilizrii 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 urmtoarele tehnologii:
1 . Tehnologia bipolar permite obinerea unor viteze de lucru mari, dar cu un consum ridicat i cu
probleme de climatizare deosebite.
2 . Tehnologia MOS a evoluat mult, oferind condiii de obinere a unor performane de vitez deosebit,
n condiiile 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 impuritilor 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 impuritilor de tip n (fosfor
sau arseniu) ntr-un substrat de siliciu de tip p, pentru a forma drena i sursa. Se obine o densitate de
componente similar cu cea specific PMOS, dar asigur o vitez mai mare pentru circuitele realizate, ns este
mult mai scump dect 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 generaii de microprocesoare i microcontrolere. Aceast tehnologie folosete tranzistoare cu canal n,
proiectate special pentru a lucra la tensiuni joase i la viteze mari.
CHMOS este rodul mbinrii performanelor de vitez deosebit ale tehnologiei HMOS, cu consumul
sczut al celei CMOS. Rezultatul a fost remarcabil, astfel nct majoritatea productorilor de microprocesoare i
microcontrolere au trecut la aceast tehnologie.

Bii , octei , 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 informaie,
echivalent cu o afirmaie (DA , 1) sau o infirmaie (NU, 0).
Pentru uniti mai mari, cea mai important este octetul, obinut din gruparea a 2 8 bii. Octetul
reprezint unitatea cea mai folosit pentru caracterizarea dimensiunii blocurilor de memorie. Dac aceast
dimensiune este mare, se pot folosi multiplii acestuia:
Kilooctet 210 bii
Megaoctet 220 bii 210 KB
Gigaoctet 230 bii 210 MB 220 KB
Un cuvnt este un grup de bii ce desemneaz cantitatea maxim de informaie ce poate fi transferat la un
moment dat de un dispozitiv numeric. Cuvntul este materializat prin ci paralele de comunicaie a informaiei
numite magistrale. Numrul de bii al unui cuvnt constituie lungimea sa. Lungimea unui cuvnt este una dintre
caracteristicile cele mai importante ale unui microprocesor, deoarece hotrte precizia datelor i viteza de
prelucrare a acestora.

Algoritmi , programe i limbaj main


Fiind dat o problem pentru rezolvarea acesteia trebuie gsit o metod adecvat algoritmul. Un
algritm este o secven de operaii, grupate ntr-o succesiune de etape (pai) ce permit rezolvarea problemelor
specificate. Pentru a fi neles 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 operaii elementare instruciuni.
3
La nivelul cel mai de jos, instruciunile programului se prezint ca iruri de bii ce pot fi transformate cu
uurin n impulsuri electrice, dar care sunt foarte greu de manevrat de ctre programator. Acest limbaj,
singurul neles de procesor este numit limbaj main. 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
cror scop a fost gsirea unei modaliti ct mai accesibile de a programa un microprocesor.

Logic cablat i logic programat


Logica cablat presupune un automat de control n care secvena de semnale de sincronizare/coordonare
sunt elaborate pe baza unei scheme fixe (de obicei cu pori 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 funcionare a aparatului se poate
schimba.

Puterea de calcul i viteza de lucru a microprocesorului


Prin putere de calcul se nelege mai ales capabilitatea de prelucrare numeric a acestuia i este
determinat de lungimea cuvntului, de arhitectura intern i viteza de execuie a instruciunilor.Viteza
microprocesorului este condiionat de 2 factori:
-Frecvena ceasului un tact mai rapid determin un procesor s execute un program mult mai rapid;
-Arhitectura intern permite creterea vitezei de lucru (meninnd frecvena ceasului neschimbat) pe baza
trecerii de la execuia strict secvenial a operaiilor, la execuia lor paralel, ntr-un mod transparent pentru
utilizator, folosind tehnici ca: utilizarea memoriilor CACHE, creterea numrului de magistrale interne ale
unitilor de prelucrare, succesiune pipeline (suprapunerea parial a operaiilor).
-Viteza de execuie a instruciunilor este dificil de msurat direct. Se definete de obicei ca durata de
execuie a unor instruciuni foarte des folosite sau ca numr mediu de instruciuni executate ntr-o secund.
-Setul de instruciuni - condiioneaz indirect viteza de calcul. Cu ct modul de codificare a instruciunilor
este mai simplu i secvena microoperaiilor este mai rapid, cu att microprocesorul va avea o vitez de lucru
mai mare.
Microprocesoarele cu set complet de instruciuni (CISC) consum un timp relative ridicat pe instruciune,
dar compenseaz acest lucru printr-o gam divers de instruciuni.
Spre deosebire de ele, microprocesoarele cu set redus de instruciuni (RISC) sunt optimizate astfel nct
instruciunile s fie executate foarte rapid, chiar mai multe ntr-un singur tact main .

Arhitectura
ACC intern a unui microprocessor
REG DCD
Ca orice unitate centralALU a unui sistem de calcul,Xmicroprocesorul conine urmtoarele ADD componente
principale: BUS
TMP B
- unitatea de control CPU ;
R3 R4
- unitatea logico-aritmetic ALU;
PS R1 R2 BI
- registre interne;
Acestea comunic ntre ele prin ci de transfer informaiei numite magistrale, ce leag ntre ele mai multe
dispozitive, dar la un moment dat doar dou dispozitive pot schimba informaie: sursaDATA i destinaia.
Coordonarea transferurilor pe magistral se face de ctre un dispozitiv master, cele subordonate BUS fiind slave.
Microprocesorul posed i o magistral intern, legat printr-o interfa la magistrala extern.
Structura intern a unui microprocesor generic este urmtoatea:
IR PC
CLK SP
Gen CPU
Inst DCD CMD
Cuartz 4 BUS

Reset INT
Unitatea de control
Asigur sincronizarea i coordonarea operaiilor din interiorul i exteriorul microprocesorului. Ca orice
automat secvenial 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 frecvene ntre 1 i 40 MHz (microprocesoarele ce echipeaz calculatoarele moderne ajung pn
la frecvene de ordinal GHz).
n principal, unitatea de control solicit instruciunile stocate n memoria de program, le decodific i pe
baza acestora comand funcionarea celorlalte blocuri (ALU, registre etc ) interne microprocesorului, n vederea
executrii corecte a acestora.

Unitatea logico aritmetic


ALU execut operaiile aritmetice i logice impuse de instruciunile programului, sub coordonarea direct
a unitii de control.
Operaiile aritmetice pot fi: adunare i scdere (de baz - obligatorii), respectiv nmulire, mprire,
ridicare la putere (suplimentare).
Operaiile logice pot fi: NU, I, SAU (de baz - obligatorii), respectiv SAU EXCLUSIV, deplasri, rotiri
(suplimentare).
Participanii la o operaie aritmetic sau logic se numesc operanzi, iar semnul grafic asociat acesteia se
numete operator. Dac operaia necesit un singur operand (schimbarea semnului sau negarea), ea se numete
operaie unar. Dac operaia necesit 2 operanzi (adunare, I logic), ea se numete binar.

Registrele interne
Au rolul de a stoca temporar operanzii i rezultatele vehiculate prin ALU, pe parcursul uneia sau mai
multor instruciuni. Registrele folosite n mod uzual la calcule se numesc registre generale, iar cele folosite la
operaii speciale (adresarea, manevrarea stivelor) se numesc registre funcionale.
Registrele generale pot ndeplini mai multe roluri:
- manevr pentru stocarearea temporar a unui operand sau a unui rezultat;
- acumulator (ACC) registru folosit n operaiile de adunare pentru cumularea unui ir de valori (unul
din operanzi se gsete ntr-un registru de lucru, iar cellalt l constituie chiar coninutul acumularorului), iar la
sfrit rezultatul se depune tot n acumulator;
5
- 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 locaii succesive de
memorie;
-indicator de stiv (SP) - permite adresarea unei zone de memorie (stiv), special creat pentru a
facilita manevrarea datelor, pe principiul ultimul sositprimul servit (LIFO), prin operaii de tipul PUSH, POP,
precum i execuia subrutinelor sau a tratrii ntreruperilor.
Un microprocesor posed cel puin 2 registre generale (acumulator i manevr). Majoritatea
microprocesoarelor folosesc seturi de 4 16 registre, ce pot prelua unul din rolurile prezentate mai sus.
Registrele funcionale
ndeplinesc sarcini dedicate pentru controlul derulrii instruciunilor n microprocesor.
-Registrul de stare program (PS) conine o serie de informaii ce descriu starea execuiei progarmului
(indicatorii de condiie, care reprezint modul de terminare a unei operaii logico-aritmetice, utilizat la
realizarea salturilor condiionate, precum i a indicatorilor de semnalare a evenimentelor speciale i a modurilor
de lucru);
-Registrul de instruciuni (IR) destinat stocrii instruciunii pe parcursul execuiei sale;
-Contorul de program (PC) indic n permanen instruciunea curent (de executat);

Execuia instruciunilor i indicatorii de condiie


Vom considera citirea i execuia unei instruciuni tipice de un cuvnt. Pentru aceasta:
-de la adresa coninut n contorul de program (PC) interfaa de magistral citete un cuvnt, printr-un ciclu
de citire al instruciunii
-coninutul locaiei citite este transferat prin magistrala intern n registrul de instruciuni (IR);
-contorul de program este incrementat pentru a indica instruciunea imediat urmtoare;
-imediat ce codul instruciunii este disponibil, n registrul de instruciuni (IR), el este decodificat i
transformat n semnale de activare a diverselor microoperaii din care este compus execuia propriu-zis a
instruciunii;
-nc din faza final a execuiei instruciunii, se poate declana citirea instruciunii urmtoare;
n cazul instruciunilor de mai multe cuvinte, se fac referiri succesive la memorie.
Multe microoperaii presupun folosirea ALU pentru calcule ascunse (calcule de adres). Operaiile 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 operaiei executate.
Aceti bistabili se numesc indicatori de condiie i ei pot fi testai n instruciuni de salt condiionat.
Indicatorii cei mai utilizai sunt prezentai 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 operaii ntre numere cu semn are un semn incorect
(datorit transporturilor nedorite spre poziia semnului).

Seturi de instruciuni
Instruciunea este o operaie elementar ce se execut de microprocesor n cadrul unui program. Orice
instruciune este identificat pe baza unui cod de operaie ce face parte integrant din corpul acesteia. Codul de
operaie este completat de informaii suplimentare, numite uzual argumente.
Codul operaiei este singura poriune a instruciunii care se decodific intern i declaneaz secvena de
microoperaii din unitatea de comand (exist instruciuni formate numai din cod).
Lista complet de instruciuni pe care o poate interpreta i executa un microprocesor se numete set de
instruciuni. Instruciunile sunt stocate n memorie sub form de cuvinte consecutive, care materializeaz
programul existnd dou categorii de instruciuni mprite pe baza formatului:

6
- instruciuni cu format fix la care lungimea acestora i structura diverselor cmpuri componente este
fix, indiferent de codul instruciunii;
- instruciuni cu format variabil la care lungimea i structura cmpurilor componente este dependent
de codul instruciunii.

Formate uzuale de instruciuni

CO AO AO AR AI
a) Cod operaie Adres operand Adres operand Adres rezultant Adres instruciune

CO AO AO AR sau AI
b) Cod operaie Adres operand Adres operand Adres rezultant sau Adres instruciune

CO AO AO sau AI
c) Cod operaie Adres operand Adres operand sau Adres instruciune

CO AO sau AI
d) Cod operaie Adres operand sau Adres instruciune

a) - instruciune cu patru adrese: dou adrese de operanzi, o adres pentru rezultat i o adres pentru
urmtoarea instruciune. Formatul este incomod, datorit numrului mare de argumente, care nu sunt folosite
ntotdeauna.
b) - instruciune cu trei adrese: dou adrese de operanzi i o adres pentru rezultat sau pentru urmtoarea
instruciune. n acest caz se presupune c instruciunile sunt plasate n locaii succesive, astfel c adresa
instruciunii urmtoare este subneleas. Instruciunile care nu respect aceast secven (salturi, apeluri de
subrutine), de regul nu sunt instruciuni de calcul i ca urmare ultimul cmp poate fi folosit pentru adresa
urmtoarei instruciuni de executat.
c) - instruciuni cu dou adrese: dou adrese de operand, din care ultima poate fi pentru urmtoarea
instruciune. Rezultatul unei operaii este depus ntr-un loc implicit cunoscut (de obicei, n acumulator).
d) - instruciuni cu o singur adres: o adres de operand sau pentru urmtoarea instruciune. n aceast
situaie att unul din operanzi, ct i rezultatul operaiei au un loc prestabilit. Acest format este cel mai
economic.
Microprocesoarele actuale folosesc , de obicei , instruciuni 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 .

Instruciuni de transfer de date


Transfer informaia dintr-un registru (sau locaie de memorie) n alt registru. Operaiile curente sunt de
transfer (ncrcare, memorare) i interschimbare.
Instruciuni aritmetice i logice
n aceast categorie intr: adunare (ADD), scdere (SUB), nmulire (MUL), mprire (DIV),
complementare (CPL), test i comparare, I logic (AND), SAU logic (OR), SAU exclusiv (XOR), negare
(NEG), incrementare (INC), decrementare (DEC), deplasri stnga sau dreapta, rotiri stnga (RL) sau dreapta
(RR), tergerea (CLR) unui registru sau nscrierea unui bit cu o valoare dorit (SETB/RESB).

Instruciuni de control al programului

7
Instruciunile din acest categorie au drept caracteristic faptul c oricare din ele modific derularea
secvenial a programului, provocnd ncrcarea contorului de program cu o valoare dintr-un cmp de adres al
instruciunii curente, sau cu o adres calculat ntr-un pas precedent al programului.
O instruciune de ramificare, numit i salt, determin prsirea secvenei normale a programului, fr un
mecanism de reinere a locului unde s-a ntmplat acest lucru. O posibil revenire este lsat complet n seama
programatorului.
Exist dou tipuri de salt:
-salt necondiionat (JMP);
-salt condiionat (JZ, JC), ce are loc doar dac este ndeplinit o condiie specificat prin starea
indicatorilor de condiie poziionai anterior.
Unele microprocesoare au o instruciune, considerat tot de salt, care determin CPU s ignore una sau
mai multe instruciuni dintr-o secven (SKIP).
Instruciunile de apel (CALL) i revenire (RET) din subroutine, realizeaz i salvarea adresei de ntoarcere
(a locului de unde trebuie reluat programul dup execuia subrutinei).
Instruciuni de control al microprocesorului
n acest grup pot fi nscrise unele instruciuni speciale de control:
-oprire (HALT) ce suspend execuia programului curent pn la apariia unei cereri de ntrerupere extern
;
-nici o operaie (NOP);
-activarea (EI) sau dezactivarea (DI) sistemului de ntreruperi.
Instruciuni de intrare / ieire
Acest grup include dou instruciuni de transfer, cu porturi de intrare/ieire, adic citire port (IN) sau scriere
port (OUT).

Tehnici de adresare a memoriei


Din analiza formatelor de instruciuni, am observat c pentru a defini complet operaia de executat este
nevoie s cunoatem locul unde sunt amplasai 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 numr redus de bii (uzual 3 sau 4 bii), ce poate face
parte chiar din cmpul destinat codului operaie.
n al doilea caz, adresa locaiei de memorie unde se afl operandul este precizat ntr-un cmp separat, ce
face parte din corpul instruciunii.
Regsirea unei informaii presupune determinarea adresei utiliznd un set de convenii i metode de
calcul, cunoscute sub numele de tehnici de adresare.
Principalele tehnici de adresare ntlnite la majoritatea microprocesoarelor sunt:
Adresarea implicit
Pleac de la ideea c adresa (locul) unui operand este implicit cunoscut i definit chiar de operaia
executat, n timp ce al doilea operand se afl ntr-un registru de lucru.
Multe instruciuni cu adresare implicit sunt reprezentate pe un singur cuvnt, necesitnd 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 prezena unui operand n memorie, n care adresa lui nu mai poate fi implicit cunoscut.
Corpul instruciunii are un cmp explicit pentru adres. n timpul execuiei instruciunii se mai face o referire
suplimentar la memorie, pentru extragerea operandului.
Ex : ADD r , adr r r + ( adr ) ,
8
unde (adr) este coninutul locaiei de memorie cu adresa adr.
n cazul instruciunii de forma:
ADD adr ACC ACC + ( adr ) ,
avem un caz tipic de combinaie a adresrii implicite i a celei directe.
Adresare imediat
Presupune aducerea operandului chiar n corpul instruciunii (nlocuind corpul de adres cu operandul).
Avantajul const n economia unor referiri suplimentare la memorie n timpul execuiei unei instruciuni, util
mai ales la operaii cu constante.
ADD r ,4 rr+4 ,
unde 4 este o constant plasat n corpul instruciunii.
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 numrul
de ordine al elementului din ir, care trebuie prelucrat. n corpul instruciunii 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 instruciunii.
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 nelege coninutul locaiei de
memorie cu adresa dat de registrul de baz la care s-a adugat 10.
nlocuind constanta 10 cu x, adic B[x] se obine o adresare bazat i indexat.
Adresarea indirect
Este o modalitate de regsire a informaiei pe baza interpretrii operandului, nu ca o valoare de calcul ci ca
o nou adres de unde se poate extrage valoarea sa adevrat. Adresarea indirect permite partajarea unei date
ntre mai multe uniti de program, dar i accesul la irurile de date.
EX : ADD r , (adr) r r+(adr)
Prin (adr) se nelege coninutul locaiei de memorie cu adresa adr, la care se afl o nou adres.
Alte tipuri de adresri:
-adresare relativ la care calculul adresei se face n raport cu coninutul contorului de program;
-adresare cu autoincrementare i autodecrementare (punere i extragere din stiv);
-adresare paginat;
De obicei microprocesoarele nu admit combinarea oricrei insruciuni cu orice mod de adresare.
Instruciunile de transfer implementeaz cele mai multe moduri de adresare.

9
Microprocesorul i circuitele externe

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


intrare/ieire ce sunt conectate printro magistral extern.
Magistral extern a unui microprocesor
Realizarea unui sistem cu microprocesor se face n jurul unei magistrale ce servete drept cale de transfer
a informaiei. 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.
Legtura ntre cele dou magistrale se face printr-o interfa special, al crui rol este de a asigura att o
separare electric, un numr relativ redus de terminale externe, dar i adaptarea la acelai protocol de
comunicaie ntre dispozitive.
Liniile unei magistrale se grupeaz n date (DATA BUS), adrese (AD BUS), comenzi/control (CMD
BUS) i alimentri.
Magistrala de date (DATA BUS), permite transferal informaiei bidirecional, fiind compus dintr-un
numr de linii egal cu lungimea cuvntului 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 destinaie, sensul de
transfer fiind unic i dictat de cele dou tipuri de operaii de baz admise: citire i scriere. Rezult c
dispozitivele ce se conecteaz mpreun pe aceeai magistral de date trebuie s dispun de buffere cu trei stri
(3-State) astfel nct s nu apar conflicte electrice n timpul transferurilor.
Magistrala de adrese (AD BUS) este unidirecional (de la microprocesor spre exterior) i servete la
vehicularea adreselor ce permit localizarea n memorie sau ntr-un registru de interfa a informaiei utile.
Magistrala de comenzi (CMD BUS) conine semnale unidirecionale, menite s asigure coordonarea i
sincronizarea transferurilor cu dispozitivele externe precum memorie i interfee I/O. Aceste semnale permit
identificarea tipului de operaie de transfer ( RD -citire, WR -scriere), natura dispozitivului ( MRQ -memorie,
IORQ -interfee I/O), precum i natura informaiei vehiculate (date, MI -instruciuni).
Microprocesorul dispune i de linii speciale pentru generatorul de tact (X1 i X2, pentru conectarea
cuarului sau CLK pentru semnalul de tact extern),precum i pentru sincronizarea cu dispozitivele externe
(RDY), iniializarea (RESET), cereri de ntrerupere (INT) i de magistral (BRQ i BACK). Unele
microprocesoare folosesc aceleai linii pentru adrese i date, acestea fiind multiplexate. La nceputul fiecrui
transfer, procesorul depune nti adresele (ce pot fi ngheate ntr-un registru LATCH) i apoi folosete
aceleai 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 posibiliti de citire/scriere (RAM), care este volatil i servete la stocarea temporar a
informaiilor (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 excepia
registrelor de lucru ce pot fi considerate memorii RAM foarte rapide dar de capacitate mic).
Multe microprocesoare actuale sunt dotate cu memorie RAM proprie foarte rapid, de capacitate relativ
modest (4 16 KB), al crui rol este de a funciona ca tampon ntre CPU i memoria extern, mai lent, dar de
mare capacitate. Aceast memorie, numit memorie CACHE, realizeaz funcia de accelerator, mpreun cu un
dispozitiv intern de gestionare, funcie ce este complet transparent pentru utilizator.
Subsistemul de intrare/ieire
Face legtura ntre microprocesor i periferice prin interfee specializate, numite generic porturi. n
principiu, transferal datelor de la sau ctre porturi se face cu instruciuni speciale, numite instruciuni de
intrare/ieire. Citirea unui port se face cu o instruciune de intrare (IN), iar scrierea ctre un port se face cu o
10
instruciune de ieire (OUT). Utilizatorul are acces la funciile interfeei prin intermediul registrelor acesteia.
Registrele de interfa se grupeaz n trei categorii:
-registre de control, destinate manevrrii interfeei i perifericului asociat;
-registre de stare, cu ajutorul crora se verific condiiile i modul de execuie al operaiilor, precum i
erorile aprute;
-registre de date, prin care se face transferul propriu zis.

Structura simplificat a unei interfee este prezentat n figura urmtoare:

CMD BUS
Decodor i
Registru
control
de control
AD BUS interfa

Registru
de stare
DISPOZITIV
PERIFERIC
Registru
de date

DATA Registru
BUS Tampon
de date

Tipuri de Interfee
-interfaa paralel permite interconectarea perifericelor cu vitez de lucru ridicat;
-interfaa serial permite interconectarea perifericelor cu vitez redus, dar folosind un numr 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;
-interfaa video: permite obinerea imaginilor grafice ale caracterelor sau curbelor pe un ecran monitor TV
sau cu cristale lichide.

Transferuri , cicluri , stri


Principala utilitate a unei magistrale este transferul informaiei. Pentru aceasta, un microprocesor trebuie
s precizeze:
-natura operaiei 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 au interfa de intrare/ieire ( MRQ -
memorie, IORQ - interfaa I/O);
-adresa locaiei 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 numete stare, iar
fiecare ciclu are un numr determinat de stri.
11
Ciclurile de citire/scriere ale microprocesorului sunt date n diagramele urmtoare:

Ciclu de citire
T1 T2 T3

CLK

AD BUS Adres stabil


dres stabil
MRQ , IRQ

RD

DATA BUS Dat stabil

Ciclu de scriere
T1 T2 T3

CLK

AD BUS Adres stabil

MRQ , IRQ

WR

DATA BUS Dat stabil

nti microprocesorul pune o adres valid pe liniile AD BUS (locaie de memories sau registru I/O), apoi
activeaz pe rnd semnalele care specific natura dispozitivului ( MRQ sau IORQ ) i apoi operaia dorit (
RD sau WR ).
n timpul ciclului de citire, microprocesorul ateapt dispozitivul adresat s pun pe magistrala de date un
cuvnt valid, pe care-l preia spre sfritul ciclului.Dac dispozitivul nu poate rspunde n timp util, el poate
folosi dezactivarea liniei READY, fornd microprocesorul s atepte.
Folosirea liniei READY pentru sincronizarea cu dispozitive lente determin microprocesorul s insereze
automat o succesiune de stri de ateptare, 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

12
O problem important n orice sistem de calcul este sincronizarea activitii microprocesorului cu
evenimentele externe. Toate aceste evenimente au un punct comun: sunt asincrone n raport cu execuia
programului de ctre procesor. Programul trebuie informat printr-un mijloc oarecare c un astfel de eveniment s-
a produs i c trebuie tratat corespunztor (printr-o secven specific numit rutin de tratare).
Exist trei tipuri de mecanisme utilizate pentru tratarea evenimentelor externe:
- ateptarea (bucla) programat;
- ntreruperi;
- accesul direct la memorie.

Ateptarea programat
n forma sa cea mai simpl, const ntr-o secven de program care citete n permanen o informaie de
stare i testeaz un indicator, pentru a afla dac evenimentele au avut loc.
Procesorul nu execut nici o alt activitate pn ce evenimentul nu s-a produs rezultnd timpi inutilizabili
pentru sistem.
ntreruperi
Sunt faciliti hardware oferite de microprocesoare, prin care un dispozitiv periferic atrage atenia asupra
producerii unor evenimente externe ce reclam o intervenie prompt.
nainte ca o ntrerupere s poat avea loc, este necesar s se ndeplineasc condiiile:
-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 conin secvene de cod special destinate lucrului cu
ntreruperi (rutine de tratare a ntreruperilor);
-perifericul trebuie s genereze semnalul de ntrerupere.
Apariia unei ntreruperi n activitatea curent a microproesorului determin urmtoarea secven de
evenimente:
-instruciunea n curs de execuie se ncheie normal;
-starea intern a procesorului (registrul de stare i contorul de program) este salvat pentru a permite mai
trziu reluarea activitii din locul unde a fost ntrerupt;
-microprocesorul ncarc noi informaii de stare i execut un salt de la o rutin de tratare specific, ce
realizeaz toate aciunile urgente implicate de apariia evenimentului;
-la sfritul rutinei de tratare (marcat cu o instruciune de revenire din ntrerupere IRET) se restaureaz
starea procesorului salvat anterior;
-restaurarea este ncheiat cu rencrcarea contorului de program cu valoarea salvat i prin aceasta,
reluarea programului ntrerupt.
Observaii
-tratarea ntreruperii trebuie s nlture cauza apariiei acesteia, astfel secvena de mai sus se poate repeta;
-dac sosesc noi ntreruperi de aceeai natur, n timpul execuiei rutinei de tratare, se poate ajunge la
situaia ca aceasta s fie restartat recursive, pn la apariia unor erori sau pierderea controlului asupra
programului;
-procesoarele actuale suport instruciuni ce permit activarea, respectiv dezactivarea tratrii ntreruperilor.
Pe baza acestora se pot elimina ntreruperile neprevzute.
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. Rspunsul
este dat de introducerea unui mecanism de multiplexare/arbitrare a cererilor de ntrerupere, bazat pe o logic cu
prioriti.

13
O soluie este folosirea unui controler de ntreruperi. Acesta dispune de un codor de prioriti care
determin solicitantul cu cel mai mare nivel de prioritate i genereaz semnalul de ntrerupere ctre procesor. n
momentul acceptrii ntreruperii, controlerul pune pe magistral un cuvnt de identificare al perifericului
solicitant, astfel nct microprocesorul s fie capabil s activeze rutina de tratare specificat.
O alt soluie 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 ieire de semnalizare a activitii
ctre perifericul urmtor (IEO). Dac IEI1, atunci perifericul n cauz poate genera o ntrerupere. Dac acelai
periferic se afl n curs de tratare, el va pune IEO0. Un dispozitiv cu IEI0 este obligat s transmit IEO0.
Prioritatea este stabilit pe baza poziiei fizice a perifericului ntr-un lan de prioriti.
Odat generat ntreruperea i acceptat de procesor, perifericul i va pune cuvntul de identificare pe
magistral, pentru a permite activarea rutinei de tratare corect.

Periferic 1 0

Controler INT
de
Periferic 2 1 ntreruperi

MICROPROCESOR

1
Periferic n n NMI
IEI
Periferic 1
IEO
INT
ntrerupere
IEInemascabil
Periferic 2 MICROPROCESOR
IEO
NMI

IEI
Periferic n
IEO
14

ntrerupere nemascabil
Accesul direct la memorie
Permite ca dou procesoare s partajeze aceeai magistral n scopul realizrii accesului la aceleai
resurse. Unul dintre ele este chiar unitatea central a sistemului, iar cellalt este dedicat numai interceptrii i
arbitrrii cererilor provenite de la periferice, precum i coordonrii transferurilor solicitate, fr a mai apela la
unitatea central.
Acest procesor dedicat controler pentru acces direct la memorie (DMA) funcioneaz n dou moduri:
-modul slave, funionnd ca un circuit de interfa obinuit, ce poate fi programat prin instruciuni I/O,
programarea are ca scop precizarea locaiei 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 informaie, genernd toate semnalele de control necesare.
Ciclurile DMA se pot ntreptrunde cu cele CPU, mai ales dac rata de transfer a perifericului nu este prea
mare, caz n care execuia programului principal este ncetinit foarte puin.
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 ctre 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 lucruDRQactivnd linia DRQ0
BACK.
Controlerul DMA preia acum controlul magistralei i semnalizeaz acest lucru perifericului, prin smnal de
acceptare DACK. La DACK terminarea unui transfer
DACK0DMA, perifericul dezactiveaz linia DRQ, controlerul eliberez
magistrala, semnaliznd acest lucru i procesorului prin linia BRQ, acesta BREQ
BREQ preia din nou controlul magistralei i
totul reintr n normal.
BACK BACK
DRQ DRQ1

DACK Microprocesor
DACK1
15
Periferice

Controler DMA
Avantajul imediat al tehnicii de transfer prin acces direct la memorie este c acesta permite eliberarea
procesorului de sarcina gestionrii directe a intrrilor i ieirilor de date din sistem: este suficient s programm
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 sfritul transferului este considerat a fi epuizarea blocului de date.

Microcontrolerul 8051(INTEL)
Familia de microcontrolere de 8 bii MCS51 lansat i produs de Intel a devenit practic un standard
industrial. Ea a stat la baza dezvoltrii de microcontrolere compatibile realizate de firme ca: Philips, Siemens,
Dallas, etc. Arhitectura MCS51 este optimizat pentru aplicaii de control. Intel ofer o gam larg de
microcontrolere compatibile cu 8051 ce difer ntre ele doar prin opiuni i tehnologie. Principalele caracteristici
ale familiei MCS51 sunt prezentate n tabelul urmtor:
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 bii ce poate executa operaii de adunare, scdere, nmulire, mprire,
incrementare, I, SAU, SAU Exclusiv, complementare i rotire,
memorie de program de tip ROM 4k octei
memorie de date RAM 128 octei
4 porturi paralele de intrare/ieire P0 P3 de 8 bii
un port serial duplex
dou circuite numrtoare/temporizatoare N/T0, N/T1 de cte 16 bii

16
5 surse de ntrerupere cu dou nivele de prioriti
generator de tact 1, 2 12MH 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 octei.
Toate microcontrolerele din familia MCS51 au spaiu separat pentru memoria de date i de program. Acest
lucru permite o cretere de vitez datorat att suprapunerii pariale a unor microoperatii, ct i crearea
posibilitatii de adresare scurt (cu un singur octet de adres).
Memoria de program poate fi doar citit. La 8051 primii 4k octei de program sunt n chip. Restul se afl n
exterior, iar pentru a citi aceast memorie de program extern se folosete semnalul PSEN (Program Store
Enable).
Memoria de date ocup un spaiu separat fa de memoria program. La 8051 exist 128 octei RAM n chip.
Memoria de date extern poate fi accesat prin generarea de ctre 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 att memorie program
ct i memorie de date.

Memoria de program
Dup reset CPU i ncepe execuia de la adresa 0000H unde trebuie s existe o instruciune 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 octei rezervai. Rutinele
mai lungi pot folosi o instruciune de salt peste locaiile rezervate ntreruperilor urmtoare, dac acestea se
folosesc.
Cei 4k octei (8k octei la 8x52) de memorie program pot fi n capsul sau extern. Aceast selecie este
posibil folosind linia EA (External Acces). Daca EA=0 se acceseaz 64k octei memorie extern. Dac EA=1,
atunci se execut program din:
- memoria intern 4k octei (0000h-0FFFh);
- memoria externa de pn la 64k octei ntre adresele 1000h i FFFFh.

17
n timpul execuiei 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

ALE
MEM
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 Catch 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 bii. Execuia 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 octei adresabil direct i indirect n
spaiul de adresare 00h 7 Fh . Aceast zon este mprit astfel:
7Fh

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

Spaiul 00h-07h reprezint, dup reset, grupul de registre R0-R7 utilizate pentru surse sau destinaii n multe
instruciuni ca:
ADD A,Rn
MOV Rn,#data

18
ntr-o astfel de instruciune, registrele R0-R7 sunt adresate direct cu un cmp de 3 bii (n 0 7) cuprins
mpreun cu codul operaiei, n primul octet corespunztor codului main al instruciunii. 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
instruciunile:
MOV A,@Ri
ADD A,@Ri
INC @Ri
n aceste instruciuni indicele i cu valorile 0 sau 1 este precizat n primul cuvnt din codul main printr-un
bit. Deasemenea, registrele R0 i R1 sunt utilizate pentru adresarea indirect a memoriei de date externe n
instruciunile:
MOVX A,@Ri
MOVX @Ri,A
n aceste instruciuni, coninutul registrului R0 sau R1 reprezint octetul mai puin semnificativ al adresei.
Octetul mai semnificativ al adresei este dat de portul P2.
Exist posibilitatea ca, prin programarea biilor 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

Locaiile memoriei din spaiul 20h-2Fh reprezint o zon de memorie adresabil i la nivel de bit n
instruciuni de tipul:
CPL bit
JB bit,rel
Adresarea biilor se realizeaz direct, cu un octet coninut n codul main al instruciunii 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
funciuni 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:

19
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 ncrcat,
dup reset, cu valoarea 07h. Exist posibilitatea de modificare a zonei din memoria intern de date utilizat
pentru stiv, prin ncrcarea altei valori n registrul SP.
De exemplu prin ncarcarea valorii 2Fh n registrul SP stiva ncepe de la valoarea 30h.

Registrele interne ale 8051


Registrele interne se numesc registre cu funcii speciale i sunt adresabile doar direct n spatiul de adresare
80h-FFh. Deasemenea se pot adresa direct biii unora din registrele cu funcii speciale.
Registrele interne i funciile speciale ale acestora:
A registru acumulator (8 bii)
Se foloseste ca surs i destinaie, prin adresare implicit, n multe operaii aritmetice i logice. De
exemplu, n instructiunea ADD A,@data, acumulatorul d un operand surs i este i destinaia rezultatului prin
adresarea implicit.
B registru de 8 bii
Este un registru ce se utilizeaz ca surs i destinaie, prin adresare implicit, n instruciunile de nmulire
MUL AB i mprire DIV AB precum i pentru uz general prin adresare direct.
DPTR registru pointer pentru date (16 bii) compus din DPH (8 bii) i DPL (8 bii). Registrul DPTR
se utilizeaz pentru adresarea indirect a memoriei de date extern n instruciunile MOVX A,@DPTR i
MOVX @DPTR, A precum i pentru adresarea indirect a memoriei de program n instruciunea MOVC
A,@A+DPTR.
SP registru indicator de stiv (8 bii). Stiva necesar funcionrii microcontrolerului este organizat n
memoria intern de date. Dup reset, SP are valoarea 07h. La scriarea unui octet n memoria stiv, coninutului
registrului SP se incrementeaz cu o unitate.
PSW registru de stare a programului (registru cu indicatorii de condiii)
Indicatorul de transport C (PSW.7) se poziioneaz la nivel 1 logic n urma execuiei unei instruciuni de
adresare care a produs un transport i n urma execuiei unei instruciuni de scdere care a necesitat un
mprumut. Dac execuia unei instruciuni de scdere/adunare nu produce mprumut/transport, indicatorul C se
poziioneaz la nivel logic 0. Astfel, indicatorul C se utilizeaz pentru aplicaii n operaii aritmetice cu
operanzi fr semn.
Deasemenea indicatorul C este folosit i n operaii logice i de transfer al controlului:
ADD A,direct
ANL C,bit
RLC A
JC Rel
Indicatorul de transport auxiliar AC (PSW.6) se poziioneaz la nivel logic 1 n urma unei operaii de
adunare/scdere care produce transport/mprumut din/n poziia bitului 3.

20
Indicatorul de depire OV (PSW.2) se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni
de adunare dac s-a produs un transport din poziia bitului 6 i nu s-a produs un transport din poziia bitului 7
indicnd astfel depirea domeniului de valori ( 128 127) .
Indicatorul de paritate P (PSW.0) conine suma modulo 2 a biilor registrului acumulator. La nivel logic
1 indic un numr impar de bii cu nivel logic 1 n acumulator. Bitul P nu este modificat de nici o
instruciune de scriere n registrul PSW.
Ceilali bii ai PSW sunt: F (PSW.5) disponibil pentru uz general, PSW.1 rezervat pentru dezvoltri
ulterioare (nefolosit), RS1 i RS0 (PSW.4 i PSW.3) pentru selecia grupului de registre R0-R7.
SBUF registru serial fiind compus de fapt din dou registre separate de 8 bii avnd aceeai adres
direct, unul pentru transmisie i unul pentru recepie folosite pentru interfaa serial. Cnd un octet de date este
scris n SBUF acesta este plasat n bufferul de transmisie i declanseaz nceputul transmisiei seriale a acestuia.
Cnd se realizeaz o recepie se citete coninutul bufferului de recepie. Adresa direct a registrului SBUF este
99H.
Registrele de control exist mai multe astfel de registre, care conin bii de control i de stare pentru
ntreruperi, temporizatoare/numrtoare i portul serial. Ele vor fi descrise la funciile corespunzatoare.
Registrele de temporizare exist dou perechi de registre de cte 8 bii T0 (TH0, TL0) T1 (TH1, TL1)
folosite ca numrtoare/temporizatoare de 16 bii programabile n 4 moduri diferite. Celelalte registre interne i
funciile 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 cmp de 8 bii de adres din instruciune. Doar RAM-ul
intern de date i SRF pot fi adresate direct.
Ex: MOV A,30h
MOV A,DPL
Adresarea indirect
n adresarea indirect instruciunea specific un registru ce conine adresa operandului. Doar RAM-ul
intern i cel extern poate fi adresat indirect. Adresa pe 8 bii a operandului se afl n unul din registrele R0 sau
R1. Registrul Ri, i=0 sau 1 este precizat printr-un bit din codul main al instruciunii.
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 bii a operandului se afl n DPTR fiind folosit pentru transfer de date din memoria RAM
extern n instruciuni de tipul:
MOVX A,@DPTR
MOVX @DPTR,A
Instruciuni cu regitrii
Instruciunile cu regitrii de lucru interni (R0-R7) au avantajul eliminrii unui octet de adres din
instruciune deoarece adresa operandului se poate coda pe 3 bii din codul instruciune.
Ex: MOV A,Rn 1110 1rrr
MOV Rn,direct 1010 1rrr adr direct
Exist i instruciuni specifice orientate pe manevrarea regitrilor. Unele instruciuni opereaz doar n
acumulator sau DPTR nefiind necesar nici un octet suplimentar de adres n codul instruciunii.
Ex: CLR A 1110 0100
DEC A 0001 0100
DIV A,B 1000 0100
21
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,#100100 A
MOV A,#64H
Adresarea indexat
Se folosete pentru a accesa memoria de program ce poate fi doar citit. Acest mod se folosete pentru a
citi tabele din memoria de program. Registrul de baz de 16 bii (unul din registre DPTR sau PC) indic baza
tabelului iar acumulatorul este incrcat cu poziia din tabel dorit. Adresa de citire din tabel rezult ca sum
dintre coninutul acumulatorului i pointerul de baz.

Tipuri de instruciuni
Instruciuni aritmetice
Aceste instructiuni sunt:
Adunare ADD A,<BYTE>
Adunare cu C ADDC A,<BYTE>
Scdere SUBB A,<BYTE>
Incrementare INC <BYTE>
Decrementare DEC <BYTE>
nmulire MUL AB
mprire DIV AB
Ajustare zecimal DA
Instruciuni logice
Instruciunile 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 operaie de tipul ANL A,<byte> poate lua una din formele urmtoare:
Adresare direct ANL A,30H
Adresare indirect ANL A,@R1
Adresare registru ANL A,R6
Adresare imediat ANL A,#100

22
Toate operaiile asupra memoriei de date pot fi executate fr a folosi acumulatorul. De ex. XRL <byte>,
#data execut un sau exclusiv ntre octetul de memorie i data imediat fr folosirea acumulatorului.
Instruciunea SWAP A schimb ntre ele partea superioar i cea inferioar din acumulator.
Instruciuni pentru transferul datelor cu memoria intern
Formatul general al instruciunii este: MOV <dest>,<sursa> i permite transferul ntre dou locaii interne
RAM sau SRF fr a folosi acumulatorul sau ntre un registru i o locaie de memorie. Trebuie inut cont de
faptul c pentru 8052 spaiul de memorie superior celor 128 octei RAM poate fi adresat doar indirect, iar
spaiul registrelor cu funcii speciale poate fi adresat doar direct.
Stiva se afl n memoria RAM intern i crete spre adresele superioare. Instruciunea PUSH mai nti
incrementeaz SP (Stach Pointer) i apoi depune octetul pe stiv. Instruciunile PUSH i POP se folosesc doar n
modul de adresare direct pentru a indica octetul ce va fi salvat sau restaurat. Dac stiva depete cei 128 de
octei din RAM-ul intern, octeii depui n continuare se pierd iar cei restaurai au valori nedeterminate.
Instruciunile de transfer includ i instruciuni pe 16 bii care pot fi folosite pentru a iniializa pointerul de date
DPTR pentru citiri de tabele din memoria program sau pentru accesul la memoria extern de date. Principalele
instruciuni care adreseaz spaiul intern al memoriei de date sunt:
MOV A,<src>
MOV <dest>,A
MOV <dest>,<src>
MOV DPTR,#data 16
PUSH <src>
POP <dest>
XCH A,<byte>
XCHD A,@Ri
Instruciunea XCH A,<byte> face ca acumulatorul i octetul s-i schimbe valorile ntre ele.
Instruciunea XCHD A,@Ri este asemntoare, dar doar cei mai puin semnificativi 4 bii sunt schimbai.

Instruciuni pentru transferul datelor cu memoria extern


n acest caz poate fi folosit doar adresarea indirect. Alegerea tipului de transfer se face dup numrul de
octei de adres. Dac se dorete adresarea cu un singur octet de adres se vor folosi regitrii R0 sau R1.
Pentru adresarea cu doi octei de adres se va folosi registrul DPTR. Dezavantajul folosirii adresei pe 16 bii
este acela al folosirii portului P2 care astfel nu poate fi folosit pentru aplicaie. Selectarea memoriei externe se
face cu operaii de tipul MOVX ce pot fi:
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
Setul de instruciuni al microcontrolerului 8051 conine i dou instruciuni pentru citirea tabelelor din
memoria program. Aceste instruciuni sunt:
MOVC A,@A+DPTR
MOVC A,@A+PC
Instruciunea MOVC A,@A+DPTR transfer intrarea din tabel n acumulator. DPTR este setat s indice
nceputul tabelei iar acumulatorul intrarea din tabel.
Instruciunea MOVC A,@A+PC se compune din urmtoarele microoperaii:
( PC ) ( PC ) 1
( A) (( A) PC )
Folosirea acestui tip de citire a datelor este ilustrat de programul urmtor:
MOV A,INTR_TABLE
CALL TABLE
23
------------------
Subrutina TABLE va arta astfel:
TABLE: MOVC A,@A+PC
RET
data1
-------
dataN
Imediat dup instruciunea RET se plaseaz tabela cu intrri de la 1 la 255. Intrarea 0 nu se foloseste deoarece
n timpul execuiei instruciunii MOVC, PC-ul conine adresa instruciunii de ntoarcere RET.

Offset relativ
Destinaia adresei unde se face un salt condiionat este specificat n asamblor de un tabel sau de o adres
n memoria program. Destinaia se d ca un offset relativ la poziia curent a PC. Aceasta nseamn, n cod
complement lui doi, c octetul offset se adun la PC dac saltul are loc. Domeniul de salt este cuprins ntre -128
i +127 octei n memoria program, relativ la primul octet ce urmeaz dup instruciune.
Instructiuni de salt
Aceste instruciuni sunt:
JMP addr
JMP @A+DPTR
Instruciunea JMP addr ascunde de fapt trei instruciuni: SJMP, AJMP, LJMP
1. SJMP formeaz adresa destinaie ca offset relativ, avnd doi octei coninnd codul operaiei i
offsetul relativ. Distana maxim de salt este limitat la -128, +127 octei relativ la instruciunea ce urmeaz
dup SJMP.
2. LJMP formeaz adresa de salt ca o constant pe 16 bii. Instruciunea are 3 octei constnd n codul
operaiei i doi octei de adres, destinaia fiind oriunde n spaiul de 64 k.
3. AJMP formeaz adresa destinaie ca o constant pe 11 bii. Instruciunea are 2 octei lungime, unul
conine codul operaiei din 5 bii i pe 3 bii adresele cele mai semnificative. Al doilea octet conine restul
adresei. Adresa de salt poate fi oriunde n spaiul de 2k octei relativ la instruciunea ce urmeaz dup AJMP.
JMP @A+DPTR ofer posibiliti de salt pentru lucru cu tabele. Adresa destinaie este obinut ca
sum dintre registrul DPTR i coninutul acumulatorului. Adresa de salt este pe 16 bii. n mod uzual DPTR este
setat cu adresa tabelului i funcie de adresa acumulatorului avem o anumit specificaie.
TABLE:AJMP CASE0
AJMP CASE1

AJMP CASEN


MOV DPTR,#TABLE
MOV A,INDEX
RL A ;nmulire cu doi
JMP @A+DPTR

Lucrul cu subrutine
Apelul unei subrutine se face cu instruciuni de tipul CALL adr. De fapt sunt dou instruciuni LCALL i
ACALL cu adresare pe 16 bii, respectiv pe 11 bii. Subrutinele trebuie s se termine cu RET pentru a reveni la
instruciunea de dup CALL. ntreruperile se vor termina cu RETI.
Salturi condiionate

24
Acestea specific destinaia adresei ca un offset relativ la instructiunea ce urmeaz dup instruciunea de
salt. Distana de salt este limitat la -128 la +127 octeti fa de primul octet al instruciunii urmtoare. Nu exist
flag z n PSW. Instruciunile JZ i JNZ testeaz direct coninutul acumulatorului dac este zero i n funcie de
coninut face saltul sau continu programul. DJNZ este o instruciune de control pentru bucle la fel ca i CJNE.
Formatul lor este:
DJNZ <byte>, rel
CJNE A,<byte>,rel
CJNE <byte>,#data,rel

Porturile paralele ale 8051


Microcontrolerul 8051 conine patru porturi paralele bidirecionale de cte 8 bii. Fiecare port are un
registru intern de 8 bii P0P3 i un amplificator de magistral bidirecional. Prin structura
microcontrolerului, porturile paralele pot realiza funcii alternative care determin utilizri specifice ale
porturilor.
Astfel amplificatoarele de magistral ale porturilor P0 i P2 se utilizeaz pentru accesul memoriilor
externe. Portul P1 este un port clasic de intrare/ieire. Liniile portului P3 pot avea utilizri alternative.

Portul P1
Un operand surs pentru o instruciune de adresare direct a unui port poate fi dat de coninutul registrului
portului sau de nivelele logice ale liniilor (pinilor) portului.
Citire bistabil
P1.x
A1

Linia x
Magistral intern D Q Rs
PIN
comand scriere P1.x
T Q T
n bistabil P1.x

A2
citire
P1.x

n instruciunea ANL P1,A un operand surs este coninutul registrului portului P1.
n instruciunea ANL A,P1 un operand sursa este dat de nivelele logice corespunztoare ale pinilor portului
P1.
Aceast logic de funcionare se realizeaz prin comenzi corespunztoare de citire a bistabilelor P1.X,
respectiv a pinilor P1.X. Nivelul logic dintr-un bistabil al unui port poate fi diferit de nivelul logic al pinului
corespunztor. De ex. Dac ieirea Q a bistabilului P1.X este la nivel logic1, tranzistorul T este blocat i
nivelul logic al pinului P1.X poate fi comandat din exterior.
Rezistena Rs este o rezisten de sarcin activ cu rolul de a mri viteza de comutare de la nivel logic 0
la nivel logic 1. Aceast mrire de vitez se obine prin generarea de ctre sarcina activ a unui curent de 30
mA pe durata a dou perioade ale generatorului de tact, ncepnd cu frontul de comutare 0 1 logic de la
ieirea Q a bistabilului P1.X.
Structura unei astfel de rezistene active este :

25
Vcc
0,25mA

linie ntrziere
T1 T2
2T0

Q T PIN
P1.x
bistabil P1.x

Tranzistorul T2 cu canal iniial, genereaz n permanen un curent de 0,25 mA. n regim staionar avnd
Q la nivelul logic 0 sau 1, tranzistorul T1 de tipul cu canal indus, este blocat deoarece nivelele logice de la
ntrzierile circuitului SAU_NU sunt complementare. Dup frontul de comutare a semnalului de la nivelul 1
la 0 logic, n intervalul a dou perioade T0 ale generatorului de tact, ntrzierile circuitului SAU_NU sunt la
nivelul logic 0 i tranzistorul T1 genereaz un curent de 30 mA. Acest curent mrete viteza de comutare de la
nivelul logic 0 la nivelul logic 1 a semnalului de ieire de la pinul P1.X.

Portul P3
Portul P3 poate realiza aceleai funciuni ca i portul P1 i n plus poate fi utilizat pentru funcii
alternative de intrare sau de la ieire. Pentru realizarea funciei alternative de intrare corespunztoare unui pin
P3.X circuitul conine amplificatorul repetor A3 a crui ieire este conectat n structura microcontrolerului n
concordan cu funcia alternativ realizat.

comand citire Funcie alternativ


bistabil P3.x
A1
Vcc
Linie x
D Q Rs
Magistrala interna
Bistabil
P3.x PIN
comanda scriere P3.x
T Q
bistabil P3.X

A2 A3
comand citire
pin P3.x Funcie alternativ

Deasemenea pentru realizarea funciei alternative de intrare este necesar blocarea tranzistorului T care
se obine prin aplicarea de nivele logice 1 la intrrile circuitului I-NU. Astfel se impune programarea la nivel
logic 1 a bistabilului P3.X. cealalt intrare a circuitului I-NU este conectat intern la nivel logic 1 n
circuitul corespunzator unui pin P3.X cu funcie alternative de intrare.
Funcia alternativ de ieire corespunztoare unui pin P3.X se realizeaz prin comanda unei intrri n
circuitul I-NU, cealalt intrare fiind stabilit la nivel logic 1 prin programarea bistabilului P3.X. n cazul
realizrii funciei TXD (pin P3.1) linia de intrare n circuitul I-NU pentru funcia alternativ este la nivel logic
1 cu excepia intervalului corespunztor transmisiei unui caracter, declanat de scrierea unui octet n registrul
26
intern SBUF. n cazul realizrii funciilor WR i RD liniile de intrare n circuitele I-NU pentru funciile
alternative sunt la nivel logic1, cu excepia intervalelor corespunztoare ciclurilor de scriere, respectiv citire
n/din memoria de date extern.
Portul P2
Portul P2 are funcia alternativ de transfer al octetului mai semnificativ al adresei n cicluri de extragere
coduri instructiuni din memoria de program extern, n cicluri de citire din memoria de program extern, cu
instruciuni MOVC i n cicluri de acces la memoria de date extern cu instruciuni MOVX n care adresarea se
realizeaz cu registru DPTR. n aceste cicluri linia de comand adresare este la nivel logic 1 i impune poziia
1 pentru comutatorul k:
Bit de Comand
comand citire adres adres
bistabil P2.x
A1
Vcc
Linie x
D Q Rs
Magistrala interna
Bistabil
P2.x
1 PIN
comanda scriere P2.x
T Q 0 K
bistabil P2.X

A2
comand citire
pin P2.x
Astfel bitul de adres corespunztor comand ieirea P2.X a portului. Deasemenea, nivelul logic 1 la
ieirea circuitului I comand sarcina activ RS astfel nct s genereze un curent mai mare de 0,25 mA dac
bitul de adres are nivel logic 1. Se asigur astfel comanda corespunztoare a circuitelor de memorie extern.
n afara intervalelor corespunztoare ciclurilor indicate mai sus portul P2 poate fi utilizat pentru intrri/ieiri de
uz general.
Portul P0
Are funcia alternativ de transfer al octetului mai puin semnificativ al adresei, precum i al octetului
cod instruciune sau dat n orice ciclu de acces la memoriile externe.
Bit de Comand
adres/date adres/date
comand citire
bistabil P0.x
A1
Vcc
Linie x
D Q Ts
Magistrala interna
Bistabil
P0.x
1 PIN
comanda scriere P0.x
T Q K
bistabil P0.X 0

A2
comand citire
pin P0.x
27
n intervalele corespunztoare acestor cicluri, linia de comand adresare/transfer date, este la nivel logic
1 i impune poziia 1 pentru comutatorul k. Astfel prin liniile portului P0 se poate realiza transferul adresei i
datei de intrare sau ieire, prin multiplexarea n timp. La ieirea circuitului I se obine nivel logic 1 care
deschide tranzistorul TS n intervalele de transfer bii de adres cu nivel logic 1, sau de ieire bii de date cu
nivel logic 1. n afara acestor intervale, tranzistorul Ts este blocat. n ciclurile de acces la memoriile externe,
bistabilele (biii) registrului P0 se ncarc cu nivele logice 1.
n afara ciclurilor de acces la memoriile externe, portul P0 poate fi utilizat pentru intrri/ieiri de uz
general. Ieirile P0.X sunt de tipul dren n gol (Ts-blocat), iar intrrile P0.X sunt de impedan ridicat (T i T S
= blocate, Q = 1 prin programare).

Funcionarea sincronizat a microcontrolerului 8051


Pentru funcionarea sincronizat, microcontrolerul conine un generator de tact. Semnalul de comand al
generatorului de tact este dat de un oscilator cu frecvena maxim f 0 12 MHz . Pentru realizarea
oscilatorului, microcontrolerul conine un circuit inversor cu intrarea i ieirea conectate la pinii XTAL1 i
XTAL2. Configuraia de oscilator se obine prin conectarea ntre pinii XTAL1 i XTAL2 a unui cristal de cuar
i a doi condensatori conectai de la cei doi pini la mas.
Funcionarea sincronizat a microcontrolerului se desfoar n faze, stri i cicluri main. O faz a
microcontrolerului corespunde duratei T0 1 / R0 a perioadei de tact. Dou faze succesive notate P1, P2
definesc o stare a microcontrolerului. Un ciclu main se desfoar pe durata a 12 perioade T0 adic 6 stri.
Cele 12 perioade ale unui ciclu main sunt notate S1P1, S1P2, S2P1, S2P2, . S6P1, S6P2.
Microcontrolerul 8051 execut o instruciune n unul sau dou cicluri main cu excepia instruciunilor
de multiplicare i divizare ce se realizeaz n 4 cicli main.

CLK S1 S2 S3
P1 P2 P1 P2 P1 P2

FAZA
STARE

Execuia unei instruciuni ncepe n faza S1P1 a unui ciclu main prin extragerea din memoria program
a primului octet al instruciunii i transferul acestuia n registrul de instruciuni al microcontrolerului n faza
S1P2. n cazul unei instruciuni cu codul main de doi oceti, al doilea octet se extrage din memoria program n
starea S4 a aceluiai ciclu main. Rezult c intr-un ciclu main se pot efectua dou extrageri de coduri
instruciune. Dac este nevoie i de cel de-al treilea octet, acesta se va extrage n faza S1P2 a celui de-al doilea
ciclu main. n strile n care se face extragere de cod instruciunea are loc i incrementarea contorului de
program PC. Execuia unei instruciuni se termin n faza S6P2 a ciclului main corespunztor. Pentru accesul
memoriilor externe, adresa se formeaz din valoarea portului P2 (octetul superior) i valoarea portului P0
(octetul inferior). Transferul unui octet de date se face prin liniile portului P0. rezult c portul P0 este folosit
att pentru adrese ct i pentru date prin tehnici de multiplexare. Se impune astfel memorarea temporar ntr-un
registru extern a octetului mai puin semnificativ al adresei. Memorarea adresei inferioare n registru se
realizeaz pe baza semnalului de validare registru de adresare ALE. Pentru selecia diferit a celor dou tipuri de
memorie (de program i RAM) microcontrolerul genereaz semnalul PSEN pentru validarea memoriei de

28
program extern i semanlele RD i WR pentru memoria de date extern. Diagramele de timp
corespunzatoare extragerii de coduri instruciuni din memorii program sunt:

CLK

S1 S2 S3 S4 S5 S6

ALE

PSEN

P0-P7

PC COD PC COD INSTRUCTIUNE


L INSTRUCTIUNE L

A0-A7

PCL PCL

A15-A8
P2.7-P2.0

P
C PCH PCH
H

Circuitele de numrare/temporizare ale microcontrolerului 8051


Microcontrolerul 8051 conine dou circuite de numrare/temporizare notate cu N/T0 i N/T1. Fiecare
circuit conine dou registre numrtoare de cte 8 bii , TH0, TL0, TH1, TL1 din grupul registrelor cu funcii
speciale. Structura unui circuit numrtor/temporizator este prezentat n figura de mai jos.
Funcia de temporizare se realizeaz prin numarare de impulsuri cu o frecvena egal cu frecvena
oscilatorului divizat cu 12. Rezult c frecvena pentru temporizare avnd f0=12 MHz este f=1 MHz.
Funcia de numrare se realizeaz prin numrarea fronturilor de cdere ale semnalului aplicat la pinul Ti
al microcontrolerului. Aceste fronturi se detecteaz prin testarea de ctre microcontroler a strii liniei Ti n
fazele S5P2 ale ciclurilor main. Se consider detectat un front de cdere dac n fazele S5P2 din dou cicluri
main consecutive rezultatul testrii va fi un nivel logic 1 urmat de un nivel 0 logic. Detecia unui front de
cdere determin incrementarea cu o unitate a coninutului registrului numrator n faza S3P1 a ciclului main
urmtor detectrii frontului de cdere. Rezult c funcia de numrare a fronturilor de cdere ale semnalului
extern aplicat pinului Ti se efectueaz corect dac fiecare nivel corespunztor acestui semnal este meninut pe o

29
durat mai mare dect durata unui ciclu main. Astfel frecvena maxim a semnalului de la linia de intrare Ti
este f0/24 adic 500KHz pentru f0=12MHz.
Divizor f0/12
Generator f0
frecven C/Ti
de tact (TMOD)
()

0 K1 K2 Registru
Ti numrtor
1
PIN P3.i+4 1 THi,TLi

GATE i TR i
(TMOD) (TCON) TF i
(TCON)

/ INTi Cerere ntrerupere


PIN P3.i+2

Pentru controlul funcionrii circuitelor numrtoare/temporizatoare se utilizeaz registrele interne


TMOD i TCON din grupul registrelor cu funcii speciale. Funcia de numrare sau temporizare se realizeaz
prin comanda corespunztoare a comutatorului K1. Acest comutator este comandat de bitul C/Ti din registrul
TMOD (C/T0=TMOD.2, C/T1=TMOD.6). Dup cum rezult i din figura anterioar vom avea:
C/Ti = 0 temporizator
C/Ti = 1 numrtor
Declanarea i blocarea proceselor de numrare/temporizare, corespunztoare poziiilor cuplat respectiv
decuplat ale comutatorului K2 se pot stabili prin programarea biilor TRi din registrul TCON i GATEi din
registrul TMOD i prin semnal extern conectat la pinul INTi al microcontrolerului. Comanda proceselor de
numrare/temporizare se poate realiza prin program prin stabilirea bitului GATEi la nivelul logic 0.
n acest caz declanarea i blocarea se comand prin programarea bitului TRi. Dac biii GATEi i TRi
se programeaz la nivel logic 1, comanda se realizeaz cu semnalul conectat la intrarea INTi a
microcontrolerului.
Procesele de numrare/temporizare evolueaz n sensul creterii coninutului registrului numrtor. La
depirea valorii maxime corespunztoare capacitii numrtorului, bitul indicator de depire TFi din registrul
TCON este poziionat la nivel logic 1 semnaliznd o cerere de ntrerupere. Coninutul numrtorului devine
zero sau se ncarc cu o valoare programat n funcie de modul de lucru al circuitului numrtor/temporizator.
Bitul indicator de depire se poziioneaz la nivelul logic 0 dup acceptarea cererii de ntrerupere de ctre
logica de control.
Exist 4 moduri de lucru n funcie de modul de utilizare al registrelor TLi i THi. Selecia modului de
lucru se realizeaz prin programarea biilor M1 i M0 (TMOD.1, TMOD.0) pentru N/T0 si M1 si M0 (TMOD.5,
TMOD.4) pentru N/T1.\
n modul 0 registrul numrtor este de 13 bii format din registrul TH i cei mai puin semnificativi 5 bii
ai registrului TL.

Reg. TL Reg. TL
TL.4 TL.0 TH.7 TH.0

30
Coninutul registrului astfel obinut este incrementat pn la valoarea maxim. Urmtoarea incrementare
duce la anularea coninutului numrtorului.
n modul 1 registrul numrtor este de 8 bii format din registrul TL ca n fig. urmtoare:

Reg. TL
TF
TL.7 TL.0

Reg. TL
TH.7 TH.0

La depirea capacitii de numrare, registrul TL se ncarc cu coninutul registrului TH. Accest mod de
lucru este util pentru temporizri cu valori programabile. Durata temporizrii este dat de perioada cu care apar
depiri ale capacitii de numrare. Rezult c durata temporizrii este dat de:

12
T [ 256 (TH )]
f0

n modul de lucru 3 cele dou circuite de numrare/temporizare opereaz n mod diferit. Circuitul N/T0
conine ca numrtor registrul TL0. n plus registrul TH0 este inclus ntr-o structur de temporizator care
utilizeaz biii TR1 i TF1 corespunztori circuitului N/T1 n celelalte moduri de lucru.

f0/12 K
TF1 Cerere
REG TH0
TCON.7 ntrerupere

TR1
TMOD.6

Prin programarea circuitului N/T0 n modul 3 i a circutului N/T1 n modurile 0, 1 sau 2, comutatorul K2
este cuplat indiferent de circuitul de comand. Blocarea procesului de numrare se poate face prin programarea
modului 3 pentru circuitul N/T1. Circuitul N/T1 n modul 3 nu poate efectua cereri de ntreruperi, iar
declanarea numrtorului 1 se face doar prin programarea in alt mod de lucru.

Portul serial al microcontrolerului 8051

Este utilizat pentru transferul de informaie ntre microcontroler i componentele externe sistemului cu
comunicaie serial. Transferul serial al unui cuvnt de la emitor la receptor se realizeaz prin conversia
paralel-serie a cuvntului i apoi conversia serie-paralel.

31
Comunicaia serial ntre dou echipamente poate realiza transferul de informaie n ambele sensuri
alternativ printr-o singur linie (comunicaie semiduplex) sau simultan prin dou linii (comunicaie duplex).
n cazul comunicaiei asincrone, transferul cuvintelor dintr-un mesaj se poate realiza la intervale de timp
variabile. Un cuvnt conine o secven de 8 sau 9 bii de date. Transmisia presupune ncrcarea succesiv a
liniei de comunicaie cu biii corespunztori cuvntului de transmis, cu frecvena de comunicaie fc exprimat n
bii/s. Recepia const n testarea periodic a strii liniei de comunicaie n scopul citirii secvenei de bii de date.
Pentru transferul corect al unui cuvnt este necesar ca receptorul s citeasc starea liniei de comunicaie cu
aceeai frecven i faz cu care se ncarc biii cuvntului la emisie. Sincronizarea de faz a circuitului de
recepie cu cel de emisie se realizeaz pe baza frontului de cdere corespunztor bitului de start. Dup bitul de
start cu nivel logic 0 urmeaz emisia biilor de date (8 sau 9) ncepnd cu bitul de semnificaie minim (LSB).
Ultimul bit de date emis poate fi bit de paritate utilizat pentru verificarea corectitudinii cuvntului recepionat.
Dup ultimul bit de date urmeaz un bit de stop cu nivel logic 1.

BIT
START BIT BIT BIT Paritate
Data.0 Data.7 (opional)
Bit
stop

LS MS
B B

1/fc

Portul serial al microcontrolerului 8051 poate fi utilizat pentru comunicaie serial asincron de tip
duplex prin liniile de transmisie TXD (P3.1) respectiv recepie RXD (P3.0). Microcontrolerul 8051 are 2
registre interne notate SBUF, unul pentru transmisie i unul pentru recepie. Cele dou registre au aceeai adres
99H. Adresarea direct ca i operand surs a adresei 99H se refer la registrul SBUF de recepie. Adresarea
direct ca i operand destinaie a adresei 99H se refer la registrul SBUF de transmisie. Pentru recepie, portul
serial utilizeaz un registru de deplasare care realizeaz conversia serie paralel a datelor de pe linia de recepie.
Coninutul registrului de deplasare este transferat n registrul SBUF doar dup asamblarea complet a unui
octet. Dup transferul octetului din registrul de deplasare n registrul de recepie SBUF se poate trece la
obinerea unui nou octet n registrul de deplasare nainte de citirea octetului precedent din registrul de recepie
SBUF. Dac citirea octetului precedent nu se realizeaz nainte de terminarea asamblrii noului octet, rezult
pierderea octetului precedent. Portul serial al microcontrolerului 8051 poate funciona n 4 moduri de lucru
stabilite prin programarea biilor SM0 i SM1 din registrul de control al portului serial SCON.

Modul 0
Se folosete pentru realizarea unei comunicaii semiduplex. Astfel, linia RXD se utilizeaz alternativ
pentru recepia sau transmisia unor secvene de 8 bii de date cu frecvena de comunicaie f 0 / 12 bii/s (f0
frecvena oscilatorului de tact). Semnalul cu frecvena de comunicaie f 0 / 12 este disponibil la linia TXD.
Declanarea transmisiei se realizeaz prin ncrcarea unui octet n registrul SBUF. La sfritul transmisiei celor
8 bii de date, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere la transmisie Ti preciznd
posibilitatea de ncrcare a unui octet n registrul de transmisie. Declanarea recepiei se realizeaz dac bitul de
validare a recepiei REN este programat la nivel 1. La sfritul recepiei celor 8 bii de date, portul serial
poziioneaz la nivel 1 bitul indicator de ntrerupere la recepie Ri.
Modurile de lucru 1, 2, 3 ale portului serial se utilizeaz pentru comunicaie asincron de tip duplex.
Astfel se realizeaz transmisia prin linia TXD i recepia prin linia RXD a unor cuvinte ce conin un bit de start
cu nivel 0, 8 bii de date i un bit de stop cu nivel 1.
n modurile 2 i 3, cuvintele conin i un bit cu nivel logic programabil ce urmeaz celor 8 bii de date.
n modurile 1,2,3 declanarea transmisiei se realizeaz prin scrierea octetului de transmis n registrul SBUF. La
32
nceputul transmisiei bitului de stop, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere Ti.
Validarea recepiei se face prin programarea la nivel 1 a bitului de validare recepie REN. Declanarea
recepiei unui cuvnt se realizeaz de frontul de cdere al bitului de start.
Dac bitul SM2 (SCON.5) este programat la nivel 0, portul serial poziioneaz la nivel 1 bitul indicator
de ntrerupere la recepie Ri, la mijlocul intervalului de recepie a bitului de stop corespunztor cuvntului
recepionat. Dac bitul SM2 (SCON.5) este programat la nivel 1, portul serial poziioneaz la nivel 1 bitul
indicator de ntrerupere la recepie Ri, numai dac bitul urmtor celor 8 bii de date (RB8) are nivel 1.
Deoarece n modurile 2 i 3, nivelul logic al bitului urmtor celor 8 bii de date poate fi programat la
transmisie n TB8, rezult posibilitatea de recepie selectiv in funcie de SM2 a cuvintelor ncrcate pe o linie
de comunicaie. Acest lucru poate fi folosit pentru comunicaii multiprocesor.
Un cuvnt de comand conine 8 bii de date cu adresa unui microprocesor din sistem i un bit urmtor
cu nivel 1. Un cuvnt de date conine dup cei 8 bii de date un bit cu nivel 1.
Porturile seriale ale microcontrolerelor 8051 din sistem sunt programate n modurile 2 sau 3 i cu SM2 la
nivel 1. Astfel recepia unui cuvnt de comand poziioneaz la nivel 1 bitul Ri din fiecare microcontroler.
Subrutina de ntrerupere analizeaz cei 8 bii ce pot fi de adres. Microcontrolerul ce recunoate propria
adres poziioneaz SM2 la 0 pentru a recepiona cuvintele de date ce urmeaz. Celelalte C din sistem
menin SM2=1 i nu genereaz ntrerupere de recepie.
n modurile 1 i 3 valoarea frecvenei de comunicaie poate fi stabilit prin programare. Pentru aceasta se
folosete Timerul 1 ca generator de frecven de comunicaie programat n modul 2.
2 ( SMOD )
fc f0
32 12 [ 256 (TH 1)]
unde, SMOD este un bit din PCON. De cele mai multe ori utilizatorul tie frecvena de comunicaie i dorete s
tie valoarea ce trebuie nscris n TH1.

2 ( SMOD ) f 0
TH 1 256
32 12 f c

THi trebuie s fie o valoare ntreag. Rotunjind pe TH1 la ntregul cel mai apropiat se produce o modificare a
frecvenei de comunicaie iar utilizatorul trebuie s schimbe valoarea cuarului.
Ex:
f c 4800 biti/sec.

f 0 12 MHz TH 1 f c real 4807,7 biti/sec.
(SMOD) 1
Dac am dori:
f c 9600 biti/sec.

f 0 12 MHz TH 1 249,5
(SMOD) 0
f TH 1 249 8928 biti/sec.
se impune schimbarea cuartului
f THI 10416 biti/sec.

n modul 2 de lucru al portului serial valoarea frecvenei de comunicaie este:

33
2 (SMOD)
fc f0
64
SM 2 0 Ri 1 pt. cuvnt .
Ri 1 dac bitul 9 1
SM 2 1
Ri 0 dac bitul 9 0
Comand 8 bii date +1+stop (SM2=1) rec.adr.
Date 8 bii date +0+stop (SM2=0) rec.date cel cu adr.01C
(SM2=1) pt. adr. BAD

Sistemul de ntreruperi al C8051


Sursele de cereri de ntreruperi pentru C 8051 sunt externe i interne. Sursele externe transmit
cererile de ntrerupere prin pinii INT0( P3.2) i INT1( P3.3) ai microcontrolerului. Sursele interne de
ntrerupere sunt circuite de numrare/temporizare N / T0 , N / T1 i portul serial. Cererile de ntrerupere generate
de sursele de ntrerupere poziioneaz la nivel 1 biii corespunztori din registrele interne TCON i SCON
dup cum urmeaz:
- IE0 (TCON.1) si IE1 (TCON.3) pentru ntreruperi externe
- TF0 (TCON.5) i TF1 (TCON.7) pentru ntreruperi de la circuitele de numrare/temporizare.
- Ri (SCON.0) i Ti (SCON.1) pentru ntreruperi de la portul serial.
Strile acestor bii indicatori de cereri de ntrerupere sunt testate de logica de control a ntreruperilor
microcontrolerului n faza S5P2 a fiecrui ciclu main. Astfel logica de control a ntreruperilor identific
sursele care solicit ntrerupere i asigur apelul subrutinei de ntrerupere corespunztoare unei surse, n
concordan cu condiiile de validare i prioritile stabilite pentru surse prin programare. Strile biilor
indicatori de cereri de ntrerupere pot fi stabilite prin programare.
O surs extern poate solicita o cerere de ntrerupere prin comanda pinului INT 0 sau INT1` cu nivel
logic 0 sau cu un front de cdere, n funcie de nivelul logic programat n bitul IT0 sau IT1. n cazul variantei
de cerere de ntrerupere extern prin nivel, bitul IEi urmrete n permanen nivelul logic de comand a intrrii
INT i .
Astfel, o cerere de ntrerupere indicat prin nivel logic 1 al bitului IEi corespunde nivelului logic 0 de
comand a pinului INT i , avnd n vedere prezena circuitului inversor. Nivelul logic 0 corespunztor unei
cereri de ntrerupere extern prin nivel trebuie meninut pn la apelul de ctre microcontroler a subrutinei de
ntrerupere corespunztoare. Comanda liniei INT i la nivel 1 trebuie s se efectueze nainte de sfritul
execuiei subrutinei de ntrerupere corespunztoare, pentru a se evita apelul repetat al acesteia. n cazul variantei
de cerere de ntrerupere prin front de cdere, bitul IEi este poziionat la nivel 1 de un front de cdere prezent
la intrarea INT i . Detecia fronturilor de cdere se realizeaz prin eantionarea strii intrrii INT i cu frecvena
ciclurilor main. Rezult c pentru detecia corect a unui front de cdere este necesar comanda intrrii INT i
cu nivel 1, apoi cu nivel 0, fiecare nivel logic trebuind s fie meninut pe o durat cel putin egal cu durata
unui ciclu main. Nivelul logic1 din bitul IEi, rezultat ca urmare a deteciei unui front de cdere, se menine
pn la apelul de ctre microcontroler a subrutinei de ntrerupere corespunzatoare, cnd bitul IEi este poziionat
la nivel 0 de ctre logica de control a microcontrolerului.

34
IT0
TCON.0

INT0 0
IE0
PIN P3.2 DETECTOR DE FRONT TCON.1
DE CDERE 1 K1

N/T0 TF0
TCON.5

IT1
TCON.2
INT1 0
IE1
PIN P3.3 DETECTOR DE FRONT TCON.3
DE CDERE 1 K2

N/T0 TF1
TCON.7

Ti
SCON.1
PORT
SERIAL
Ri
SCON.0

35
Cererile de ntrerupere de la un circuit de numrare/temporizare N/Ti0, i=0, 1, sunt generate la depirea
valorii maxime corespunztoare capacitii numrtorului, cnd bitul indicator de depire TFi se poziioneaz
la nivel logic 1. La apelul subrutinei de ntrerupere corespunztoare, bitul TFi este poziionat la nivel logic
0 de ctre logica de control a ntreruperilor microntrolerului.
Cererile de ntrerupere de la portul serial sunt generate de la sfritul transmisiei sau recepiei unui cuvnt,
cnd biii indicatori de cereri de ntrerupere Ti respectiv Ri se poziioneaz la nivelul logic 1. La apelul
subrutinei de ntrerupere corespunztoare, strile biilor Ti i Ri nu sunt modificate de ctre logica de control a
ntreruperilor microcontrolerului, astfel subrutina de ntrerupere se testeaz biii Ri i Ti pentru determinarea
tipului de ntrerupere (recepie respectiv transmisie) i apoi se programeaz nivelul logic n biii Ri i Ti. Sursele
de cereri de ntreruperi pentru microcontrolerul 8051 sunt mascabile. Astfel validarea sau invalidarea acceptrii
de ctre microcontroler a cererilor de ntreruperi corespunztoare diferitelor surse se pot stabili prin programarea
registrului de validare ntrerupere IE. Invalidarea tuturor surselor de cereri de ntrerupere se realizeaz prin
programarea bitului EA (IE.7). La nivel logic 0. Dac bitul EA este programat la nivel 1 validarea sau
invalidarea surselor de cereri de ntrerupere se programeaz independent pentru fiecare surs utiliznd biii de
validare a ntreruperilor din registrul IE, dup cum urmeaz:
EX0 (IE.0) pentru INT0
ET0 (IE.1) pentru N/T0
EX1 (IE.2) pentru INT1
ET1 (IE.3) pentru N/T1
ES (IE.4) pentru portul serial
Programarea nivelului logic 1 n bitul IE.i conduce la validarea sursei de cereri de ntrerupere
corespunztoare.

Sistemul de prioriti al ntreruperilor


Sistemul de prioriti pentru deservirea cererilor de ntrerupere cuprinde dou nivele de prioritate. Fiecare
surs de cerere de ntrerupere poate fi plasat n unul din cele dou niveluri de prioritate, prin programarea
corespunztoare a biilor registrului de control a prioritii ntreruperilor IP dup cum urmeaz:
PX0 (IP.0) pentru INT0
PT0 (IP.1) pentru N/T0
PX1 (IP.2) pentru INT1
PT1 (IP.3) pentru N/T1
PS (IP.4) pentru portul serial.
Programarea nivelului 1 in bitul IPi conduce la starea sursei de cereri de ntreruperi corespunztoare la
nivelul de prioritate ridicat.
Execuia unei subrutine de ntrerupere corespunztoare unei surse de ntrerupere programat la nivel ridicat
de prioritate nu poate fi ntrerupt.
n cazul a dou cereri de ntrerupere de la dou surse din niveluri de prioritate diferite ce apar simultan,
microcontrolerul servete prima cerere de ntrerupere corespunztoare sursei de ntrerupere cu un nivel de
prioritate ridicat. n cazul cererilor de ntrerupere simultane de la surse de acelai nivel de prioritate se utilizeaz
un al doilea criteriu de prioritate stabilit prin structura microcontrolerului . Acest al doilea criteriu este stabilit
pentru ambele niveluri de prioritate i plaseaz sursele de cereri de ntreruperi n ordinea scderii prioritii,
dup cum urmeaz:
INT0, NIT0, INT1, NIT1, i portul serial. Logica de control a ntreruperilor microcontrolerului 8051
eantioneaz starea biilor indicatori de cereri de ntrerupere n faza S5P2 a fiecrui ciclu main i analizeaz
rezultatele fiecrei eantionri n ciclul main urmtor. Aceast analiz const n identificarea sursei de

36
prioritate maxim care solicit ntrerupere. Dup ciclul de analiz, microcontrolerul execut intern ciclurile
corespunztoare unei instruciuni:
LCALL addr., unde addr este funcie de surs de cerere de ntrerupere servit dac sunt ndeplinite
condiiile urmtoare:
Ciclul de analiz este ultimul din execuia unei instruciuni.
Ciclul de analiz nu corespunde execuiei unei instruciuni din subrutina de ntrerupere corespunztoare
unei surse de acelai nivel de prioritate sau de nivel de prioritate mai ridicat
Ciclul de analiz nu corespunde execuiei unei instruciuni RETI sau a unei instruciuni de acces la
registrele IE i IP.
La execuia unei instruciuni LCALL addr., pentru apelul unei subrutine de ntrerupere se salveaz n
memoria stiv coninutul numrtorului de adrese PC i se ncarc n aceasta adresa de nceput a subrutinei de
ntrerupere. Aceast adres este funcie de sursa de cerere de ntrerupere servit i este stabilit prin structura
microcontrolerului dup cum urmeaz:
INT0 03h
NIT0 0Bh
INT1 13h
N/T1 1Bh
Port serial 23h
Subrutina de ntrerupere se termin cu o instruciune RETI prin care se realizeaz ncrcarea PC din
memoria stiva cu adresa de revenire n programul ntrerupt. Deasemenea, prin execuia instruciunii RETI se
informeaz logica de control a ntreruperilor cu privire la terminarea subrutinei de ntrerupere.

37

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