Familia de microcontrollere 80C51 Introducere



Yüklə 282 Kb.
tarix17.09.2018
ölçüsü282 Kb.
#68966


Familia de microcontrollere 80C51

  • Introducere

  • Adresarea memoriei

  • Sistemul de întreruperi

  • Regiştrii sistemului de timere

  • Comunicaţia serială


Introducere

  • Microcontrollerele inglobează diferite circuite necesare unui sistem de calcul:

    • processor boolean
    • memorie
    • numărătoare/timere
    • sistem de întreruperi
    • porturi de intrare/iesire


Caracteristicile familiei de microcontrollere 80C51:

  • Caracteristicile familiei de microcontrollere 80C51:

    • Unitate centrala de procesare 8051
      • 4k*8 ROM
      • 128*8 RAM
      • 3*16-biti numărătoare/timere
      • procesor boolean
    • Capabilitate de adresare a memoriei externe
      • 64k*8 ROM (program)
      • 64k*8 RAM (data)
    • 6 întreruperi cu 2 nivele de prioritate
    • 4*8-biti porturi I/O
    • UART full–duplex
    • port asincron de reset


Circuitele integrate în microcontroller comunica prin intermediul unor magistrale interne pe care se pot vehicula adrese, date sau semnale de control

  • Circuitele integrate în microcontroller comunica prin intermediul unor magistrale interne pe care se pot vehicula adrese, date sau semnale de control



Simbolul logic şi descrierea pinilor

  • Simbolul logic şi descrierea pinilor

  • VSS, intrare, masă

  • VCC, intrare, alimentare

  • P0.0–0.7, intrare/iesire, port 0, funcţie de port bidirecţional de 8 biti open-drain cu intrari trigger Schmitt; pinii care au 1 inscris sunt flotanţi si pot fi folosiţi ca şi intrări cu inaltă impedanţă; funcţie de magistrală de date şi magistrală de adrese mai puţin semnificativă multiplexate pe perioada accesurilor la memoria externă de date şi program folosind rezistenţe de ridicare interne



P2.0–P2.7, intrare/ieşire, port 2, funcţie de port bidirecţional de 8 biti cu rezistenţe de ridicare interne si intrări trigger Schmitt; pinii care au 1 înscris sunt ridicaţi în 1 de către rezistenţele interne de ridicare şi pot fi folosiţi ca şi intrări; ca şi funcţie alternativă emite octetul mai semnificativ de adresă pe perioada accesului la memoria externă de program şi date

  • P2.0–P2.7, intrare/ieşire, port 2, funcţie de port bidirecţional de 8 biti cu rezistenţe de ridicare interne si intrări trigger Schmitt; pinii care au 1 înscris sunt ridicaţi în 1 de către rezistenţele interne de ridicare şi pot fi folosiţi ca şi intrări; ca şi funcţie alternativă emite octetul mai semnificativ de adresă pe perioada accesului la memoria externă de program şi date

  • P3.0–P3.7, intrare/ieşire, port 3; funcţie de port bidirecţional de 8 biţi cu rezistenţe de ridicare interne şi intrări trigger Schmitt; pinii care au 1 înscris sunt ridicaţi în 1 de către rezistenţele interne de ridicare şi pot fi folosiţi ca şi intrări; fiecare pin poate avea şi funcţie alternativă

  • RxD, intrare, (P3.0), portul de intrare serial

  • TxD, ieşire, (P3.1), portul de ieşire serial

  • INT0\, intrare, (P3.2), întreruperea externă 0



RST, intrare, reset

  • RST, intrare, reset

  • ALE/PROG\, intrare/ieşire, Address Latch Enable/Program Pulse, pulsul de ieşire ALE este folosit pentru memorarea octetului mai puţin semnificativ de adresă pe perioada unui acces la memoria externă, pinul PROG este intrarea pulsului de program pe perioada programării EPROM-ului

  • PSEN\, ieşire, Program Store Enable, semnalul de activare a citirii memoriei de program externe



XTAL1, intrare, Crystal 1, intrarea pentru amplificatorul inversor al oscilatorului şi circuitul generator de tact

  • XTAL1, intrare, Crystal 1, intrarea pentru amplificatorul inversor al oscilatorului şi circuitul generator de tact

  • XTAL2, ieşire, Crystal 2, ieşirea de la amplificatorul inversor al oscilatorului



Schema internă a portului 0

  • Schema internă a portului 0

  • Semnalul CONTROL comandă multiplexorul astfel încât portul 0 să poată genera adrese sau date sau sa poata fi folosit ca şi port de uz general.

  • Dacă semnalul CONTROL are valoarea logică 1, portul 0 este folosit pentru magistrala de adrese şi date folosind rezistenţe de ridicare interne. Ieşirea porţii ŞI-NU nu este influenţată de semnalul CONTROL, deci, starea tranzistorului Mp este determinată doar de starea logică a adreselor sau datelor transmise.



Adresarea memoriei

  • Ciclul de citire şi configuraţia memoriei de program externe

  • Adresa este transmisă mai întâi prin porturile P0 şi P2 pe magistrala de adrese. A0-A7 sunt memorate în latch la activarea semnalului ALE. Semnalul PSEN\ devine activ şi informaţia din memoria de program este transmisă pe magistrala de date fiind receptionată prin portul P0



Ciclii de citire/scriere şi configuratia memoriei de date externe

  • Ciclii de citire/scriere şi configuratia memoriei de date externe

  • Pentru ciclul de citire, adresa este transmisă mai intâi prin porturile P0 şi P2 pe magistrala de adrese. A0-A7 sunt memorate în latch la activarea semnalului ALE. Semnalul RD\ devine activ şi informaţia din memoria de date este transmisă pe magistrala de date fiind recepţionată prin portul P0.

  • Pentru ciclul de scriere, adresa este transmisă mai intâi prin porturile P0 şi P2 pe magistrala de adrese. A0-A7 sunt memorate în latch la activarea semnalului ALE. Datele sunt transmise prin portul P0 pe magistrala de date şi la activarea semnalului WR\ sunt înscrise în memoria de date.



Organizarea memoriei

  • Organizarea memoriei

  • Spaţii de adresă separate pentru memoria de program şi date. Memoria de program este o memorie nevolatilă având o lungime de până la 64K*8. Dacă pinul EA\ este ţinut din exterior în starea logică 1, primele 4K locaţii de memorie sunt accesate din memoria internă a microcontrollerului restul fiind accesate din memoria externă. Dacă pinul EA\ este ţinut din exterior în starea logică 0, toate cele 64K locaţii de memorie sunt accesate din memoria externă.



Acceseaza atât de memorie de date internă cât şi externă. Memoria de date internă este de 128*8 RAM plus un număr de Regiştri cu Funcţiuni Speciale (Special Function Registers SFRs). Cele mai mici 128*8 adrese RAM pot fi accesate prin adresare directă sau indirectă. Regiştrii cu funcţiuni speciale pot fi accesaţi doar prin adresare directă. Memoria de date externă poate avea o lungime de până la 64K*8, fiind o memorie de tip RAM.

  • Acceseaza atât de memorie de date internă cât şi externă. Memoria de date internă este de 128*8 RAM plus un număr de Regiştri cu Funcţiuni Speciale (Special Function Registers SFRs). Cele mai mici 128*8 adrese RAM pot fi accesate prin adresare directă sau indirectă. Regiştrii cu funcţiuni speciale pot fi accesaţi doar prin adresare directă. Memoria de date externă poate avea o lungime de până la 64K*8, fiind o memorie de tip RAM.



Cele mai mici 128*8 adrese pot fi impărţite în 3 segmente:

  • Cele mai mici 128*8 adrese pot fi impărţite în 3 segmente:

  • Register Banks 0-3: adresele de la 00H până la 1FH (32 octeţi). Microcontrollerul după reset pointează la register bank 0. Selecţia bancului de regiştri se face prin software. Fiecare register bank conţine 8 regiştri de un octet, 0 până la 7.

  • Bit Addressable Area: adresele de la 20H până la 2FH (16 octeţi). Fiecare dintre cei 128 biţi pot fi adresaţi direct (00H până la 7FH). Fiecare dintre cei 16 octeţi pot fi adresaţi ca şi octet.

  • Scratch Pad Area: adresele de la 30H până la 7FH (80 octeţi). Folosiţi pentru RAM de date.



Regiştrii cu funcţiuni speciale marcaţi cu * sunt adresabili atât pe bit cât şi pe octet. Ceilalţi regiştri sunt adresabili doar pe octet. După reset, fiecare registru este încărcat cu o valoare care nu interferă cu posibile valori utilizator. Regiştrii adresabili atât pe octet cât şi pe bit se află pe prima coloană.

  • Regiştrii cu funcţiuni speciale marcaţi cu * sunt adresabili atât pe bit cât şi pe octet. Ceilalţi regiştri sunt adresabili doar pe octet. După reset, fiecare registru este încărcat cu o valoare care nu interferă cu posibile valori utilizator. Regiştrii adresabili atât pe octet cât şi pe bit se află pe prima coloană.





Sistemul de întreruperi

  • La apariţia unei intreruperi, microcontrollerul suspendă temporar execuţia programului şi execută rutina de tratare a întreruperii care deserveşte întreruperea. După aceea, continuă execuţia programului.

  • Pentru a executa rutina de tratare a întreruperii microcontrollerul parcurge urmatorii paşi:

    • Salvează pe stivă locaţia urmatoarei instructiuni (2 octeţi) şi PSW (2 octeţi).
    • Determină sursa de întrerupere (numărul întreruperii). Fiecare sursă de întrerupere are un vector de întrerupere care este încărcat cu o instrucţiune de salt la adresa rutinei de tratare a întreruperii. Adresa vectorului este calculată automat de catre microcontroller. Vectorii de întrerupere (8 octeţi) se află in tabela vectorilor de întrerupere.
    • Accesează tabela vectorilor de întrerupere folosind vectorul de întrerupere ca şi index pentru a determina adresa rutinei de tratare a întreruperii.
    • Execută rutina de tratare a întreruperii.
    • Întreruperea se termină cu instructiunea IRET care încarcă de pe stivă locaţia următoarei instrucţiuni (2 octeţi) şi PSW (2 octeţi)


Pentru implementarea întreruperilor, trebuiesc parcurşi următorii paşi:

  • Pentru implementarea întreruperilor, trebuiesc parcurşi următorii paşi:

    • Se setază bitul EA din registrul IE la valoarea logică 1. Această setare permite activarea intreruperilor.
    • Se seteaza la valoarea logică 1 în registrul IE biţii de activare a întreruperii pentru întreruperile care vor fi folosite.
    • Adresa de început a rutinei de tratare a întreruperii va corespunde adresei vectorului întreruperii respective. Fiecare vector va fi încărcat cu o instrucţiune long jump la adresa rutinei de tratare a întreruperii.
    • In plus, pentru întreruperile externe, pinii INT0\ (P3.2) şi INT1\ (P3.3) trebuiesc setaţi la valoarea logică 1, şi biţii corespunzatori (IT0 şi IT1) din registrul TCON trebuiesc resetaţi sau setaţi pentru activarea întreruperii pe nivel sau pe front.
  • Întreruperile microcontrollerelor din familia 80C51



Structura registrului IE

  • Structura registrului IE

  • Adresabil atât pe octet cât şi pe bit. Dacă EA este 0, toate întreruperile sunt dezactivate. Dacă EA este 1, o întrerupere este activată prin setarea bitului corespunzator la 1. Dacă bitul corespunzator este 0 întreruperea este dezactivată. Funcţiile biţilor:

    • EA, IE.7: dacă EA=0, nici o întrerupere nu va fi achitată. Dacă EA=1, fiecare sursă de întrerupere poate fi activată sau dezactivată individual.
    • ET2, IE.5: timer 2 overflow sau întrerupere de captură (doar 8052)
    • ES, IE.4: întrerupere port serial
    • ET1, IE.3: întrerupere Timer 1 overflow
    • EX1, IE.2: întrerupere externă 1
    • ET0, IE.1: întrerupere Timer 0 overflow
    • EX0, IE.0: întrerupere externă 0


Sistemul de priorităţi al întreruperilor

  • Sistemul de priorităţi al întreruperilor

  • Două nivele de prioritate. O prioritate mai mare poate întrerupe o prioritate mai mică. O prioritate mai mică nu poate întrerupe o prioritate mai mare. Pentru asignarea unei priorităţi mai mari sau mai mici unei întreruperi bitul corespunzător din registrul IP trebuie setat la 1 sau 0. În acelaşi nivel de prioritate sunt mai multe priorităţi. Priorităţile din acelaşi nivel nu pot fi întrerupte de alte priorităţi din acelasi nivel chiar dacă în interiorul nivelului de prioritate acele priorităţi au un nivel mai mare. Priorităţile în interiorul unui nivel se folosesc doar pentru rezolvarea cererilor simultane ale aceluiaşi nivel de prioritate.

  • Priorităţile de la mare la mic: IE0, TF0, IE1, TF1, RI sau TI şi TF2 sau EXF2.

  • Structura registrului IP

  • Adresabil atât pe octet cât şi pe bit. Dacă bitul este 0, întreruperea corespunzătoare are o prioritate mai mică. Dacă bitul este 1, întreruperea corespunzatoare are o prioritate mai mare. Funcţiile biţilor:

    • PT2, IP.5: nivelul de prioritate al întreruperii Timer 2 (doar 8052)
    • PS, IP.4: nivelul de prioritate al întreruperii portului serial
    • PT1, IP.3: nivelul de prioritate al întreruperii Timer 1
    • PX1,IP.2: nivelul de prioritate al întreruperii externe 1
    • PT0, IP.1: nivelul de prioritate al întreruperii Timer 0
    • PX0, IP.0: nivelul de prioritate al întreruperii externe 0


Regiştrii sistemului de timere

  • Structura registrului TCON

  • Adresabil atât pe octet cât şi pe bit. Funcţiile biţilor:

    • TF1, TCON.7: Flag Timer 1 overflow. Setat hardware la overflow Timer 1. Şters hardware când procesorul execută rutina de tratare a întreruperii.
    • TR1, TCON.6: Bit de control funcţionare Timer 1. Dacă TR1=1, Timer 1 ON. Dacă TR1=0, Timer 1 OFF.
    • TF0, TCON.5: Flag Timer 0 overflow. Setat hardware la overflow Timer 0. Şters hardware când procesorul execută rutina de tratare a întreruperii.
    • TR0, TCON.4: Bit de control funcţionare Timer 0. Dacă TR0=1, Timer 0 ON. Dacă TR0=0, Timer 0 OFF.
    • IE1, TCON.3: Flag de front întrerupere externă 1. Setat hardware când este detectat frontul la întreruperea externă 1, şters hardware când întreruperea este procesată.
    • IT1, TCON.2: Bit de control tip întrerupere 1. Dacă IT1=1, întreruperea 1 este declanşată de un front căzător. Dacă IT1=0, întreruperea 1 este declanşată de nivelul logic 0.
    • IE0, TCON.1: Flag de front întrerupere externă 0. Setat hardware când este detectat frontul la întreruperea externa 0, şters hardware când întreruperea este procesată.
    • IT0, TCON.0: Bit de control tip întrerupere 0. Dacă IT0=1, întreruperea 0 este declanşată de un front căzător. Dacă IT0=0, întreruperea 0 este declanşată de nivelul logic 0.


Structura registrului TMOD

  • Structura registrului TMOD

  • Adresabil pe octet. Funcţiile biţilor:

  • GATE: Dacă GATE=1, TIMERx va rula doar atât timp cât TRx=1 şi INTx=1 (control hardware). Dacă GATE=0, TIMERx va rula doar atât timp cât TRx=1 (control software).

  • C/T\, Selector Timer sau Counter. Dacă C/T\=0, operare Timer (intrare de la ceasul sistem intern). Dacă C/T\=1, operare Counter (intrare de la pinul de intrare Tx).

  • M1: Bit de selectie mod.

  • M0: Bit de selectie mod.



Comunicaţia serială

  • Structura registrului SCON

  • Adresabil atât pe octet cât şi pe bit. Funcţiile biţilor:

    • SM0: Bit 0 mod Port Serial (MSB).
    • SM1: Bit 1 mod Port Serial (LSB).
    • SM2: Acivează caracteristica de comunicare multiprocesor în modurile 2 şi 3. În modurile 2 sau 3, dacă SM2=1, RI va fi activat (setat la 1) doar dacă al 9-lea bit de date recepţionat (RB8) este 1. În modul 1, dacă SM2=1, RI va fi activat doar dacă un bit de stop valid a fost recepţionat. În modul 0, SM2=0.
    • REN: Setat/şters prin software pentru a Activa/Dezactiva recepţia.
    • TB8: Al 9-lea bit care va fi transmis în modurile 2 şi 3.
    • RB8: În modurile 2 şi 3, este al 9-lea bit de date recepţionat. În modul 1, dacă SM2=0, RB8 este bitul de stop recepţionat. În modul 0, RB8 nu este folosit.
    • TI: Flag de întrerupere la transmisie. Setat prin hardware. Trebuie şters prin software.
    • RI: Flag de întrerupere la recepţie. Setat prin hardware. Trebuie şters prin software.


În modul 0 portul serial comunică la rata baud fixă.

  • În modul 0 portul serial comunică la rata baud fixă.

  • Rata Baud = Osc Freq/12

  • Pentru configurarea acestui mod trebuie definit doar registrul SCON. Nu este necesară setarea unui Timer/Counter.

  • În acest mod portul de comportă ca şi un registru de shiftare de opt biţi transmiţând si recepţionând date la rata baud. Datele sunt transmise cu LSB primul bit si intră şi ies din UART prin pinul RXD. În consecinţă acest mod nu suportă comunicaţia full duplex. Transmisia începe când registrul SBUF este încărcat cu date. Octetul este transmis şi bitul TI este setat când transmisia este completă. Recepţia incepe când bitul REN din registrul SCON este setat. Bitul RI este setat când octetul este recepţionat.

  • În modul 1 rata baud este variabilă fiind generată de Timer 1 care este folosit în modul 2 (Auto-Reload).

  • Rata Baud = (K * Osc Freq)/{32 * 12 * [256 - (TH1)]}

  • Bitul SMOD din registrul PCON determină valoarea parametrului K. Dacă SMOD = 0, K = 1, dacă SMOD = 1, K = 2.

  • TH1 = 256 – (K * Osc Freq) / (384 * Rata Baud)

  • Formatul cadrului: 1 bit de start, 8 biţi de date, 1 bit de stop.

  • Semnalele de întrerupere TI şi RI sunt activate atunci când un cadru a fost transmis sau recepţionat.



In modul 2 portul serial comunică la rata baud fixă.

  • In modul 2 portul serial comunică la rata baud fixă.

  • SMOD = 1, Rata Baud = 1/32*Osc Freq.

  • SMOD = 0, Rata Baud = 1/64*Osc Freq.

  • Pentru configurarea acestui mod trebuie definit doar registrul SCON. Nu este necesară setarea unui Timer/Counter.

  • Formatul cadrului: 1 bit de start, 8 biţi de date, al 9-lea (stick) bit, şi 1 bit de stop. Valoarea celui de-al 9-lea bit este determinată de bitul TB8 la transmiţător şi este recepţionată în bitul RB8. Acest bit este folosit pentru comunicaţii interprocesor. UART-ul poate fi iniţializat prin setarea bitului SM2 să genereze o întrerupere la recepţie doar atunci când bitul al 9-lea este setat. Un octet de adresă sau comandă poate fi transmis cu al 9-lea bit setat. Toate procesoarele sunt întrerupte şi bitul recepţionat este procesat pentru a se vedea dacă este necesară recepţionarea mesajului. Daca microcontrollerul trebuie să recepţioneze mesajul, bitul SM2 este şters si restul mesajului este recepţionat. Dacă microcontrollerul nu trebuie sa recepţioneze mesajul, bitul SM2 este lăsat setat şi mesajul nu va genera o întrerupere.

  • Modul 3 este similar modului 2 în termenii formatului cadrului şi folosirii celui de-al 9-lea bit. Ratele baud sunt similare modului 1.



Probleme rezolvate

  • Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

    • oscilator cu quartz avand frecventa de 12MHz
    • circuit de reset
    • 8k*8 memorie de program externa avand adresa de baza 0000H
    • 8k*8 memorie de date si program externa avand adresa de baza 2000H
    • 8k*8 memorie de date externa avand adresa de baza 4000H




Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

  • Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

    • oscilator cu quartz avand frecventa de 12MHz
    • circuit de reset
    • 8k*8 memorie de program externa avand adresa de baza 0000H
    • port de iesire la adresa 011XXXXXXXXXXXXXb
    • port de intrare la adresa 111XXXXXXXXXXXXXb la care sunt conectate 2 taste




Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

  • Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

    • oscilator cu quartz avand frecventa de 12MHz
    • circuit de reset
    • port de iesire la adresa XXXXX001XXXXXXXXb la care sunt conectate doua display-uri cu LED-uri 7-segmente catod comun pentru care VLED=1,7V si ILED=10mA
    • 2 taste conectate la intrarile de intrerupere
    • microcontrollerul foloseste doar memoria interna de program
  • Calculul rezistentelor conectate la display-uri se face dupa formula:

  • R=(VOHTYP-VLED)/ILED=(4,25V-1,7V)/10mA=255Ω





Probleme propuse

  • Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

    • oscilator cu quartz avand frecventa de 12MHz
    • circuit de reset
    • 32k*8 memorie de date si program externa avand adresa de baza 8000H
    • 2 taste conectate la intrarile de intrerupere


Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

  • Sa se proiecteze un sistem cu microcontroller 80C51 avand urmatoarele blocuri:

    • oscilator cu quartz avand frecventa de 12MHz
    • circuit de reset
    • port de iesire la adresa XXX101XXXXXXXXXXb la care sunt conectate doua display-uri cu LED-uri 7-segmente anod comun pentru care VLED=1,6V si ILED=30mA
    • pentru tranzistoare se considera =100
    • microcontrollerul foloseste doar memoria interna de program



Yüklə 282 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2023
rəhbərliyinə müraciət

    Ana səhifə