Sunteți pe pagina 1din 29

Microcontrolerul 8051(INTEL)

Familia de microcontrolere de 8 biti MCS51 lansata si produsa de Intel a devenit practic un standard industrial. Ea a stat la baza dezvoltarii de microcontrolere compatibile realizate de firme ca: Philips, Siemens, Dallas, etc. Arhitectura MCS51 este optimizata pentru aplicatii de control. Intel ofera o gama larga de microcomtrolere compatibile cu 8051 ce difera intre ele doar prin optiuni si tehnologie. Principalele caracteristici ale familiei MCS51 sunt date in tabelul urmator:

CHIP 8031 8051 80C51 8032 8052 80C52 89C52

ROM intern 4k 4k 8k 8k 8k Flash

RAM intern 128 128 128 256 256 256 256

Timere 16 biti 2 2 2 3 3 3 3

Surse int. 5 5 5 6 6 6 6

Microcontrolerul 8051 are in structura sa: unitate aritmetica si logica de 8 biti ce poate executa operatii de adunare, scadere, inmultire, impartire, incrementare, SI, SAU, SAU Exclusiv, complementare si rotire, memorie de program de tip ROM 4k octeti memorie de date RAM 128 octeti 4 porturi paralele de intrare/iesire P0 P3 de 8 biti un port serial duplex doua circuite numaratoare/temporizatoare N/T0, N/T1 de cite 16 biti 5 surse de intrerupere cu doua nivele de prioritati generator de tact 1,2 12 MH z Deasemenea microcontrolerul are posibilitatea de adresare a unei memorii externe de program si a unei memorii externe de date cu capacitate maxima de 64k octeti. Toate microcontrolerele din familia MCS51 au spatiu separat pentru memoria de date si de program. Acest lucru permite o crestere de viteza datorata atat

suprapunerii partiale a unor microoperatii, cit si crearea posibilitatii de adresare scurta(cu un singur octet de adresa). Memoria de program poate fi doar citita. La 8051 primi 4k octeti de program sunt in chip. Restul se afla in exterior, iar pentru a citi aceasta memorie de rogram externa se foloseste semnalul PSEN(Program Store Enable). Memoria de date ocupa un spatiu separate fata de memoria program. La 8051 exista 128 octeti RAM in chip. Memoria de date externa poate fi accesata prin generarea de catre unitatea centrala a semnalelor de citire RD sau scriere WR. Memoria de program si ea de date (externe) pot fi combinate daca dorim prin folosirea semnalelor RD si PSEN pentru a genera smnal de citire pentru o memorie comuna in care sa avem atat memorie program cit si memorie de date.

Memoria de program
Dupa reset CPU isi incepe executia de la adresa 0000h unde trebuie sa existe o instructiune de salt peste zona vectorilor de intrerupere. Aceasta zona incepe de la adresa 0003h unde este plasata rutina de tratare a intreruperii externe INTRO 0. Harta memoriei program arata astfel:
FFFFH ROM extern sau

FFFFH

2000H 1FFFH ROM intern 0000H

ROM extern

0000H

Adresele vectorilor de tratare a intreruperilor sunt: 0003h INTRO 0 000Bh Timer 0 0013h INTR 1 001Bh Timer 1 0023h Seriala 002Bh Timer 2(doar pentru 8x52) Daca rutina de tratare a intreruperii este foarte scurta ea poate fi plasata in cei 8 octeti rezervati. Rutinele mai lungi pot folosi o instructiune de salt peste locatiile rezervate intreruperilor urmatoare, daca acestea se folosesc.

Cei 4k octeti (8k octeti la 8x52) de memorie program pot fi in capsula sau extern. Aceasta selectie este posibila folosind linia EA (External Acces). Daca EA=0 se acceseaza 64k octeti memorie externa; Daca EA=1, atunci se executa program din: - memoria interna 4k octeti (0000h-0FFFh); - memoria externa de pina la 64k octeti intre adresele 1000h si FFFFh. In timpul executiei programului din memoria interna nu se genereaza semnalul PSEN. Porturile P0 si P2 sunt dedicate pentru a se folosi ca magistrala de adresa. Deasemenea P0 este folosit si ca magistrala de date prin multiplexarea adreselor A0-A7 si datelor D0-D7. Modul de conectare al memoriei program este prezentat in continuare: PO 8051
ALE P2 ASEN
LATCH STB

DO-D7 AO-A7

MEM PROG

A8-A15 OE

Pentru citirea memoriei program se emite octetul inferior al PC (Program Counter) ca o adresa la portul P0. Cu ajutorul semnalului ALE (Adress Catch Enable) se inscrie aceasta adresa intr-un latch. Intre timp la portul P2 se emite octetul superior al PC. Odata ce adresa este stabila se activeaza semnalul PSEN pentru citirea datelor din memoria de program, date care sunt citite de portul P0. Adresarea memoriei program se face intotdeuna pe 16 biti. Executia programelor din memoria program externa sacrifice astfel doua porturi P0 si P2.

Memoria de date interna


Microcontrolerul 8051 are o memorie interna de date RAM de 128 octeti adresabila direct si indirect in spatial de adresare 00h 7 Fh . Aceasta zona este impartita astfel:

7Fh Zona de uz general

30h 28h 20h 18h 10h 08h 00h 00h 1Fh 17h 0Fh Zona pt.grupul de registre R0-R7 7Fh 2Fh Zona adresabila la nivel de bit

R0

R1

R2

R3

R4

R5

R6

R7

07h

Spatiul 00h-07h reprezinta, dupa reset, grupul de registre R0-R7 utilizate pentru surse sau destinatii in multe instructiuni ca: ADD A,Rn MOV Rn,#data Intr-o astfel de instructiune, registrele R0-R7 sunt adresate direct cu un camp de 3 biti (n = 0 7) cuprins impreuna cu codul operatiei, in primul octet corespunzator codului masina al instructiunii. Ex: ADD A,Rn cod instr.: 0010.1rrr ADD A,R0 28h ADD A,R1 29h ADD A,R7 2Fh Registrele R0 si R1 sunt utilizate si pentru adresarea indirecta a memoriei de date interne ca, de exemplu, in instructiunile: MOV A,@Ri ADD A,@Ri INC @Ri In aceste instructiuni indicele i cu valorile 0 sau 1 este precizat in primul cuvint din codul masina printr-un bit. Deasemenea, registrele R0 si R1 sunt sunt utilizate pentru adresarea indirecta a memoriei de date externe in instructiunile: MOVX A,@Ri MOVX @Ri,A In aceste instructiuni, continutul registrului R0 sau R1 reprezinta octetul mai putin semnificativ al adresei. Octetul mai semnificativ al adresei este dat de portul P2. Exista posibilitatea ca, prin programarea bitilor RS1 si RS0 ai registrului de stare a programului (PSW), grupul de registre R0-R7 sa fie ales conform tabelului:

PSW.4 RS1 0 0 1 1

PSW.3 RS0 0 1 0 1

ADR.R0-R7 00h-07h 08h-0Fh 10h-17h 18h-1Fh

Locatiile memoriei din spatiul 20h-2Fh reprezinta o zona de memorie adresabila si la nivel de bit in instructiuni de tipul: CPL bit JB bit,rel Adresarea bitilor se realizeaza direct, cu un octet continut in codul masina al instructiunii corespunzatoare. Ex: CPL C are codul 10110011 CPL bit are codul 10110010 adr.bit Zona de memorie 80h-FFh este o zona de memorie cu acces direct si pe bit folosita pentru registrele cu functiuni speciale. La microcontrolerul 8x52 aceasta zona este dublata cu o zona de memorie RAM dar la care accesul se face numai indirect Astfel memoria interna de date arata astfel:

FFh

Adresabila numai indirect(8x 52) Adresabila direct si indirect

Adresabila numai direct(SFR)

80h 7Fh

00h

Memoria interna de date este utilizata deasemenea pentru stiva. Registrul indicator de stiva SP este incarcat, dupa reset, cu valoarea 07h. Exista posibilitatea de modificare a zonei din memoria interna de date utilizata pentru stiva, prin incarcarea altei valori in registrul SP De exemplu prin incarcarea valorii 2Fh in registrul SP stiva incepe de la valoarea 30h.

Registrele interne ale 8051


Registrele interne se numesc registre cu functii speciale si sunt adresabile doar direct in spatiul de adresare 80h-FFh. Deasemenea se pot adresa direct bitii unora din registrele cu functii speciale. Registrele interne si functiile speciale ale acestora: A registru acumulator (8 biti) Se foloseste ca sursa si destinatie, prin adresare implicita, in multe operatii aritmetice si logice. De exemplu, in instructiunea ADD A,@data, acumulatorul da un operand sursa si este si destinatia rezultatului prin adresarea implicita. B registru de 8 biti Este un registru ce se utilizeaza ca sursa si destinatie, prin adresare implicita, in instructiunile de inmultire MUL AB si impartire DIV AB precum si pentru uz general prin adresare directa. DPTR registru pointer pentru date (16 biti)compus din DPH (8 biti) si DPL (8 biti). Registrul DPTR se utilizeaza pentru adresarea indirecta a memoriei de date externa in instructiunile MOVX A,@DPTR si MOVX @DPTR, A precum si pentru adresarea indirecta a memoriei de program in instructiunea MOVC A,@A+DPTR. SP registru indicator de stiva (8 biti).

Stiva necesara functionarii microcontrolerului este organizata in memoria interna de date. Dupa reset SP are valoarea 07h. La scriarea unui octet in memoria stiva, continutului registrului SP se incrementeaza cu o unitate. PSW registru de stare a programului (registru cu indicatorii de conditii) Indicatorul de transport C (PSW.7) se pozitioneaza la nivel 1 logic in urma executia unei instructiuni de adresare care a produs un transport si in urma executiei unei instructiuni de scadere care a necesitat un imprumut. Daca executia unei instructiuni de scadere/adunare nu produce imprumut/transport, indicatorul C se pozitioneaza la nivel logic 0. Astfel indicatorul C se utilizeaza pentru aplicatii in operatii aritmetice cu operanzi fara semn. Deasemenea indicatorul C este folosit si in operatii logice si de transfer al controlului: ADD A,direct ANL C,bit RLC A JC Rel Indicatorul de transport auxiliar AC (PSW.6) se pozitioneaza la nivel logic 1 in urma unei operatii de adunare/scadere care produce transport/imprumut din/in pozitia bitului 3. Indicatorul de depasire OV (PSW.2) se pozitioneaza la nivel logic 1 in urma executiei unei instructiuni de adunare daca s-a produs un transport din pozitia bitului 6 si nu s-a produs un transport din pozitia bitului 7 indicand astfel depasirea domeniului de valori (128 127) . Indicatorul de paritate P (PSW.0) contine suma modulo 2 a bitilor registrului acumulator. La nivel logic 1 indica un numar impar de biti cu nivel logic 1 in acumulator. Bitul P nu este modificat de nici o instructiune de scriere in registrul PSW. Ceilalti biti ai PSW sunt: F) (PSW.5) disponibil pentru uz general, PSW.1 rezervat pentru dezvoltari ulterioare (nefolosit), RS1 si RS0 (PSW.4 si PSW.3) pentru selectia grupului de registre R0-R7. SBUF registru serial fiind compus de fapt din doua registre separate de 8 biti avind aceeasi adresa directa, unul pentru transmisie si unul pentru receptie folosite pentru interfata seriala. Cind un octet de date este scris in SBUF acesta este plasat in bufferul de transmisie si declanseaza inceputul transmisiei seriale a acestuia. Cind se realizeaza o receptie se citeste continutul bufferului de receptie. Adresa directa a registrului SBUF este 99H. Registrele de control exista mai multe astfel de registre, care contin biti de control si de stare pentru intreruperi, temporizatoare/numaratoare si portul serial. Ele vor fi descrise la functiile corespunzatoare. Registrele de temporizare exista doua perechi de registre de cite 8 biti T0 (TH0, TL0) T1 (TH1, TL1) folosite ca numaratoare/temporizatoare de 16 biti

programabile in 4 moduri diferite. Celelalte registre interne si functiile acestora vor fi discutate ulterior. Moduri de adresare Modurile de adresare folosite de microcontrolerul 8051 sunt: Adresare directa In adresarea directa operandul este specificat de un cimp de 8 biti de adresa din instructiune. Doar RAM-ul intern de date si SRF pot fi adresate direct. Ex: MOV A,30h MOV A,DPL Adresarea indirecta In adresarea indirecta instructiunea specifica un registru ce contine adresa operandului. Doar RAM-ul intern si cel extern poate fi adresat indirect. Adresa pe 8 biti a operandului se afla in unul din registrele R0 sau R1. Registrul Ri, i=0 sau 1 este precizat printr-un bit din codul masina al instructiunii. 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 biti a operandului se afla in DPTR fiind folosit pentru transfer de date din memoria RAM externa in instructiuni de tipul: MOVX A,@DPTR MOVX @DPTR,A Instructiuni cu registrii Instructiunile cu registrii de lucru interni (R0-R7) au avantajul eliminarii unui octet de adresa din instructiune deoarece adresa operandului se poate coda pe 3 biti din codul instructiune. Ex: MOV A,Rn 1110 1rrr MOV Rn,direct 1010 1rrr adr direct Exista si instructiuni specifice orientate pe manevrarea registrilor. Unele instructiuni opereaza doar in acumulator sau DPTR nefiind necesar nici un octet suplimentar de adresa in codul instructiunii. 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 urmeaza codului in memoria program. De ex. MOV A,#100data incarca valoarea data in acumulator. Ex: MOV A,#100 100 A MOV A,#64H Adresarea indexata Se foloseste pentru a accesa memoria de program ce poate fi doar citita. Acest mod se foloseste pentru a citi tabele din memoria de program. Registrul de baza de 16 biti (unul din registre DPTR sau PC) indica baza tabelului iar acumulatorul este incarcat cu pozitia din tabel dorita. Adresa de citire din tabela rezulta ca suma dintre continutul acumulatorului si pointerul de baza. Tipuri de instructiuni Instructiuni aritmetice Aceste instructiuni sunt: Adunare ADD A,<BYTE> Adunare cu C ADDC Scadere SUBB Incrementare INC Decrementare DEC Inmultire MUL Impartire DIV Ajustare zecimala DA

A,<BYTE> A,<BYTE> <BYTE> <BYTE> AB AB

Instructiuni logice Instructiunile 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 CPLA RL A RLC A RR A RRC A

SWAP A O operatie de tipul ANL A,<byte> poate lua una din formele urmatoare: Adresare directa ANL A,30H Adresare indirecta ANL A,@R1 Adresare registru ANL A,R6 Adresare imediata ANL A,#100 Toate operatiile asupra memoriei de date pot fi executate fara a folosi acumulatorul. De ex. XRL <byte>, #data executa un sau exclusiv intre octetul de memorie si data imediata fara folosirea acumulatorului. Instructiunea SWAP A schimba intre ele partea superioara si cea inferioara din acumulator. Instructiuni pentru transferul datelor cu memoria interna Formatul general al instructiunii este: MOV <dest>,<sursa> si permite transferul intre doua locatii interne RAM sau SRF fara a folosi acumulatorul sau intre un registru si o locatie de memorie. Trebuie tinut cont de faptul ca pentru 8052 spatiul de memorie superior celor 128 octeti RAM poate fi adresat doar indirect, iar spatiul registrelor cu functii speciale poate fi adresat doar direct. Stiva se afla in memoria RAM interna si creste spre adresele superioare. Instructiunea PUSH mai intai incrementeaza SP (Stach Pointer) si apoi depune octetul pe stiva. Instructiunile PUSH si POP se folosesc doar in modul de adresare directa pentru a indica octetul ce va fi salvat sau restaurat. Daca stiva depaseste cei 128 de octeti din RAM-ul intern, octetii depusi in continuare se pierd iar cei restaurati au valori nedeterminate. Instructiunile de transfer includ si instructiuni pe 16 biti care pot fi folosite pentru a initializa pointerul de date DPTR pentru citiri de tabele din memoria program sau pentrul accesul la memoria externa de date. Principalele instructiuni care adreseaza spatiul 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 Instructiunea XCH A,<byte> face ca acumulatorul si octetul sa-si schimbe valorile intre ele. Instructiunea XCHD A,@Ri este asemanatoare, dar doar cei mai putin semnificativi 4 biti sunt schimbati.

Instructiuni pentru transferul datelor cu memoria externa In acest caz poate fi folosita doar adresarea indirecta. Alegerea tipului de transfer se face dupa numarul de octeti de adresa. Daca se doreste adresarea cu un singur octet de adresa se vor folosi registrii R0 sau R1. Pentru adresarea cu doi octeti de adresa se va folosi registrul DPTR. Dezavantajul folosirii adresei pe 16 biti este acela al folosirii portului P2 care astfel nu poate fi folosit pentru aplicatie. Selectarea memoriei externe se face cu operatii de tipul MOVX ce pot fi: MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A Setul de instructiuni al microcontrolerului 8051 contine si doua instructiuni pentru citirea tabelelor din memoria program. Aceste instructiuni sunt: MOVC A,@A+DPTR MOVC A,@A+PC Instructiunea MOVC A,@A+DPTR transfera intrarea din tabel in acumulator. DPTR este setat sa indice inceputul tabelei iar Acumulatorul intrarea din tabel. Instructiunea MOVC A,@A+PC se compune din urmatoarele microoperatii:
( PC ) ( PC ) +1 ( A) (( A) + PC )

Folosirea acestui tip de citire a datelor este ilustrat de programul urmator: MOV A,INTR_TABLE CALL TABLE -------------------------Subrutina TABLE va arata astfel: TABLE: MOVC A,@A+PC RET data1 ------dataN Imediat dupa instructiunea RET se plaseaza tabela cu intrari de la 1 la 255. Intrarea 0 nu se foloseste deoarece in timpul executiei instructiunii MOVC, PC-ul contine adresa instructiunii de intoarcere RET. Offset relativ Destinatia adresei unde se face un salt conditionat este specificat in asamblor de un tabel sau de o adresa in memoria program. Destinatia se da ca un offset relativ la pozitia curenta a PC. Aceasta inseamna, in cod complement lui doi, ca octetul offset se aduna la PC daca saltul are loc. Domeniul de salt este cuprins intre -128 si

+127 octeti in memoria program, relativ la promul octet ce urmeaza dupa instructiune. Instructiuni de salt Aceste instructiuni sunt: JMP addr JMP @A+DPTR Instructiunea JMP addr ascunde de fapt trei instructiuni: SJMP, AJMP, LJMP 1. SJMP formeaza adresa destinatie ca offset relativ, avind doi octeti continind codul operatiei si offsetu relativ. Distanta maxima de salt este limitata la -128, +127 octeti relativ la instructiunea ce urmeaza dupa SJMP. 2. LJMP formeaza adresa de salt ca o constanta pe 16 biti. Instructiunea are 3 octeti constind in codul operatiei si doi octeti de adresa, destinatia fiind oriunde in spatiul de 64 k. 3. AJMP formeaza adresa destinatie ca o constanta pe 11 biti. Instructiunea are 2 octeti lungime, unul contine codul operatiei din 5 biti si pe 3 biti adresele cele mai semnificative. Al doilea octet contine restul adresei. Adresa de salt poate fi oriunde in spatiul de 2k octeti relativ la instructiunea ce urmeaza dupa AJMP. JMP @A+DPTR ofera posibilitati de salt pentru lucru cu tabele. Adresa destinatie este obtinuta ca suma dintre registrul DPTR si continutul acumulatorului. Adresa de salt este pe 16 biti. In mod uzual DPTR este setat cu adresa tabelului si functie de adresa acumulatorului avem o anumita specificatie. TABLE: AJMP CASE0 AJMP CASE1 AJMP CASEN MOV DPTR,#TABLE MOV A,INDEX RL A ;inmultire cu doi JMP @A+DPTR Lucrul cu subrutine Apelul unei subrutine se face cu instructiuni de tipul CALL adr. De fapt sunt doua instructiuni LCALL si ACALL cu adresare pe 16 biti, respectiv pe 11 biti. Subrutinele trebuie sa se termine cu RET pentru a reveni la instructiunea de dupa CALL. Intreruperile se vor termine cu RETI. Salturi conditionate

Acestea specifica destinatia adresei ca un offset relativ la instructiunea ce urmeaza dupa instructiunea de salt. Distanta de salt este limitata la -128 la +127 octeti fata de primul octet al instructiunii urmatoare. Nu exista flag z in PSW. Instructiunile JZ si JNZ testeaza direct continutul acumulatorului daca este zero si in functie de continut face saltul sau continua programul. DJNZ este o instructiune de control pentru bucle la fel ca si CJNE. Formatul lor este: DJNZ <byte>, rel CJNE A,<byte>,rel CJNE <byte>,#data,rel Porturile paralele ale 8051 Microcontrolerul 8051 contine patru porturi paralele bidirectionale de cite 8 biti. Fiecare port are un registru intern de 8 biti P0P3 si un amplificator de magistrala bidirectional. Prin structura microcontrolerului, porturile paralele pot realiza functii alternative care determina utilizari specifice ale porturilor. Astfel amplificatoarele de magistrala ale porturiloir P0 si P2 se utilizeaza pentru accesul memoriilor externe. Portul P1 este un port clasic de intrare/iesire. Liniile portului P3 pot avea utilizari alternative. Portul P1 Un operand sursa pentru o instructiune de adresare directa a unui port poate fi dat de continutul registrului portului sau de nivelele logice ale liniilor (pinilor) portului.
citire bistabil P1.x A1 linie x magistral intern comand scriere n bistabil P1.x

D T

RS T PIN P1.x

A2 citire P1.x

In instructiunea ANL P1,A un operand sursa este continutul registrului portului P1. In instructiunea ANL A,P1 un operand sursa este dat de nivelele logice corespunzatoare ale pinilor portului P1. Aceasta logica de functionare se realizeaza prin comenzi corespunzatoare 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 corespunzator. De ex. Daca iesirea Q a bistabilului P1.X este la nivel logic1, tranzistorul T este blocat si nivelul logic al pinului P1.X poate fi comandat din exterior. Rezistenta Rs este o rezistenta de sarcina activa cu rolul de a mari viteza de comutare de la nivel logic 0 la nivel logic 1. Aceasta marire de viteza se obtine prin generarea de catre sarcina activa a unui curent de 30 mA pe durata a doua perioade ale generatorului de tact, incepind cu frontul de comutare 0 1 logic de la iesirea Q a bistabilului P1.X. Structura unei astfel de rezistente active est
Vc.c . linie intarziere 2T0
0,25mA

T1 T

T2
PIN P1.X

Q
bistabil P1.X

Tranzistorul T2 cu canal initial, genereaza in permanenta un curent de 0,25 mA. In regim stationar avind Q la nivelul logic 0 sau 1, tranzistorul T1 de tipul cu canal indus, este blocat deoarece nivelele logice de la intarzierile circuitului SAU_NU sunt complementare. Dupa frontul de comutare a semnalului de la nivelul 1 la 0 logic, in intervalul a doua perioade T0 ale generatorului de tact, intarzierile circuitului SAU_NU sunt la nivelul logic 0 si tranzistorul T1 genereaza un curent de 30 mA. Acest curent mareste viteza de comutare da la nivelul logic 0 la nivelul logic 1 a semnalului de iesire de la pinul P1.X. Portul P3 Portul P3 poate realiza aceleasi functiuni ca si portul P1 si in plus poate fi utilizat pentru functii alternative de intrare sau de la iesire . Pentru realizarea functiei

alternative de intrare corespunzatoare unui pin P3.X circuitul contine amplificatorul repetor A3 a carui iesire este conectata in structura microcontrolerului in concordanta cu functia alternativa realizata.

Ecuatie alternativa comanda citire bistabil P3.X AA 1 3 Linie X Magistrala interna comanda scriere bistabil P3.X D T Q Q
Bistabil P3.X

Vc.c. Rs PIN P3.X AA 3 3 Functie alternativa

comanda citire bistabil P3.X

Bistabi l P3.X T AA 2 3

Deasemenea pentru realizarea functiei alternative de intrare este necesara blocarea tranzistorului T care se obtine prin aplicarea de nivele logice 1 la intrarile circuitului SI-NU. Astfel se impune programarea la nivel logic 1 a bistabilului P3.X. cealalta intrare a circuitului SI-NU este conectata intern la nivel logic 1 in circuitul corespunzator unui pin P3.X cu functie alternativa de intrare. Functia alternativa de iesire corespunzatoare unui pin P3.X se realizeaza prin comanda unei intrari in circuitul SI-NU, cealalta intrare fiind stabilita la nivel logic 1 prin programarea bistabilului P3.X. In cazul realizarii functiei T D (pin P3.1) linia de intrare in circuitul SI-NU pentru functia alternativa este la nivel logic 1 cu exceptia intervalului corespunzator transmisiei unui caracter, declansata de scrierea unui octet in registrul intern SBUF. In cazul realizarii functiilor WR si RD liniile de intrare in circuitele SI-NU pentru functiile alternative sunt la nivel logic 1, cu exceptia intervalelor corespunzatoare ciclurilor de scriere, respectiv citire in/din memoria de date externa.

Portul P2

Portul P2 are functia alternativa de transfer al octetului mai semnificativ al adresei in cicluri de extragere coduri instructiuni din memoria de program externa, in cicluri de citire din memoria de program externa, cu instructiuni MOVC si in cicluri de acces la memoria de date externa cu instructiuni MOVX in care adresarea se realizeaza cu registru DPTR. In aceste cicluri linia de comanda adresare este la nivel logic 1 si impune pozitia 1 pentru comutatorul k:

Comanda citire bistabil P2.X


A1

Bit de Comand adres. adresare

Vc.c. Q 1 0 K PIN P2.x RS

Linie X Magistrala interna Comanda scriere bistabil P2.X

D T

Bistabil P2.x Q
Q

Bistabil P2.X A2 A2 T

Comanda citire PIN P2.X

Astfel bitul de adresa corespunzator comanda iesirea P2.X a portului. Deasemenea, nivelul logic 1 la iesirea circuitului SI comanda sarcina activa Rs astfel incat sa genereze un curent mai mare de 0,25 mA daca bitul de adresa are nivel logic 1. Se asigura astfel comanda corespunzatoare a circuitelor de memorie externa. In afara intervalelor corespunzatoare ciclurilor indicate mai sus portul P2 poate fi utilizat pentru intrari/iesiri de uz general.

Portul P0
Are functia alternativa de transfer al octetului mai putin semnificativ al adresei, precum si al octetului cod instructiune sau data in orice ciclu de acces la memoriile externe. In intervalele corespunzatoare acestor cicluri, linia de comanda adresare/transfer date, este la nivel logic 1 si impune pozitia 1 pentru comutatorul k. astfel prin liniile portului P0 se poate realiza transferul adresei si datei de intrare sau iesire, prin multiplexarea in timp. La iesirea circuitului SI se obtine nivel logic

1 care deschide tranzistorul Ts in intervalele de transfer biti de adresa cu nivel logic 1, sau de iesire biti de date cu nivel logic 1. In afara acestor intervale, tranzistorul Ts este blocat. In ciclurile de acces la memoriile externe, bistabilele (bitii) registrului P0 se incarca cu nivele logice 1.
Comand Adresare/transfer date Comanda citire bistabil P0.X Bit de adres/dat.
A1

Vc.a.

Linie X Magistrala interna Comanda scriere bistabil P0.X

T Q

Bistabil P0.x Q

Q 1 K 0 T

TS. PIN P0.x

Bistabil P2.X T A 2 A2

Comanda citire PIN P0.X

In afara ciclurilor de acces la memoriile externe, portul P0 poate fi utilizat pentru intrari/iesiri de uz general. Iesirile P0.X sunt de tipul drena in gol (Ts-blocat), iar intrarile P0.X sunt de impedanta ridicata (T si Ts=blocate, Q=1 prin programare).

Functionarea sincronizata a microcontrolerului 8051


Pentru functionarea sincronizata microcontrolerul contine un generator de tact. Semnalul de comanda al generatorului de tact este dat de un oscialtor cu frecventa maxima f 0 = 12 MHz . Pentru realizarea oscilatorului, microcontrolerul contine un circuit inversor cu intrarea si iesirea conectate la pinii XTAL1 si XTAL2. Configuratia de oscilator se obtine prin conectarea intre pinii XTAL1 si XTAL2 a unui cristal de cuart si a doi condensatori conectati de la cei doi pini la masa. Functionarea sincronizata a microcontrolerului se desfasoara in faze, stari si cicluri masina. O faza a microcontrolerului corespundei duratei T0 = 1 / R0 a perioadei de tact. Doua faze succesive notate P1, P2 definesc o stare a microcontrolerului. Un ciclu masina se desfasoara pe durata a 12 perioade T0 adica 6 stari. Cele 12 perioade ale unui ciclu masina sunt notate S1P1, S1P2, S2P1, S2P2, . S6P1, S6P2.

Microcontrolerul 8051 executa u instructiune in unul sau doua cicluri masina cu exceptia instructiunilor de multiplicare si divizare ce se realizeaza in 4 ciclii masina.
CLK

S1

S2

S3

P1

P2

P1

P2

P1

P2

t
FAZA

STARE

Executia unei instructiuni incepe in faza S1P1 a unui ciclu masina prin extragerea din memoria program a primului octet al instructiunii si transferul acestuia in registrul de instructiuni al microcontrolerului in faza S1P2. In cazul unei instructiuni cu codul masina de doi octeti, al doilea octet se extrage din memoria program in starea S4 a aceluiasi ciclu masina. Rezulta ca intr-un ciclu masina se pot efectua doua extrageri de coduri instructiune. Daca este nevoie si de cel de-al treilea octet, acesta se va extrage in faza S1P2 a celui de-al doilea ciclu masina. In starile in care se face extragere de cod instructiune are loc si incrementarea contorului de program PC. Executia unei instructiuni se termina in faza S6P2 a ciclului masina corespunzator. Pentru accesul memoriilor externe, adresa se formeaza din valoarea portului P2 (octetul superior) si valoarea portului P0 (octetul inferior). Transferul unui octet de date se face prin liniile portului P0. rezulta ca portul P0 este folosit atat pentru adrese cat si pentru date prin tehnici de multiplexare. Se impune astfel memorarea temporara intr-un registru extern a octetului mai putin semnificativ al adresei. Memorarea adresei inferioare in registru se realizeaza pe baza semnalului de validare registru de adresare ALE. Pentru selectia diferita a celor doua tipuri de memorie (de program si RAM) microcontrolerul genereaza semnalul PSEN pentru validarea memoriei de program externa si semanlele RD si WR pentru memoria de date externa. Diagramele de timp corespunzatoare extragerii de coduri instructiuni din memorii program sunt:

CLK S2 S3 S4 S5 S6

S1

ALE

PSEN

P0-P7

PC L

COD INSTRUCTIUNE

PC L

COD INSTRUCTIUNE

A0-A7

PCL
A15-A8 P2.7P2.0

PCL

P C H

PCH

PCH

Circuitele de numarare/temporizare ale microcontrolerului 8051 Microcontrolerul 8051 contine doua circuite de numarare/temporizare notate cu N/T0 si N/T1. Fiecare circuit contine doua registre numaratoare de cite 8 biti , TH0, TL0, TH1, TL1 din grupul registrelor cu functii speciale. Structura unui circuit numarator/temporizator este prezentat in fig. urmatoare:

Generator de tact

f0

Divizor frecventa ()

f0/12 C/Ti (TMOD)


0

K1

K2
1

Ti
PIN P3.i+4
1

Registru numarator THi,TLi

GATE i (TMOD)

TR i (TCON)

TF i (TCON)

/ INTi
PIN P3.i+2

Cerere intrerupere

Functia de temporizare se realizeaza prin numarare de impulsuri cu o frecventa egala cu frecventa oscilatorului divizata cu 12. Rezulta ca frecventa pentru temporizare avand f0=12 MHz este f=1 MHz. Ecuatia de numarare se realizeaza prin numararea fronturilor de cadere ale semnalului aplicat la pinul Ti al microcontrolerului. Aceste fronturi se detecteaza prin testarea de catre microcontroler a starii liniei Ti in fazele S5P2 ale ciclurilor masina. Se considera detectat un front de cadere daca in fazele S5P2 din doua cicluri masina consecutive rezultatul testarii va fi un nivel logic 1 urmat de un nivel 0 logic. Detectia unui front de cadere determina incrementarea cu o unitate a continutului registrului numarator in faza S3P1 a ciclului masina urmator detectarii frontului de cadere. Rezulta ca functia de numarare a fronturilor de cadere ale semnalului extern aplicat pinului Ti se efectueaza corect daca fiecare nivel corespunzator acestui semnal este mentinut pe o durata mai mare decat durata unui ciclu masina. Astfel frecventa maxima a semnalului de la linia de intrare Ti este f0/24 adica 500KHz pentru f0=12MHz. Pentru controlul functionarii circuitelor numaratoare/temporizatoare se utilizeaza registrele interne TMOD si TCON din grupul registrelor cu functii speciale. Ecuatia de numarare sau temporizare se realizeaza prin comanda corespunzatoare a comutatorului K1. Acest comutator este comandat de bitul C/Ti din registrul TMOD (C/T0=TMOD.2, C/T1=TMOD.6). Dupa cum rezulta si din figura anterioara vom avea: C/Ti=0 temporizator C/Ti=1 numarator

Declansarea si blocarea proceselor de numarare/temporizare, corespunzatoare pozitilor cuplat respectiv decuplat ale comutatorului K2 se pot stabili prin programarea bitilor Tri din registrul TCON si GATEi din registrul TMOD si prin semnal extern conectat la pinul INT i al microcontrolerului. Comanda proceselor de numarare/temporizare se poate realiza prin program prin stabilirea bitului GATEi la nivelul logic 0. In acest caz declansarea si blocarea se comanda prin programarea bitului Tri. Daca bitii GATEi si TRi se programeaza la nivel logic 1, comanda se realizeaza cu semnalul conectat la intrarea INTi a microcontrolerului. Procesele de numarare/temporizare evolueaza in sensul cresterii continutului registrului numarator. La depasirea valorii maxime corespunzatoare capacitatii numaratorului, bitul indicator de depasire TFi din registru TCON este pozitionat la nivel logic 1 semanlizind o cerere de intrerupere. Continutul numaratorului devine zero sau se incarca cu o valoare programata in functie de modul de lucru al circuitului numarator/temporizator. Bitul indicator de depasire se pozitioneaza la nivelul logic 0 dupa acceptarea cererii de intrerupere de catre logica de control. Exista 4 moduri de lucru in functie de modul de utilizare al registrelor TLi si THi. Selectia modului de lucru se realizeaza prin programarea bitilor M1 si M0 (TMOD.1, TMOD.0) pentru N/T0 si M1 si M0 (TMOD.5, TMOD.4) pentru N/T1.\ In modul 0 registrul numarator este de 13 biti format din registrul TH si cei mai putin semnificativi 5 biti ai registrului TL.

Re g. TL TL.4 TL.0

Re g. TH TH.7 TH.0

Continutul registrului astfel obtinut este incrementat pana la valoarea maxima. Urmatoarea incrementare duce la anularea continutului numaratorului. In modul 1 registrul numarator este de 8 biti format din registrul TL ca in fig. urmatoare:

Re g. TL TL.4 TL.0

TF

Reg.TH TH.7 TH.0

La depasirea capacitatii de numarare, registrul TL se incarca cu continutul registrului TH. Accest mod de lucru este util pentru temporizari cu valori programabile. Durata temporizarii este data de perioada cu care apar depasiri ale capacitatii de numarare. Rezulta ca durata temporizarii este data de:
T = 12 [ 256 (TH )] f0

In modul de lucru 3 cele doua circuite de numarare/temporizare opereaza in mod diferit. Circuitul N/T0 contine ca numarator registrul TL0. In plus registrul TH0 este inclus intr-o structura de temporizator care utilizeaza bitii TR1 si TF1 corespunztori circuitului N/T1 in celelalte moduri de lucru.
f0/12 k REG TH0 TF1 TCON.7

Cerere intrerupere

TR1 TMOD.6

Prin programarea circuitului N/T0 in modul 3 si a circutului N/T1 in modurile 0, 1 sau 2, comutatorul K2 este cuplat indiferent de circuitul de comanda. Blocarea procesului de numarare se poate face prin programarea modului 3 pentru circuitul N/T1. Circuitul N/T1 in modul 3 nu poate efectua cereri de intreruperi, iar declansarea numaratorului 1 se face doar prin programarea in alt mod de lucru.

Portul serial al microcontrolerului 8051


Este utilizat pentru transferul de informatie intre microcontroler si componentele externe sistemului cu comunicatie seriala. Transferul serial al unui cuvint ea la emitator la receptor se realizeaza prin conversia paralel-serie a cuvintului si apoi conversia serie-paralel. Comunicatia seriala intre doua echipamente poate realiza transferul de informatie in ambele sensuri alternativ printr-o singura linie (comunicatie semiduplex) sau simultan prin doua linii (comunicatie duplex). In cazul comunicatiei asincrone, transferul cuvintelor dintr-un mesaj se poate realiza la intervale de timp variabile. Un cuvint contine o secventa de 8 sau 9 biti de date. Transmisia presupune incarcarea succesiva a liniei de comunicatie cu bitii corespunzatori cuvintului de transmis, cu frecventa de comunicatie fc exprimata in biti/s. Receptia consta in testarea periodica a starii liniei de comunicatie in scopul citirii secventei de biti de date. Pentru transferul corect al unui cuvint este necesar ca receptorul sa citeasca starea liniei de comunicatie cu aceeasi frecventa si faza cu care se incarca bitii cuvintului la emisie. Sincronizarea de faza a circuitului de receptie cu cel de emisie se realizeaza pe baza frontului de cadere corespunzator bitului de start. Dupa bitul de start cu nivel logic 0 urmeaza emisia bitilor de date (8 sau 9) incepind cu bitul de semnificatie minima (LSB). Ultimul bit de date emis poate fi bit de paritate utilizat pentru verificarea corectitudinii cuvintului receptionat. Dupa ultimul bit de date urmeaza un bit de stop cu nivel logic 1.

BIT START

BIT Data.0

BIT Data.7

BIT Paritate(optional)

Bit stop

LS B

MS B

1/fc

Portul serial al microcontrolerului 8051 poate fi utilizat pentru comunicatie seriala asincrona de tip duplex prin liniile de transmisie TxD (P3.1) respectiv receptie Rxd (P3.0). Microcontrolerul 8051 are 2 registre interne notate SBUF, unul pentru transmisie si unul pentru receptie. Cele doua registre au aceeasi adresa 99h. Adresarea directa ca si operand sursa a adresei 99h se refera la registrul SBUF de receptie. Adresarea directa ca si operand destinatie a adresei 99h se refera la

registrul SBUF de transmisie. Pentru receptie, portul serial utilizeaza un registru de deplasare care realizeaza conversia serie paralel a datelor de pe linia de receptie. Continutul registrului de deplasare este transferat in registrul SBUF doar dupa asamblarea completa a unui octet. Dupa transferul octetului din registrul de deplasare in registru de receptie SBUF se poate trece la obtinerea unui nou octet in registru de deplasare inainte de citirea octetului precedent din registrul de receptie SBUF. Daca citirea octetului precedent nu se realizeaza inainte de terminarea asamblarii noului octet, rezulta pierderea octetului precedent. Portul serial al microcontrolerului 8051 poate functiona in 4 moduri de lucru stabilite prin programarea bitilor SM0 si SM1 din registrul de control al portului serial SCON. Modul 0 Se foloseste pentru realizarea unei comunicatii semiduplex. Astfel linia RxD se utilizeaza alternativ pentru receptia sau transmisia unor secvente de 8 biti de date cu frecventa de comunicatie f 0 / 12 biti/s (f0 frecventa oscilatorului de tact). Semnalul cu frecventa de comunicatie f 0 / 12 este disponibil la linia TxD. Declansarea transmisiei se realizeaza prin incarcarea unui octet in registrul SBUF. La sfirsitul transmisiei celor 8 biti de date portul serial pozitioneaza la nivel 1 bitul indicator de intrerupere la transmisie Ti precizand posibilitatea de incarcare a unui octet in registrul de transmisie. Declansarea receptiei se realizeaza daca bitul de validare a receptiei REN este programat la nivel 1. La sfirsitul receptiei celor 8 biti de date, portul serial pozitioneaza la nivel 1 bitul indicator de intrerupere la receptie Ri. Modurile de lucru 1, 2, 3 ale portului serial se utilizeaza pentru comunicatie asincrona de tip duplex. Astfel se realizeaza tranmisia prin linia TxD si receptia prin linia RxD a unor cuvinte ce contin un bit de start cu nivel 0, 8 biti de date si un bit de stop cu nivel 1. In modurile 2 si 3 cuvintele contin si un bit cu nivel logic programabil ce urmeaza celor 8 biti de date. In modurile 1,2,3 declansarea transmisie se realizeaza prin crierea octetului de transmis in registrul SBUF. La inceputul transmisie bitului de stop, portul serial pozitioneaza la nivel 1 bitul indicator de intrerupere Ti. Validarea receptiei se face prin programarea la nivel 1 a bitului de validare receptie REN. Dclansarea receptiei unui cuvint se realizeaza de frontul de cadere al bitului de start. Daca bitul SM2 (SCON.5) este programat la nivel 0, portul serial pozitioneaza la nivel 1 bitul indicator de intrerupere la recptie Ri, la mijlocul intervalului de receptie a bitului de stop corespunzator cuvintului receptionat. Daca bitul SM2 (SCON.5) este programat la nivel 1, portul serial pozitioneaza la nivel 1 bitul indicator de intrerupere la recptie Ri, numai daca bitul urmator celor 8 biti de date (RB8) are nivel 1.

Deoarece in modurile 2 si 3 nivelul logic al bitului urmator celor 8 biti de date poate fi programat la transmisie in TB8, rezulta posibilitatea de receptie selectiva in functie de SM2 a cuvintelor incarcate p o linie de comunicatie. Acest lucru poate fi folosit pentru comunicatii multiprocesor. Un cuvint de comanda contine 8 biti de date cu adresa unui microprocesor din sistem si un bit urmator cu nivel 1. Un cuvint de date contine dupa cei 8 biti de date un bit cu nivel 1. Porturile seriale ale microcontrolerelor 8051 din sistem sunt programate in modurile 2 sau 3 si cu SM2 la nivel 1. Astfel receptia unui cuvint de comanda pozitioneaza la nivel 1 bitul Ri din fiecare microcontroler. Subrutina de intrerupere analizeaza cei 8 biti ce pot fi de adresa. Microcontrolerul ce recunoaste propria adresa pozitioneaza SM2 la 0 pentru a receptiona cuvintele C din sistem mentin SM2=1 si nu genereaza de date ce urmeaza. Celelalta intrerupere de recptie. In modurile 1 si 3 valoarea frecventei de comunicatie poate fi stabilita prin programare. Pentru aceasta se foloseste Timerul 1 ca generator de frecventa de comunicatie programat in modul 2.
fc = 2 ( SMOD ) f0 32 12 [256 (TH 1)]

unde, SMOD este un bit din PCON. De cele mai multe ori utilizatorul stie frecventa de comunicatie si doreste sa stie valoarea ce trebuie inscrisa in TH1.
TH 1 = 256 2 ( SMOD ) f 0 32 12 f c

THI trebuie sa fie o valoare intreaga. Rotunjind pe TH1 la intregul cel mai apropiat se produce o modificare a frecventei de comunicatie iar utilizatorul trebuie sa schimbe valoarea cuartului. Ex:

f c = 4800 biti/sec. f 0 = 12 MHz TH = 1 f c real = 4807,7 biti/sec. (SMOD) = 1 }

Daca 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.
In modul 2 de lucru al portului serial valoarea frecventei de comunicatie este:

2 ( SMOD ) fc = f0 64 SM 2 = 0 Ri = 1 pt. cuvint Ri = 1 daca bitul 9 = 1 SM 2 = 1 Ri = 0 daca bitul 9 = 0


Comandac 8 biti date +1+stop Date 8 biti date +0+stop

(SM2=1) rec.adr. (SM2=0) rec.date cel cu adr.01C (SM2=1) pt. adr. BAD

Sursele de cereri de intreruperi pentru C 8051 sunt externe si interne. Sursele externe transmit cererile de intrerupere prin pinii INT 0( P3.2) si INT1( P3.3) ai microcontrolerului. Sursele interne de intrerupere sunt circuite de numarare/temporizare N / T0 , N / T1 si portul serial. Cererile de intrerupere generate de sursele de intrerupere pozitioneaza la nivel 1 bitii corespunzatori din registrele interne TCON si SCON dupa cum urmeaza: - IE0 (TCON.1) si IE1 (TCON.3) pentru intreruperi externe - TF0 (TCON.5) si TF1 (TCON.7) pentru intreruperi de la circuitele de numarare/temporizare. - Ri (SCON.0) si Ti (SCON.1) pentru intreruperi de la portul serial. Starile acestor biti indicatori de cereri de intrerupere sunt testate de logica de control a intreruperilor microcontrolerului in faza S5P2 a fiecarui ciclu masina. Astfel logica de control a intreruperilor identifica sursele care solicita intrerupere si asigura apelul subrutinei de intrerupere corespunzatoare unei surse, in concordanta cu conditiile de validare si prioritatile stabilite pentru surse prin programare. Starile bitilor indicatori de cereri de intrerupere pot fi stabilite prin programare.

Sistemul de intreruperi al

C 8051

INT 0 PIN P3.2


DETECTOR DE FRONT DE CADERE N/T0

IT0 TCON.0
0

IE0 TCON.1
K1

TF0 TCON.5

INT 1 PIN P3.3


N/T1
0

IT1 TCON.2 IE1 TCON.3


K2

DETECTOR DE FRONT DE CADERE

TF1 TCON.7 Ti SCON.1

PORT SERIAL

Ri SCON.0

O sursa externa poate solicita o cerere de intrerupere prin comanda pinului INT 0 sau INT1` cu nivel logic 0 sau cu un front de cadere, in functie de nivelul logic programat in bitul IT0 sau IT1. In cazul variantei de cerere de intrerupere externa prin nivel bitul IEi urmareste in permanenta nivelul logic de comanda a intrarii INT i . Astfel o cerere de intrerupere indicata prin nivel logic 1 al bitului IEi corespunde nivelului logic 0 de comanda a pinului INT i , avand in vedere prezenta circuitului inversor. Nivelul logic 0 corespunzator unei cereri de intrerupere externa prin nivel trebuie mentinut pana la apelul de catre microcontroler a subrutinei de intrerupere corespunzatoare. Comanda liniei INT i la nivel 1 trebuie sa se efectueze inainte de sfirsitul executiei subrutinei de intrerupere corespunzatoare, pentru a se evita apelul repetat al acesteia. In cazul variantei de cerere de intrerupere prin front de cadere, bitul IEi este pozitionat la nivel 1 de un front de cadere prezent la intrarea INT i . Detectia fronturilor de cadere se realizeaza prin esantionarea starii intrrii INT i cu frecventa ciclurilor masina.

Rezulta ca pentru detectia corecta a unui front de cadere este necesara comanda intrarii INT i cu nivel 1, apoi cu nivel 0, fiecare nivel logic trebuind sa fie mentinut pe o durata cel putin egala cu durata unui ciclu masina. Nivelul logic1 din bitul IEi, rezultat ca urmare a detectiei unui front de cadere, se mentine pana la apelul de catre microcontroler a subrutinei de intrerupere corespunzatoare, cand bitul IEi este pozitionat la nivel 0 de catre logica de control a microcontrolerului. Cererile de intrerupere de la un circuit de numarare/temporizare N/Ti0, i=0, 1, sunt generate la depasirea valorii maxime corespunzatoare capacitatii numaratorului, cind bitul indicator de depasire TFi se pozitioneaza la nivel logic 1. La apelul subrutinei de intrerupere corespunzatoare, bitul TFi este pozitionat la nivel logic 0 de catre logica de control a intreruperilor microntrolerului. Cererile de intrerupere de la portul serial sunt generate de la sfirsitul transmisiei sau recepriei unui cuvint, cind bitii inicatori de cereri de intrerupere Ti respectiv Ri se pozitioneaza la nivelul logic 1. La apelul subrutinei de intrerupere corespunzatoare starile bitilor Ti si Ri nu sunt modificate de catre logica de control al intreruperilor microcontrolerului astfel subrutina de intrerupere se testeaza bitii Ri si Ti pentru determinarea tipului de intrerupere (receptie respectiv transmisie) si apoi se programeaza nivelul logic in bitii Ri si Ti. Sursele de cereri de intreruperi pentru microcontrolerul 8051 sunt mascabile. Astfel validarea sau invalidarea acceptarii de catre microcontroler a cererilor de intreruperi corespunzatoare diferitelor surse se pot stabili prin programarea registrului de validare intrerupere IE.invalidarea tuturor surselor de cereri de intrerupere se realizeaza prin programarea bitului EA (IE.7). La nivel logic 0. Daca bitul EA este programat la nivel 1 validarea sau invalidarea surselor de cereri de intrerupere se programeaza independent pentru fiecare sursa utilizand bitii de validare a intreruperilor din registrul IE, dupa cum urmeaza: 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 in bitul IE.i conduce la validarea sursei de cereri de intrerupere corespunzatoare. Sistemul de prioritati al intreruperilor Sistemul de prioritati pentru deservirea cererilor de intrerupere cuprinde doua nivele de prioritate. Fiecare sursa de cerere de intrerupere poate fi plasata in unul din cele doua niveluri de prioritate , prin programarea corespunzatoare a bitilor registrului de control a prioritatii intreruperilor IP dupa cum urmeaza: 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 suesei de cereri de intreruperi corespunzatoare la nivelul de prioritate ridicata. Executia unei subrutine de intrerupere corespunzatoare unei surse de intrerupere programata la nivel ridicat de prioritate nu poate fi intrerupta. In cazul a doua cereri de intrerupere de la doua surse din niveluri de prioritate diferite ce apar simultan microcontrolerul serveste prima cerere de intrerupere corespunzatoare sursei de intrerupere cu un nivel de prioritate ridicat. In cazul cererilor de intrerupere simultane de la surse de acelasi nivel de prioritate se utilizeaza in al doilea criteriu de prioritate stabilit prin structura microcontrolerului . Acest al doilea criteriu este stabilit pentru ambele niveluri de prioritate si plaseaza sursele de cereri de intreruperi in ordinea scaderii prioritatii dupa cum urmeaza: INT0, NIT0, INT1, NIT1, si portul serial. Logica de control a intreruperilor microcontrolerului 8051 esantioneaza starea bitilor indicatori de ceri de intrerupere in faza S5P2 a fiecarui ciclu masina si analizeaza rezultatele fiecarei esantionari in ciclu masina urmator. Aceasta analiza consta in identificarea sursei de prioritate maxima care solicita intrerupere. Dupa ciclul de analiza microcontrolerul executa intern ciclurile corespunzatoare unei instructiuni: LCALL addr., unde addr este functie de sursa de cerere de intrerupere servita daca sunt indeplinite conditiile urmatoare: Ciclu de analizeaza este ultimul din executia unei instructiuni. Ciclu de analizeaza nu corespunde executiei unei instructiuni din subrutina de intrerupere corespunzatoare unei surse de acelasi nivel de prioritate sau de nivel de prioritate mai ridicata Ciclu de analizeaza nu corespunde executiei unei instructiuni RETI sau a unei instructiuni de acces la registrele IE si IP. La executia unei instructiunui LCALL addr.pentru apelul unei subrutine de intrerupere se salveaza in memoria stiva continutul numaratorului de adrese PC si se inacrca in aceasta adresa de inceput a subrutinei de intrerupere. Aceasta adresa este functie de sursa de cerere de intrerupere servita si este stabilita prin structura microcontrolerului dupa cum urmeaza: INT0 03h NIT0 0Bh INT1 13h N/T1 1Bh Port serial 23h Subrutian de intrerupere se termina cu o instructiune RETI prin care se realizeaza incarcarea PC din memoria stiva cu adresa de revenire in programul intrerupt. Deasemenea, prin executia instructiunii RETI se informeaza logica de control a intreruperilor cu privire la terminarea subrutinei de intrerupere.