Sunteți pe pagina 1din 22

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
16 biti
Surse int.
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
3 0
P P de 8 bii
un port serial duplex
dou circuite numrtoare/temporizatoare N/T0, N/T1 de cte 16 bii
5 surse de ntrerupere cu dou nivele de prioriti
generator de tact 1, 2 12
z
MH
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:













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













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.
FFFFh
2000h
1FFFh
0000h
ROM
extern
ROM
intern
sau
FFFFh
0000h
ROM
extern
P0
DO-D7
AO-A7
MEM
PROG
A8-A15
OE
80C51
ALE
P2
PSEN
LATCH
STB
Memoria de date intern

Microcontrolerul 8051 are o memorie intern de date RAM de 128 octei adresabil direct i
indirect n spaiul de adresare Fh h 7 00 . Aceast zon este mprit astfel:
















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

ntr-o astfel de instruciune, registrele R0-R7 sunt adresate direct cu un cmp de 3 bii
) 7 0 ( = n 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:

Zona adresabila
la nivel de bit
Zona registrelor
R0-R7
Zona de uz
general
30h
28h
20h
10h
08h
00h
2Fh
7Fh
1Fh
17h
0Fh
07h
18h
R
0
00h
7Fh
R
1
R
2
R
3
R
4
R
5
R
6 R
7
PSW.4
RS1
PSW.3
RS0
Adresa grupului
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:













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
Adresabila
numai
direct
(SFR)
FFh
80h
7Fh
00h
Adresabila
numai
indirect
(8x52)

Adresabila
direct si
indirect
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.
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 ) 127 128 ( .
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
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 100A
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
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:

) ) (( ) (
1 ) ( ) (
PC A A
PC PC
+
+

Folosirea acestui tip de citire a datelor este ilustrat de programul urmtor:

MOV A,INTR_TABLE
CALL TABLE
------------------
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
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.

















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 1 0 logic de la ieirea Q a bistabilului P1.X.
Structura unei astfel de rezistene active este :










Citire bistabil
P
1
.x
Linia x
Magistral intern
comand scriere
n bistabil P
1.
x
citire
P
1.
x
A
1
A
2
D
T Q
Q Rs

T
PIN
P
1
.x
T
1
T
2

0,25mA
linie ntrziere
2T0
PIN
P1.x
bistabil P1.x
T
Vcc
Q

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.



















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 intern SBUF. n cazul
realizrii funciilor RD i WR 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:
D Q

Rs
PIN
P3.x
T
comand citire
bistabil P3.x
Linie x
Magistrala interna
Funcie alternativ
( , , ) TXD RD WR
Vcc
Funcie alternativ
0
( , , ) RXD T etc

Bistabil
P3.x
A
3
A
1
A
2
Q
comanda scriere

bistabil P3.X
comand citire

pin P3.x



















Astfel bitul de adres corespunztor comand ieirea P2.X a portului. Deasemenea, nivelul
logic 1 la ieirea circuitului I comand sarcina activ R
S
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.



















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 T
S
n intervalele de transfer bii
de adres cu nivel logic 1, sau de ieire bii de date cu nivel logic 1. n afara acestor
D Q

Rs
PIN
P2.x
T
comand citire
bistabil P2.x
Linie x
Magistrala interna
Bit de
adres
Vcc
Bistabil
P2.x
A
1
A
2
Q
comanda scriere

bistabil P2.X
comand citire

pin P2.x
1
0
K
Comand
adres
D Q

Ts
PIN
P0.x
T
comand citire
bistabil P0.x
Linie x
Magistrala interna
Bit de
adres/date
Vcc
Bistabil
P0.x
A
1
A
2
Q
comanda scriere

bistabil P0.X
comand citire

pin P0.x
1
0
K
Comand
adres/date
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 MHz 12
0
= f .
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
0 0
/ 1 R T = 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.













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
program extern i semanlele WR i RD pentru memoria de date extern. Diagramele de timp
corespunzatoare extragerii de coduri instruciuni din memorii program sunt:

FAZA
CLK
P1 P2 P2 P1 P1 P2
S1
S2
S3
t
STARE

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 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.
CLK
ALE
S1
S2 S3 S4 S5
S6
PSEN


COD INSTRUCTIUNE
PCL
PCL

COD INSTRUCTIUNE
P0-P7
PCL PCL
A0-A7
PCH
PCH
PCH
A15-A8
P2.7-P2.0



















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.






Generator
de tact
Divizor
frecven
(
12
)
C/Ti
(TMOD)
Registru
numrtor
THi,TLi
GATE i
(TMOD)
TR i
(TCON)
TF i
(TCON)
f
0

f
0
/12
0
1
1
K1 K2
Cerere ntrerupere
PIN P3.i+2
Ti
PIN P3.i+4
/ INTi

Reg. TL
TL.4 TL.0

Reg. TH
TH.7 TH.0
Coninutul registrului astfel obinut este incrementat pn la valoarea maxim.
Urmtoarea incrementare duce la anularea coninutului numrtorului.
n modul 1 registrul numrtor este de 16 bii format din registrul TH i registrulu TL.

n modul 2 registrul numrtor este de 8 bii format din registrul TL ca n fig. urmtoare:
















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:

)] ( 256 [
12
0
TH
f
T =

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.


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.




TR1
TMOD.6
TF1
TCON.7
REG TH0
Cerere

ntrerupere
f
0
/12
K
TF

Reg. TL
TL.7 TL.0

Reg. TL
TH.7 TH.0

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












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 12 /
0
f bii/s (f0frecvena oscilatorului de tact). Semnalul cu frecvena de
LSB
MSB
BIT
START BIT BIT BIT Paritate
Data.0 Data.7 (opional)
Bit
stop
1/f
c
comunicaie 12 /
0
f 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 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.

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


=

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.

c
SMOD
f
f
TH


=
12 32
2
256 1
0
) (


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:
}
biti/sec. 7 , 4807 13
1 (SMOD)
MHz 12 f
biti/sec. 4800
real 0
= => =

=
=
=
c
c
f TH
f

Dac am dori:
cuartului schimbarea impune se
biti/sec. 10416 250 1
biti/sec. 8928 249 1
5 , 249 1
0 (SMOD)
MHz 12 f
biti/sec. 9600
1
1
0

= => =
= => =
=

=
=
=
TH
TH
c
f TH
f TH
TH
f


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

= =
= =
=
= =
=
0 9 bitul dac 0 Ri
1 9 bitul dac 1 Ri
1 2 SM
cuvnt pt. 1 Ri 0 2 SM
f
64
2
f
0
) SMOD (
c
.
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 8051 C sunt externe i interne. Sursele externe
transmit cererile de ntrerupere prin pinii ) 3 . 3 P ( INT1 i ) 2 . 3 P ( 0 INT ai microcontrolerului.
Sursele interne de ntrerupere sunt circuite de numrare/temporizare
1 0
/ , / T N T N 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
` 1 INT sau 0 INT 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 i INT .
Astfel, o cerere de ntrerupere indicat prin nivel logic 1 al bitului IEi corespunde
nivelului logic 0 de comand a pinului i INT , 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 i INT 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 i INT . Detecia fronturilor de cdere se realizeaz prin eantionarea
strii intrrii i INT cu frecvena ciclurilor main. Rezult c pentru detecia corect a unui front
de cdere este necesar comanda intrrii i INT 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.






























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
DETECTOR DE FRONT
DE CDERE
IT0
TCON.0
IE0
TCON.1
K1
0
1

TF0
TCON.5
INT0
PIN P3.2


N/T0
PORT
SERIAL
Ti
SCON.1
Ri
SCON.0
DETECTOR DE FRONT
DE CDERE
IT1
TCON.2
IE1
TCON.3
K2
0
1

TF1
TCON.7
INT1
PIN P3.3


N/T0
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 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.

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

  • 5b Exemple MC
    5b Exemple MC
    Document56 pagini
    5b Exemple MC
    Raluca Ralu
    Încă nu există evaluări
  • ATMEL
    ATMEL
    Document20 pagini
    ATMEL
    Anghel Nicolae
    Încă nu există evaluări
  • An3 - Derivat - Ro - Microcontrolere - Familia ATMEL AVR 8biti Pentru Curs MC S11 S12 1
    An3 - Derivat - Ro - Microcontrolere - Familia ATMEL AVR 8biti Pentru Curs MC S11 S12 1
    Document7 pagini
    An3 - Derivat - Ro - Microcontrolere - Familia ATMEL AVR 8biti Pentru Curs MC S11 S12 1
    Raluca Ralu
    Încă nu există evaluări
  • Manual 1623 - 1625
    Manual 1623 - 1625
    Document16 pagini
    Manual 1623 - 1625
    Raluca Ralu
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document7 pagini
    Lab 6
    Raluca Ralu
    Încă nu există evaluări
  • Lucrarea 3 Img
    Lucrarea 3 Img
    Document22 pagini
    Lucrarea 3 Img
    Raluca Ralu
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document9 pagini
    Lab 5
    Raluca Ralu
    Încă nu există evaluări
  • PMP c06
    PMP c06
    Document27 pagini
    PMP c06
    Raluca Ralu
    Încă nu există evaluări
  • PMP c01
    PMP c01
    Document30 pagini
    PMP c01
    Raluca Ralu
    Încă nu există evaluări
  • Analog-Digital Converter
    Analog-Digital Converter
    Document8 pagini
    Analog-Digital Converter
    Andrei Puican
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document17 pagini
    Lab 2
    Raluca Ralu
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document8 pagini
    Lab 1
    Raluca Ralu
    Încă nu există evaluări
  • At Mega
    At Mega
    Document19 pagini
    At Mega
    Ungureanu Bianka
    Încă nu există evaluări
  • PMP c04
    PMP c04
    Document36 pagini
    PMP c04
    Raluca Ralu
    Încă nu există evaluări
  • PMP c05
    PMP c05
    Document24 pagini
    PMP c05
    Raluca Ralu
    Încă nu există evaluări
  • PMP c03
    PMP c03
    Document27 pagini
    PMP c03
    Raluca Ralu
    Încă nu există evaluări
  • PMP c02
    PMP c02
    Document26 pagini
    PMP c02
    Raluca Ralu
    Încă nu există evaluări
  • Microcontrolere
    Microcontrolere
    Document22 pagini
    Microcontrolere
    Alexandru-Iulian Ifrim
    Încă nu există evaluări
  • Microcontrolerul 8051
    Microcontrolerul 8051
    Document19 pagini
    Microcontrolerul 8051
    Dana Vrabii
    100% (1)
  • Comp Let Are Curs Micro Con
    Comp Let Are Curs Micro Con
    Document10 pagini
    Comp Let Are Curs Micro Con
    Diner Demergian
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document7 pagini
    Lab 4
    Raluca Ralu
    Încă nu există evaluări