Arhitectura sistemelor cu microprocesor - ece.ubm.roece.ubm.ro/ea/cursuri/MM/ASM_C6.pdf ·...

download Arhitectura sistemelor cu microprocesor - ece.ubm.roece.ubm.ro/ea/cursuri/MM/ASM_C6.pdf · Arhitectura sistemelor cu microprocesor ... asamblare în cod maşina. Pentru programe scurte

If you can't read please download the document

Transcript of Arhitectura sistemelor cu microprocesor - ece.ubm.roece.ubm.ro/ea/cursuri/MM/ASM_C6.pdf ·...

  • Arhitectura sistemelor cu microprocesor

    Elementele eseniale ale unui calculator sunt prezentate n figura 1.1

    Unitatea central de prelucrare UCP sau CPU (Central Processing Unit) este creierul calculatorului. El realizeaz funciile eseniale de extragere a instruciunilor din memoria de program i executarea acestor instruciuni. Unitatea central de prelucrare conine Unitatea Aritmetico Logic (ALU de la Aritmetic/ Logic Unit) care realizeaz diferite operaii aritmetice i logice. Modul de realizare al ALU d fiecrui procesor unicitatea lui. Aceasta face de exemplu diferena dintre un Intel 486 i un Motorola 68000.

    Memoria este utilizat pentru pstrarea att a instruciunilor de program ct i a datelor. O unitate de stocare este numit cuvnt. Calculatoarele au lungimi de cuvinte diferite, de exemplu cuvinte de 4, 8, 12, 16, 32, 64 bii. Microcalculatoarele folosesc n general cuvinte de 8 bii sau un octet (byte). Memoria este organizat ca o niruire liniar de cuvinte, cuvntul fiind cea mai mic grupare de bii care poate fi accesat de CPU. Fiecare cuvnt este identificat prin adresa ei sau locaia de memorie. De aceea un calculator cu o memorie de 64K cuvinte (65536 cuvinte) necesit un registru de adrese de memorie de 16 bii. n calculatoarele moderne se folosesc memorii DRAM (Dynamic Random Access Memory). Acestea au dezavantajul c i pierd coninutul n timp deci este necesar remprosptarea periodic a informaiei ceea ce necesit circuite suplimentare. Memoriile SRAM (static Random Access Memory) sunt mai rapide dect DRAM-urile, au consum mai redus de putere i nu necesit remprosptarea informaiei dar la fel ca si cele DRAM sunt volatile adic odat cu ntreruperea alimentrii toate datele sunt pierdute. Exist aplicaii care necesit memorii nevolatile. Dintre memoriile nevolatile amintim memoriile ROM (Read Only Memory) utilizate pentru stocarea codurilor de program sau informaiilor care nu se schimb niciodat. Pentru a fi rentabile din punct de vedere al costului acestea trebuiesc s fie programate de productor n cantitate mare. EPROM-urile (sau UV-EPROM Ultra Violet Erasable Programable ROM) pot fi terse i reprogramate de utilizator cu ajutorul unei lmpi UV i a unui echipament de programare. EEPROM (Electrically Erasable PROM) are avanatjul de a putea fi tres i programat in situ. Flash memory este un alt tip de EEPROM, care datorit densitii mai mari i timpului de tregere mai mare este mai recomandat pentru a nlocui hard discuri sau ca si carduri de memorie conforme cu standardul PCMCIA (Personal Computer Memory Card International Association).

    Fr posibiliti de intrare/ieire, I/E sau I/O, calculatoarele nu ne-ar fi de mare ajutor. Intrare/ieire nseamn a introduce i a extrage informaie din calculator. Aceste dispozitive de I/E pot fi foarte simple ca de exemplu ntreruptoare i becuri dar de obicei sunt tastatur, mouse, monitor. Alte exemple de dispozitive de I/E sunt: modemurile, plcile de sunet, convertoarele analog-digitale i digital-analogice, porturile seriale i paralele, numrtoare i temporizatoare.

  • Dispozitive de stocare sunt o alt categorie de dispozitive de intrare/ieire. Hard discul, driverul de floppy disc i unitatea CD-ROM sunt dispozitive de stocare de capacitate mare pentru pstrarea unor cantiti mari de informaie. Chiar dac acestea pot fi percepute ca nefcnd parte din posibilitile de I/E ale calculatorului, din punct de vedere hardware ele sunt legate cu calculatorul prin magistrala de I/E.

    CALCULATOARE INCORPORATE (incluse, inserate implantate ? )

    Suntem obinuii cu calculatoarele n formele lor cele mai vizibile ca de exemplu calculatoarele personale (PC) de birou (desktop), portabile (laptop), staii de lucru sau grafice etc. Exist ns i multe alte calculatoare dect cele amintite, care sunt ncorporate n maini, instrumente sau aplicaii cum ar fi televizoarele, videorecorderele, cuptoarele cu microunde, imprimantele, copiatoarele, modemurile, telefoanele mobile, automobilele, echipamentele de testare i diagnosticare, echipamente tiinifice, aparatur medical i lista ar putea continua. Calculatoarele embadded se refer att la microprocesoare ct i la sistemele mai complexe cu calculatoare dedicate unei anumite funcii. Ele pot fi de la un microprocesor pe 4 bii care cost sub 1 $ la un Pentium sau un Power PC care poate costa peste 10.000 $.

  • Capitolul 1 Introducere Ce este un microcontroler?

    Un microcontroler este un "calculator pe un cip" Micro sugereaz mrimea redus a dispozitivului iar controler ne spune ca dispozitivul poate fi folosit pentru a controla obiecte, procese, sau evenimente.

    Microcontrolerele pot fi gsite n componenta oricrui tip de aparate. Orice aparat care msoar, stocheaz, comanda, calculeaz sau afieaz informaii este o potenial gazd pentru un microcontroler. De exemplu orice automobil fabricat astzi este echipat cu cel puin un microcontroler care comanda motorul mainii i adesea chiar cu mai multe pentru comanda sistemelor adiionale din automobil. n calculatoarele de birou (PC) se pot gsii microcontrolere n tastatura, modemuri, imprimante i alte periferice. In echipamentele de testare fac posibila adugarea unor faciliti ca de exemplu memorarea rezultatelor msurrii, afiarea mesajelor i formelor de unda. Produsele de larg consum care includ microcontrolere sunt camerele video, video recorderele, compact-disk playere, i altele.

    Un microcontroler este similar unui microprocesor. Ambele conin o unitate centrala de prelucrare sau CPU (central processing unit). CPU executa instruciuni care ndeplinesc operaiile de baza logice, matematice, i de micare (rotire) a informaiei. Pentru a construi un calculator complet microprocesorul necesita memorie pentru pstrarea datelor i programelor i interfee de intrare ieire (I/O) pentru conectarea dispozitivelor externe cum ar fi tastatura i monitorul. Spre diferen de microprocesor, microcontrolerul este un calculator pe un cip deoarece el conine i memorie i interfee de intrare ieire pe lng CPU. Deoarece mrimea memoriei i interfeele care ncap pe un cip sunt limitate, microcontrolerele tind sa fie utilizate n sisteme mai mici care necesita doar un microcontroler i cteva elemente adiionale. Celor mai populare microcontrolere sunt 8051 produsa prima data de firma Intel i 68HC11 a firmei Motorola. Putina istorie. n numrul sau din ianuarie 1975 revista "Popular Electronics" descrie intr-un articol calculatorul ALTAIR 8800, care a fost primul calculator pe care hoby-tii au putut construi i programa singuri. Varianta iniial nu includea tastatur, monitor, uniti de disc, sau alte elemente pe care noi acum le considerm eseniale pentru un calculator personal. Microprocesorul pe care l coninea era de tipul 8080 i putea fi programat prin intermediul unor comutatoare aflate pe panoul frontal. O mare rspndire a folosirii calculatorului s-a produs cnd o mica companie numita Microsoft a oferit o versiune a limbajului de programare BASIC pentru el. De sigur lumea calculatoarelor s-a schimbat mult de atunci. Microsoft a devenit un furnizor uria de software i un calculator personal tipic include tastatura, monitor, uniti de disc, i megabytes de RAM. Un calculator personal de tipul IBM PC este un calculator de uz general, deoarece l putem utiliza pentru multe aplicaii cum ar fi editare de text, calcul tabelar, proiectare asistata de calculator i multe altele prin simpla instalare a softului corespunztor. Interfaa calculatoarelor este n marea majoritate a cazurilor standard ca de exemplu monitoare, tastatura i imprimanta.

    Odat cu dezvoltarea calculatoarelor personale s-a dezvoltat i interesul pentru calculatoare mici dedicate anumitor aplicaii sau unui set de aplicaii asemntoare. Adugnd puterea calculatorului unui aparat acesta poate sa execute aplicaia pentru care a fost construit

  • mai repede, mai bine sau mai ieftin. De exemplu un dispozitiv de control al motorului unui automobil poate duce la diminuarea semnificativa a emisiilor de gaze. Microcontrolerele din modemurile computerelor au permis adugarea de faciliti fa de modemurile obinuite. Dispozitivul de baza a acestor computere specializate este un microcontroler. Programul calculatorului este pstrat permanent intr-o memorie semiconductoare ROM sau EPROM. Interfaa intre microcontroler i lumea exterioara variaz n funcie de aplicaie i poate sa conin un mic display, o tastatura, sau comutatoare, senzori, relee, motoare i altele. Proiectarea i construcia unui aparat controlat de microcontroler necesita cunotine att n proiectarea circuitelor cat i n programare. Odat cu introducerea microcontrolerelor s-a redus numrul de componente deci i proiectarea a devenit mai uoar. Calculatoarele personale pot servi ca sisteme gazda pentru scrierea i testarea programelor. Se pot folosi resursele calculatorului personal cum ar fi tastatura, monitorul, unitile de disc pentru scrierea i testarea programelor i transferarea fiierelor prin legtura seriala spre sistemul inta care conine microcontrolerul pe care l testam. Proiectarea i testarea. Pentru a alege un microcontroler din marea varietate de microcontrolere existente pe pia trebuie inut cont de cteva caracteristici importante ale acestora: - Numrul de bii pe care l poate procesa simultan, numrul mai mare de bii indicnd un cip mai rapid i mai puternic. Circuitele de 8 bii sunt foarte populare dar exista i circuite de 4, 16, 32 bii. - Consumul de putere este important mai ales n cazul sistemelor alimentate de la baterie. Circuitele realizate n tehnologie CMOS au un consum mai redus de putere. Multe din dispozitivele CMOS au un mod special de "ateptare" (stanby sau sleep) care limiteaz consumul de curent la civa miliamperi cnd circuitul este inactiv. Utiliznd acest mod un nregistrator de date i poate reduce consumul de putere intre doua eantioane i poate sa porneasc automat cnd este timpul pentru o noua nregistrare. De exemplu versiunea CMOS a microcontrolerului 8052 are un consum maxim de curent de 30 mA n comparaie cu acelai circuit realizat n varianta NMOS care are un consum de 175 mA. - Toate microctrolerele au un set de instruciuni care consta din cuvinte binare care determina CPU sa execute operaii specifice. De exemplu 0010 0110 determina ca 8052 sa adune coninutul a doua locaii. Aceste instruciuni n binar se numesc i coduri de operaii sau opcoduri. Acestea executa operaii de baza cum ar fi adunarea, scderea, operaii logice, copieri de date i controlul salturilor n program. Circuitele de control adesea necesita citirea sau schimbarea unor bii de intrare sau ieire i nu a unui byte ntreg. Multe microcontrolere includ coduri de operaii pentru manipularea biilor, care permit tergerea, compararea, copierea sau alte operaii logice cu un singur bit. - Un alt considerent n proiectarea circuitelor cu microcontrolere este modul de memorare a programului. Dintre modalitile de memorare amintim memoriile EPROM, EEPROM, ROM, NVRAM (nonvolatile RAM), i Flash EPROM. Memoria de program poate fi n chipul microcontrolerului sau intr-o componenta separata. 8052 folosete doua tipuri de memorie de program, o memorie ROM pe chip de 8K (8Kilobyte) care pstreaz interpretorul BASIC-52 i o memorie externa de tip EPROM, EEPROM sau NVRAM pentru programele scrise de utilizator. Alte tipuri de memorii sunt cele pentru pstrarea datelor temporare i de obicei acestea sunt pstrate n memorii de tip RAM. Majoritatea microcontrolerelor includ o memorie RAM de cteva sute de octei( 256) - Opiuni de intrare/ieire. Majoritatea sistemelor necesita interfee cu senzori, tastatura, comutatoare, relee, i monitoare. In general microcontroloarele au porturi pentru interfaarea cu lumea exterioara. 8052 folosete multe din porturile sale pentru accesarea memoriei

  • externe i realizarea altor funcii speciale dar civa bii ai porturilor sunt disponibile pentru aplicaiile utilizatorului i se poate creste numrul intrrilor i ieirilor prin adugarea de circuite. Scrierea programului

    Exista mai multe opiuni pentru scrierea programului de control al aplicaiei i anume cod maina, limbaj de asamblare, sau limbaje de nivel nalt, n funcie de viteza de execuie dorita lungimea programului buget disponibil etc. - Forma de program fundamentala este codul main, adic instruciuni binare care determina CPU sa execute operaiile dorite de utilizator. - Limbajul de asamblare. Un pas n fa de la limbajul n cod maina este limbajul de asamblare care utilizeaz abreviaiile numite mnemonici. Mnemonicile sunt mai uor de reinut dect codul maina pe care l nlocuiesc. De exemplu CLR C nseamn terge bitul de transport i este mai uor de memorat dect codul binar 11000011. Deoarece codul maina este limbajul pe care CPU l nelege este nevoie de o cale de a traduce din limbaj de asamblare n cod maina. Pentru programe scurte se poate face manual. O alta opiune este folosirea unui asamblor care este un soft ce ruleaz pe calculatorul de birou i traduce mnemonicile n cod maina. - Limbaje de nivel nalt. Un dezavantaj al limbajului de asamblare este faptul ca fiecare dispozitiv are setul lui de mnemonici deci utilizatorul trebuie sa nvee un nou set de mnemonici pentru fiecare familie cu care lucreaz. Pentru a evita aceasta problema limbajele de nivel nalt ca C, Pasca, Fortran, Forth, i BASIC urmeaz o sintaxa standard deci programele scrise pentru un dispozitiv pot fi trecute pe un altul. Ideea este c fcnd schimbri minore se poate utiliza un limbaj ca BASIC pentru a scrie programe pentru diferite dispozitive. In realitate fiecare limbaj tinde sa dezvolte multe dialecte diferite n funcie de cip i de preferinele celui care creeaz limbajul, deci trecerea unui program de la un dispozitiv la altul nu este ntotdeauna lipsita de efort. Dar exista multe asemnri ntre dialectele aceleai limbi deci un dialect nou este mai uor de nvat ca un limbaj nou. Limbajele de nivel nalt de asemenea simplifica programarea permind scrierea intr-un rnd sau n cteva rnduri a ceea ce ar necesita multe linii n de program limbaj de asamblare. - Interpretoare i compilatoare sunt doua forme ale limbajelor de nivel nalt. Un interpretor traduce un program n code main de fiecare data cnd un program ruleaz, n timp ce un compilator traduce odat crend un program nou executabil pe care calculatorul l ruleaz direct fr a-l mai traduce. Ca o regula, un interpretor este foarte convenabil pentru programe scurte unde viteza de execuie nu este critica. Programul poate fi rulat imediat ce a fost scris ne fiind necesara o compilare sau asamblare. Un compilator este o alegere buna cnd programul este lung sau trebuie executat repede. Un singur limbaj ca de exemplu BASIC este disponibil n ambele versiuni. Fiecare familie de dispozitive necesita propriul lui interpretor sau compilator pentru a traduce codurile de nivel nalt n cod main pentru acest dispozitiv. Cu alte cuvinte nu se poate utiliza QuickBASIC al calculatoarelor IBM, pentru a programa un microcontroler 8051, ci este nevoie de un compilator care genereaz codurile program pentru 8051. Comparnd un program compilat cu unul scris n limbaj de asamblare, primul este mai mare i mai lent, deci limbajul de asamblare este calea de urmat daca un program trebuie sa fie cat mai mic i mai rapid. Un limbaj de nivel nalt de asemenea poate sa nu ofere toate

  • posibilitile limbajului de asamblare, dar acest inconvenient poate fi nlturat apelnd subrutine scrise n limbaj de asamblare cnd este necesar. Testarea i depanarea Dup scrierea programului urmeaz testarea i daca este necesara corectarea greelilor. Exista mai multe metode de testare:

    - Sistem de dezvoltare. Un sistem de dezvoltare tipic consta dintr-un program de monitorizare care este pstrat intr-un EPROM sau alt tip de memorie n sistemul cu microcontroler, i o legtur seriala cu un calculator personal. Folosind abilitile programului monitor se poate ncrca programul scris pe calculatorul personal intr-o memorie RAM (in locul memoriei permanente EPROM) din sistemul cu microcontroler, apoi rularea programului i modificarea daca este necesara pana cnd programul lucreaz normal. Majoritatea sistemelor de dezvoltare permit rularea pas cu pas setarea punctelor de ntrerupere, vizualizarea sin schimbarea datelor din memorie. In modul pas cu pas programul executa un singur pas i se oprete dup fiecare pas deci se poate monitoriza mai uor ce face circuitul la fiecare pas. Un punct de ntrerupere este o locaie n program unde execuia programului se oprete i ateapt o comanda pentru a continua. La orice punct de ntrerupere se poate vedea i schimba coninutul memoriei sau se pot realiza alte teste. - Simulatoare. Este un soft care ruleaz pe un calculator personal i utilizeaz monitorul pentru a demonstra ce se poate ntmpla intr-un microprocesor sau microcontroler la rularea programului. Se poate "vedea" n interiorul cipului simulat, se poate observa coninutul memoriei interne, se poate rula pas cu pas i se pot seta puncte de ntrerupere. In acest mod se poate realiza un program nainte de a-l ncrca n EPROM. Un dezavantaj al simulatoarelor este ca nu pot mima toate facilitile cipului mai ales rspunsul la ntreruperi i caracteristicile temporale.

    - Emulatoarele. Sunt dispozitive hard care nlocuiesc microprocesorul n chestiune

    prin introducere n soclul microprocesorului din dispozitivul de testat. Ca i simulatoarele permit controlul execuiei programului i monitorizarea a ceea ce se ntmpl la fiecare pas al programului. Emulatoarele de microprocesoare sunt n general scumpe.

  • Capitolul II Familia de microcontrolere 8051

    La baza familiei 8051 st microcontrolerul 8051 introdus de firma Intel Corporation in 1980. De atunci microcontrolerele familiei 8051 au fost folosite ca element de baza a mii de produse. Multe alte companii printre care Philips, Siemens, Dallas Semiconductors, OKI, Fujitsu si Harris-Matra produc acum componentele familiei 8051. Unele companii au extins aria de componente a familiei 8051 adugnd componente cu nsuiri suplimentare.

    Microcontrolerul Memoria de program RAM (octei) Timere Tip Kilo octei 8051 ROM 4 128 2 8052 ROM 8 256 3 8031 - - 128 2 8032 - - 256 3 8751 EPROM 4 128 2 8752 EPROM 8 256 3

    Tabelul 2.1

    80C51, 80C52, 80C31, i aa mai departe sunt variantele CMOS a celor de mai sus. 80C51FA/B/C au timere mai versatile i canale seriale dezvoltate. 8052-BASIC are limbajul BASIC-52 n ROM. Capsulele sunt DIP de 40 pini, 40-lead PLCC, i QFP 44 pini.

    Tabelul 2.1 prezint diferenele dintre componentele familiei 8051. De exemplu 8052

    este un 8051 mai dezvoltat cu un extra timer i cu mai mult ROM i RAM. Microcontrolerele 8031 si 8032 sunt identice cu 8051 i 8052 exceptnd faptul ca aria de ROM este neutilizat i programul trebuie pstrat ntr-o memorie extern EPROM sau de alt tip. De asemenea MCU sunt disponibile in varianta NMOS i CMOS. Figura 2.2 prezint configuraia pinilor pentru 8051 n capsula DIP

    Figura 2.2

  • Elementele principale ale microcontrolerului 8051. Microcontrolerul 8051 este un circuit integrat MOS care cuprinde n structura sa, figura 2.3, componentele tipice ale unui sistem cu microprocesor: - unitate aritmetic i logic, UAL, de 8 bii, care poate executa operaii de adunare, scdere, nmulire, mprire, incrementare, decrementare, I, SAU, SAU-EXCLUSIV, completare i rotire; - memorie de program de tip ROM, 4 Koctei; - memorie de date de tip RAM, 128 octei;

    - patru porturi paralele de intrare/ieire P0 P3 de cte 8 bii; - un port serial duplex; - dou circuite numrtoare/temporizatoare N/T0, N/T1 de cte 16 bii; - logic de control ntreruperi cu cinci surse; - generator de tact, 12 MHz. Microcontrolerul 8051 are posibilitatea de adresare a unei memorii externe de program

    i a unei memorii externe de date, ambele avnd capacitatea maxim de 64 Koctei. Adresarea memoriilor externe se realizeaz prin amplificatoarele de magistral ale porturilor P0 i P2, iar transferul datelor prin amplificatorul de magistral al portului P0. Portul P3 poate fi programat astfel nct liniile amplificatorului de magistral al portului P3 s poat fi utilizate pentru: comunicaie serial RXD, TXD; cereri de ntrerupere externe /INTO, /INT1; intrri de numrare T0,T1; ieiri de control /WR i /RD.

    Figura 2.3

    CPU sau Central Processing Unit, (UCP sau unitatea central de prelucrare), execut instruciunile programului. Tipurile de instruciuni sunt: aritmetice (adunare, scdere), logice (SI, SAU, NU), transfer de date (move) i salturi n program (program branching). Un cristal extern furnizeaz o referin de timp pentru ceasul CPU. Memoria Microcontrolerul 8051 are urmtoarele tipuri de memorie: memoria intern (On-Chip Memory), memoria extern de program (External Code Memory) i memoria extern de date (External RAM), cum se vede n figura 2.4.

  • Figura 2.4

    Memoria intern (On-Chip Memory) reprezint totalitatea memoriilor care exist n

    mod fizic pe cipul microcontrolerului i ea poate fi de mai multe feluri: memorie de program (code), memorie de date (RAM), i registre cu funcii speciale (SFR).

    Memoria externa de program (External Code Memory) este memoria de program care se gsete in afara cipului i ea este de obicei de tip EPROM.

    Memoria de date extern (External RAM) este memoria RAM extern de date i poate fi un RAM static obinuit sau un flash RAM. Deoarece memoria este plasat n afara cipului, nu este att de flexibil din punct de vedere al accesibilitii i de asemenea este mai lent. De exemplu pentru incrementarea cu unu a locaiei de memorie, o memorie intern necesit o instrucie i un ciclu de instrucie, n timp ce o memorie extern necesit 4 instrucii i 7 cicluri de instrucie deci este de 7 ori mai lent. Dar ceea ce memoria RAM extern pierde n vitez i flexibilitate ctig n mrime. n timp ce o memorie RAM intern este limitat la 128 bytes (256 pentru 8052) cea extern poate fi pn la 64K. Porturi de intrare/ieire (I/E sau I/O) permit scrierea sau citirea n memoriile externe i alte componente. 8051 are patru porturi I/E de cte 8 bii (P0-P3). Dup cum le spune i numele porturile pot fi citite i se poate scrie n ele. Muli dintre biii porturilor au funcii opionale alternative legate de accesarea memoriei externe, utilizarea blocului timer/counter de pe cip, determinarea ntreruperilor externe, i controlul comunicaiei seriale. Temporizatoare i numrtoare. Microcontrolerul 8051 are dou numrtoare/temporizatoare de 16 bii iar 8052 trei, care permit generarea uoar a unor semnale periodice sau numrarea (contorizarea) tranziiilor unui semnal. Timerul 0 comand un ceas de timp real care se incrementeaz la fiecare 5 milisecunde. Se poate folosi acest ceas pentru a msura evenimente sau ca baz pentru un ceas sau calendar. Timerul 1 are multiple ntrebuinri n BASIC-52 printre care controlul unei ieiri PWM (pulse width modulation), scrierea la o imprimant serie sau alte periferice seriale(LPT ?) i generarea de impulsuri pentru programarea EPROM-ului (/PGM PULSE). Timerul 2 folosete la comunicaia seriala. Daca nu se utilizeaz funciile opionale ale timerelor ele se pot programa pentru alte aplicaii. n completare la funciile de temporizare la care timerele incrementeaz la momente date (predefinite) se pot utiliza si pentru msurarea duratei evenimentelor cnd timerul incrementeaz la un semnal extern de declanare i msurarea timpului dintre semnalele de declanare. Dac se folosesc timerele pentru msurarea duratei evenimentelor, T2, T2(EX), T0 i T1 detecteaz tranziiile care trebuiesc msurate. Portul serial. Portul serial se ocup de multe din detaliile ale comunicaiei serie. Pe partea de transmisie portul serial transform octeii pentru a fi transmii in mod serie adugnd biii de

  • start i stop i scriind datele ntr-o secven ? (timed sequence) la SER OUT. Pe partea de recepie portul de recepie accept date serie la intrarea SER IN i seteaz un flag pentru a indica c un octet a fost recepionat. ntreruperi externe. /INT0 i /INT1 sunt intrri de ntreruperi externe, care detecteaz nivele logice sau tranziii care ntrerup CPU i provoac saltul la o locaie de program prestabilit. BASIC-52 folosete /INT0 pentru funcia lui opional de acces direct la memorie (DMA). Intrri de control suplimentare. Trebuiesc menionate dou intrri de control suplimentare: RESET a crei stare unu logic determina resetarea cipului i nceperea execuiei programului de la 0 n memoria de program. /EA (external memory access) determin care dintre cele dou memorii de program cea intern sau cea extern va fi accesat. Conexiunile de alimentare. Exist doi pini de alimentare unul la +5 voli (VCC) i altul la mas (VSS). Figura 2.5 prezint structura detailat a microcontrolerului 8051.

    Fig.2.5.

  • Organizarea memoriei Familia de microcontrolere 8051 are spaii de adres diferite pentru memoria de date si de program, aa cum se poate vedea si din figurile 2.3 i 2.6.

    Figura2.6

    Separarea logic a memoriei de date i de program permite accesarea memoriei de

    date cu adrese de 8 bii, care pot fi uor pstrate i manipulate de un CPU de 8 bii, dar exist i posibilitatea generrii de adrese de 16 bii prin intermediul registrului DPTR.

    Pentru a nelege modul de operare a semnalelor de control este important de tiut cte ceva despre modul cum 8051 face distincia dintre cele dou tipuri de memorie: de date i de program. Folosind semnale de control diferite pentru fiecare tip de memorie 8051 poate accesa doua arii de memorie separate de cte 64K, fiecare cu adresa de la 0000h la FFFFh i fiecare utiliznd aceleai linii de date i de adrese.

    8051 acceseaz memoria de program cnd execut un program n limbaj asamblor sau o subrutin. Memoria de program este de tipul numai citire. Singurele instruciuni care acceseaz memoria de program sunt cele de citire. Memoria de program este destinat pentru programe sau subrutine care au fost n prealabil programate n ROM sau EPROM. 8051 folosete semnalul /PSEN cnd acceseaz memoria de cod (program) extern. Accesarea memoriei de program interne nu utilizeaz semnalul /PSEN sau alt semnal de control extern.

    Memoria de date este de tipul citire/scriere, de obicei RAM. Instruciunile care citesc memoria folosesc /RD iar instruciunile care scriu date n memorie folosesc /WR. Termenul memorie de date poate fi neles greit deoarece ea poate s pstreze orice informaie care este accesat cu instruciuni care folosesc /RD sau /WR.

    Dac nu este nevoie de ntreg spaiul de memorie disponibil se pot combina cele dou tipuri de memorie ntr-o singur arie. n acest caz /WR controleaz operaiile de scriere i /PSEN i /RD sunt conectate printr-un I logic pentru a crea un semnal de citire care este activ cnd /PSEN sau /RD sunt la nivel logic zero. Combinarea memoriei de date i program externe este avantajoas dac de exemplu se dorete ncrcarea rutinelor n limbaj asamblor n RAM pentru testare.

    Ultimul semnal de control pentru accesarea memoriei externe este ALE. El controleaz un tampon extern care memoreaz octetul inferior de adres n timpul accesrii memoriei. Cnd 8051 citete sau scrie n memoria extern, el plaseaz octetul inferior de

  • adres pe liniile AD0-AD7 i activeaz ALE, care comand latchul (circuitul de tampon) extern s pstreze octetul inferior de adres pe tot timpul ciclului de citire sau scriere. Dup o mic ntrziere 8051 nlocuiete adresele de pe AD0-AD7 cu datele care trebuiesc scrise sau citite. Memoria de program (Code memory) este memoria care pstreaz programul care trebuie executat. Aceast memorie este limitat la 64K i este de diferite tipuri i mrimi:

    - Memorie de program intern sau on-chip care poate fi ROM sau EPROM, - Memorie de program extern sau off-chip, tot de tipul ROM sau mai des EPROM,

    eventual flash RAM. Exist multe combinaii ale acestor tipuri de memorie de exemplu o combinaie

    posibil este de a avea o memorie de program intern de 4K i o memorie de program extern de 64K.

    Cnd programul este pstrat n memoria intern capacitatea maxim de 64K este redus de obicei la 4k, 8k sau 16k n funcie de cipul folosit. De obicei memoria de program este implementat ca o memorie extern de tipul EPROM mai ales n cazul sistemelor de dezvoltare de cost sczut.

    Figura 2.7 prezint harta adreselor inferioare a memoriei de program

    Figura 2.7

    Dup reset CPU ncepe execuia programului de la adresa 0000h. Dup cum se poate

    vedea din figura 2.7 fiecarei ntrerupere i este ataat o locaie n memoria de program. ntreruperea comand CPU s fac un salt la aceea locaie unde ncepe execuia rutinei de dervire. ntreruperea extern 0 de exemplu este ataat locaiei 0003h. Dac se dorete folosirea ntreruperii externe 0 este nevoie ca rutina ei de deservire s nceap la locaia 0003h. Locaia serviciilor de ntrerupere sunt plasate la intervale de 8 octei: 0003h pentru ntreruperea extern 0, 0013h pentru ntreruperea extern 1, 001Bh pentru timerul 1, etc. Dac rutina de deservire a ntreruperii este suficient de scurt (cum se ntmpl adesea) ea poate fi plasat n ntregime n acest interval.

    Cei 4k octei inferiori ai memoriei de program pot fi plasai sau pe cip sau n ROM-ul extern. Aceast selecie este fcut prin legarea pinului /EA (Extrenal Access) la Vcc sau Vss. Dac pinul /EA al lui 80C51 este legat la Vcc atunci adresrile programului de la 0000h la 0FFFh sunt direcionate la ROM-ul intern, iar cele de la 1000h la FFFFh sunt direcionate la ROM-ul extern. Dac /EA este legat la Vss, atunci toate apelurile (fetches) programului sunt direcionate spre ROM-ul extern. Microcontrolerele care nu au ROM intern (8031, 80C31, etc) trebuie s aib acest pin legat la Vss pentru a putea executa programul din memoria extern. Configuraia hardware pentru execuia programului din memoria extern este prezentat n figura 2.8. De notat c 16 linii de I/E (porturile P0 i P2) sunt dedicate funciei

  • de magistral pe durata accesrii memoriei de program externe. Adresele memoriei de program sunt ntotdeauna de 16 bii chiar dac memoria utilizat este mai mic de 64koctei.

    Figura 2.8

    Accesarea memoriei externe folosete porturile P0 i P2 n totalitate i biii 6 i 7 ai

    portului P3 prin care circul date, adrese, si semnale de control pentru a citi si scrie din i n memoria extern.

    Pe perioada unei accesri a memoriei cei 8 pini ai portului P0 (AD0-AD7) mai nti conin biii mai puini semnificativi ai adresei urmate de datele de citit sau scris. Aceast metod de a transmite att adrese ct i date pe aceleai linii de semnal se numete multiplexed address/data bus (magistral de date i semnal multiplexat). Este o metod rspndit pe care multe dispozitive o ntrebuineaz, deoarece ea necesit un cip cu mai puini pini. Cele 8 linii ale portului P2 conin biii mai semnificativi ai adresei (A8-A15) la care dorim s scriem sau de la care dorim s citim. mpreun cei 16 bii de adres pot accesa 64 kB (65536 bytes) de memorie de la 000000000 00000000 la 11111111 11111111 n binar, sau de la 0000h la FFFFh in hexazecimal.

    Pe lng faptul c pe pini apar date i adrese de asemenea trebuie s furnizeze i semnale de control pentru iniierea operaiilor de citire i scriere, ca de exemplu /WR (write), /RD (read), /PSEN (program store enable), i ALE (address latch enable). Unele din liniile de adres pot funciona de asemenea ca semnale de control care ajut la selectarea unui cip n timpul accesrii memoriei. Memoria de date

    Organizarea memoriei de date interne a microcontrolerului 8051 est prezentat n

    figura 2.9. Fiind o memorie intern ea este cea mai rapid i flexibil. Este o memorie de tip RAM deci volatil.

    Figura 2.9

  • Exist deci 3 zone de memorie numite n general Lower 128, Upper 128 i spaiul registrelor cu funcii speciale (SFR). Adresele memoriei interne de date sunt pe 8 bii deci exist un spaiu de adresare de numai 256 octei, dar se poate mri acest spaiu la 384 octei utiliznd un mic artificiu. Adresarea direct a spaiului mai mare dect 7Fh acceseaz un spaiu de memorie (SFR) iar prin adresare indirect se acceseaz alt spaiu de memorie (Upper 128). Lower 128. Aceast memorie de 128 bytes este subdivizat aa cum se vede i din harta memoriei (Figura 2.10). Primii 8 bytes (00h-07h) formeaz bancul 0 al grupului de registre R0-R7.

    Figura 2.10

    Se precizeaz c, dup iniializarea microcontrolerului, grupul de registre R0R7 este identificat din punct de vedere fizic cu locaiile de la adresele 007h ale memoriei de date interne. Exist posibilitatea ca prin programarea biilor RS1 i RS0 ai registrului de stare a programului PSW, grupul de registre R0R7 s fie identificat cu alte locaii ale memoriei de date interne, conform tabelului 2.11.

    PSW 4 RS1

    PSW 3 RS0

    Adresele pentru registrele R0R7

    0 0 00h07h 0 1 08h0Fh 1 0 10h17h 1 1 18h1Fh

    Tabelul 2.11

    Aceste registre se folosesc n general pentru manipularea datelor dintr-o locaie de memorie n alta. De exemplu pentru a aduna valoare registrului R4 la acumulator vom executa urmtoarea instruciune: ADD A,R4

  • Dup cum se poate vedea din figura 2.10 adresa registrului R4 este 04h deci instruciunea anterioar este identic cu: ADD A,04h Aceast instruciune adun valoarea gsit n memoria intern la adresa 04h la valoarea acumulatorului lsnd rezultatul n acumulator. Dac ns programul instruiete 8051 s foloseasc alt banc de registre de exemplu bancul 3 registrul R4 va fi sinonim cu adresa 1Ch. Locaiile memoriei din spaiul de adresare 20h2Fh reprezint o zon de memorie adresabil la nivel de bit. Astfel, exist instruciuni care utilizeaz operanzi surs i/sau destinaie biii din zona de memorie precizat mai sus, i cei 128 bii din aceast zon pot fi direct adresate de aceste instruciuni. Adresele biilor din aceast zon este cuprins ntre 00h i 7Fh. Utilizatorul poate accesa aceti bii prin comenzi ca de exemplu SETB sau CLR. De exemplu pentru a seta bitul 24 (hexa) la 1 trebuie executat urmtoare insrtruciune: SETB 24h Este important de reinut c memoria de bit este ntr-adevr parte a memoriei RAM interne. De fapt cei 128 bii ocup 16 octei ai memoriei interne RAM de la adresa 20h la 2Fh. Deci dac se nscrie valoare FFh la dresa 20h de fapt se seteaz biii de la 00h la 07h, deci: MOV 20h,#0FFh Este echivalent cu: SETB 00h SETB 01h SETB 02h SETB 03h SETB 04h SETB 05h SETB 06h SETB 07h Exist posibilitatea de accesare la nivel de bit i a unor bii din registrele cu funcii speciale (SFR) din intervalul 80h-FFh. De exemplu dac liniile de ieire P0.0 la P0.7 sunt 0 i se dorete punerea lui P0.0 la 1 atunci se pot executa comenzile: MOV P0,#01h sau: SETB 80h Ambele au acelai efect asupra ieirii P0.0 dar SETB va pune la 1 numai ieirea P0.0 n timp ce comanda MOV va pune la 1 toate liniile porii P0 ceea ce n anumite cazuri nu este acceptabil. Urmtorii 80 de bytes ai memoriei interne RAM de la adresa 30h la 7Fh poate fi utilizat variabilele utilizatorului care trebuiesc accesate frecvent sau la o vitez ridicat. Aceast zon este de asemenea utilizat de microcontroler ca stiv. Implicit 8051 iniializeaz indicatorul de stiva (SP sau Stack Pointer) la 08h. Dac se utilizeaz un alt banc de regitrii dect bancul 0 atunci indicatorul de stiv trebuie iniializat la adresa imediat superioar bancului de regitrii ce va fi utilizat altfel stiva va scrie peste coninutul bancului de regitrii. n mod similar dac se utilizeaz zona de memorie adresabil la nivel de bit, este o idee bun s se iniializeze indicatorul de stiv la o adres mai mare dect 2Fh pentru a pentru a o proteja de stiv. Acest fapt limiteaz stiva microcontrolerului 8051 deoarece aria rezervat stivei este de doar 80 bytes i de obicei chiar mai puin avnd n vedere c acest spaiu trebuie mprit ntre stiv i variabilele utilizatorului. Toi octeii din zona 00h la 7Fh numit i Lower 128 (celor 128 de octei inferiori) pot fi accesai fie prin adresare direct fie indirect. Zona Upper 128 (celor 128 octei superiori) poate fi accesat doar prin adresare indirect.

  • Registrele cu funcii speciale (Special Function Register) este zona de memorie care controleaz funcii specifice ale microcontrolerului 8051. De exemplu 4 SFR permit accesarea celor 32 de linii intrare/ieire ale lui 8051. Un alt SFR permite programului s scrie sau s citeasc portul serial, un altul permite utilizatorului s seteze rata de transmisie serial (serial baude rate) n timp ce altele controleaz i acceseaz timerele i configureaz sistemul de ntreruperi. La programare SFR creeaz impresia unei memorii interne de date. De exemplu dac dorim s nscriem valoarea 1 n memoria RAM intern la locaia 50h se va executa instruciunea: MOV 50h,#01h n mod similar dac dorim s scriem valoarea 1 la portul serial a lui 8051, trebuie s scriem aceast valoare la registrul cu funcii speciale SBUF, care se afl la adresa 99h. Cu alte cuvinte: MOV 99h,#01h Dup cum se poate vedea s-ar prea c SFR este o parte a memoriei interne. Dar nu aceasta este situaia. Cnd se folosete aceast metod de accesare a memoriei, numit adresare direct, orice instruciune care are o adres cuprins ntre 00h i 7Fh se refer la memoria RAM intern i orice instruciune cu adres ntre 80h i FFh se refer la un SFR. Fiecare SFR are o adres (80h-FFh) i un nume. Urmtorul tabel prezint adresa i numele registrelor cu funcii speciale ale microcontrolerului 8051:

    Tabelul 2.12

    Cu toate c domeniul de adrese de la 80h la FFh permite existena a 128 de adrese, exist doar 21 de SFR ntr-un 8051 standard. Toate celelalte adrese sunt considerate invalide. Scrierea la aceste adrese nu are nici un efect, iar datele citite de la aceste adrese vor fi n general aleatoare. Tipuri de SFR Cum se poate vedea i din tabel SFR care au fondul albastru sunt SFR legate de porturile de I/E. 8051 are patru porturi de I/E de 8 bii deci un total de 32 linii de I/E. Cele pe fond galben controleaz modul de funcionare i configurarea microcontrolerului. De exemplu TCON controleaz timerele, SCON controleaz portul serial.

  • Celelalte SFR, pe fond verde, se pot considera auxiliare n sensul c nu controleaz n mod direct configurarea lui 8051 dar bineneles 8051 nu poate funciona fr ele. De exemplu odat ce portul serial a fost configurat utiliznd SCON, programul poate citi sau scrie la portul serial utiliznd registrul SBUF. SFR a cror adres este divizibil cu 8 pot fi accesate cu operaii ce privesc biii, (de exemplu folosind instruciunile SETB sau CLR), ceilali nu.

    ACC - registru acumulator (8 bii) Aa cum i sugereaz i numele acumulatorul este un registru de uz general care acumuleaz rezultatele unui mare numr de operaii. Poate pstra un numr de 8 bii i este cel mai versatil registru al lui 8051. Mai mult de jumtate din cele 255 de instruciuni ale lui 8051 utilizeaz ntr-un mod sau altul acumulatorul. Registrul acumulator se utilizeaz pentru surs i destinaie, prin adresare implicit, n multe instruciuni aritmetice i logice. De exemplu n instruciunea ADD A, #data acumulatorul d un operand surs i este destinaia rezultatului prin adresare implicit. Odat nscris o valoare n acumulator ea poate fi procesat n continuare sau pstrat n alt registru sau n memorie.

    B-registru (8 bii) Registrul B este similar acumulatorului. Se utilizeaz pentru 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 - DPL/DPH (Data Pointer Low/High, adresa 82h/83h) registru indicator de date (16 bii) compus din DPH (8 bii) i DPL (8bii) DPL i DPH lucreaz mpreun i reprezint o valoare de 16 bii numit Data Pointer folosit n operaiile ce privesc memoria RAM extern i anumite instruciuni care implic memoria de program. Deoarece este un numr ntreg de doi octei fr semn poate reprezenta valori de la 0000h la FFFFh ( sau de la 0 la 65.535 n zecimal). 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 - (Stack Pointer, adresa 81h): registru indicator de stiv(8 bii) Stiva necesar funcionrii microcontrolerului 8051 este organizat n memoria intern de date. La scrierea unui octet n memoria stiv, coninutul registrului SP se incrementeaz cu o unitate. Dac se nscrie o valoare n stiv atunci acesta va fi scris la adresa SP+1. Altfel spus dac SP are valoare a07h o instruciune PUSH va nscrie valoarea la adresa 08h. Acest SFR este modificat de toate instruciunile care modific stiva ca de exemplu PUSH, POP, LCALL, RET, RETI, i ori de cte ori apar ntreruperi. La pornire SP este iniializat la 07h. Aceasta nseamn c stiva va ncepe la 08h i se va extinde n RAM-ul intern i deoarece bancurile de regitrii 1-3 ca i zona adresabil la nivel de bit ocup RAM-ul intern de la adresa 08h la 2Fh, este necesar s iniializm SP la o valoare mai mare dac se vor utiliza bancurile de regitrii alternativi sau/i memoria de bit. PSW - registru de stare a programului(registru cu indicatorii de condiii)(8 bii) n cele ce urmeaz se prezint semnificaiile i modurile de poziionare a biilor indicatori de condiii. Indicatorul de transport C (PSW.7) se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni de adunare care a produs transport din poziia bitului cel mai semnificativ al rezultatului i n urma execuiei unei instruciuni de scdere care a necesitat mprumut n

  • poziia bitului cel mai semnificativ al desczutului. Dac execuia n instruciuni de adunare/scdere nu produce transport/imprumut, indicatorul C se poziioneaz la nivel logic 0. Rezult c bitul C indic, la nivel logic 1 depirea domeniului de valori (0-255) corespunztor codului binar natural cu operanzi octei (sum mai mare dect 255, respectiv diferen mai mic dect 0). Astfel, indicatorul C este utilizat pentru aplicaii n aritmetic cu operanzi fr semn. n cele prezentate mai sus indicatorul C este operand destinaie pentru instruciunile de adunare i scdere. n plus, indicatorul C este utilizat ca operand surs i/sau destinaie n instruciuni aritmetice, logice i de transfer al controlului, ca de exemplu : ADDC A, direct; ANL C, bit; RLC A i JC rel. Indicatorul de transport auxiliar AC (PSW.6) se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni de adunare care a produs transport din poziia bitului 3 al rezultatului i n urma execuiei unei instruciuni de scdere care a necesitat mprumut n poziia bitului 3 al desczutului. Dac execuia unei instruciuni de adunare/scdere nu produce transport/mprumut din/n poziia bitului 3, indicatorul AC se poziioneaz la nivel logic 0.Indicatorul de transport auxiliar se utilizeaz pentru aplicaii n aritmetic cu operanzi n form zecimal codat binar, BCD preciznd un transport/mprumut ntre cele dou grupe de 4 bii ale unui octet reprezentnd dou ranguri zecimal. Indicatorul de depire OV (PSW.2) se poziioneaz la nivel 1 n urma execuiei unei instruciuni de adunare dac n formarea rezultatului s-a produs un transport din poziia bitului 6 i nu s-a produs un transport din poziia bitului 7, sau invers i n urma execuiei unei instruciuni de scdere care a necesitat un mprumut n poziia bitului 6al desczutului i nu a necesitat un mprumut n poziia bitului 7 sau invers. n caz contrar indicatorul OV este poziionat la nivel logic 0.Astfel, la nivel logic 1,bitul OV indic depirea domeniului de valori (-128 --127) corespunztor codului complementului doi, CCD, cu operanzi octei. Indicatorul OV se utilizeaz pentru aplicaii cu operanzi n CCD. Indicatorul de paritate P (PSW.0) conine suma modulo 2 a biilor registrului acumulator, deci, la nivel logic 1, indic un numr impar de bii cu nivel logic 1 n acumulator.Bitul P nu este modificat de o instruciune de scriere n registrul PSW, indicnd n permanen paritatea biilor acumulatorului. Ceilali bii ai registrului PSW sunt:FO (PSW.5) disponibil pentru uz general; (PSW.1) rezervat pentru dezvoltri; RS1,RS0,(PSW.4,PSW.3) utilizai pentru selecia grupului de registre R0R7. PO (Port 0, adresa 80h, adresabil la nivel de bit): Este portul de I/E 0. Fiecare bit al acestui SFR corespunde unui pin a microcontrolerului. De exemplu bitul 0 al portului 0 este pinul P0.0, bitul 7 este pinul P0.7. Scrierea unui 1 ntr-un bit al acestui SFR va duce la trecerea pinului corespunztor de I/E la valoarea 1. Deoarece porturile P0 i P2 sunt folosite pentru adresarea memoriei externe doar P1 i P3 rmn accesibile pentru utilizator. PCON (Power Control, adresa 87h) este utilizat pentru a controla modurile de control al puterii al lui 8051. Anumite moduri de operare ale lui 8051 permit trecerea lui n modul sleep mod care necesit un consum de putere mult mai mic. Adiional unul din biii PCON este utilizat pentru a dubla rata de transfer (baud rate) a portului serial al microcontrolerului. TCON (Timer Control, adresa 88h, adresabil la nivel de bit): este folosit pentru a configura i modifica modul n care cei doi timeri ai lui 8051 lucreaz. Celelalte registre interne ale microcontrolerului 8051 i funciile acestora sunt precizate n paragrafele urmtoare.

  • PORTURILE PARALELE ALE MICROCONTROLERULUI 8051 Microcontrolerul 8051 conine patru porturi paralele bidirecionale de cte 8 bii. Fiecare port are un registru intern de 8 bii (P0, P1, P2, P3) i un amplificator de magistral bidirecional. Toate cele patru porturi pot fi utilizate pentru transferul de informaie ntre microcontroler i componentele externe. Prin structura microcontrolerului, porturile parale pot realiza funcii alternative care determin utilizri specifice ale porturilor. Driverele de ieire ale porturilor 0 i 2, i buffer-ele de intrare ale portului 0 sunt folosite pentru accesrile memorie externe. n aceast aplicaie, ieirile portului 0 conin octetului inferior al adresei de memorie extern, multiplexat n timp cu octetul existent de scris sau de citit.

    Ieirile portului 2 corespund octetului superior al adresei memoriei externe cnd adresa este pe 16 bii. n caz contrar pinii portului 2 continu s emit coninutul lui P2-SFR.

    Toi pinii portului 3 sunt multifuncionali, ei pot servi unei game variate de funcii speciale dup cum urmeaz:

    PINUL PORTULUI FUNCII ALTERNATIVE P3.0 RxD (Port pentru intrare serial)

    P3.1 TxD (Port pentru ieire serial)

    P3.2 INT0 (ntrerupere extern)

    P3.3 INT1 (ntrerupere extern)

    P3.4 T0 (Timer/Numrtor 0 intrare extern )

    P3.5 T1 (Timer/Numrtor 1 intrare extern )

    P3.6 WR (Semnal pt. scriere n memoria extern de date)

    P3.7 RD (Semnal pt. citire din memoria extern de date)

    Figura 2.13 prezint structura porilor P0-P3 corespunztoare unui bit. Latch-ul de bit

    (unul din biii registrului cu funcii speciale P0-P4) este reprezentat ca un bistabil de tip D, care va scoate la ieire valoarea prezent pe magistrala intern ca rspuns la semnalul Write to latch (scriere n bistabil) generat de CPU. Nivelul de pe pinul portului este pus pe magistrala intern ca rspuns la semnalul Read pin (citete pin) generat de CPU. Unele instruciuni care citesc un port activeaz semnalul Read latch iar altele semnalul Read pin.

    Dup cum se vede n figura 2.13 driverele de ieire ale porturilor P0 i P2 sunt comutabile la o magistral intern ADDR sau ADDR/DATA prin intermediul unui semnal intern CONTROL pentru accesarea memoriei externe. Pe perioada accesrii memoriei externe SFR corespunztor lui P2 rmne neschimbat, dar cel corespunztor lui P0 urmrete datele scrise n el.

    Dac un bistabil al portului P3 conine un 1, atunci nivelul de ieire este controlat de semnalul alternate output function. Nivelul actual al pinului P3.X este ntotdeauna disponibil la pinul alternate input function.

    Porturile 1, 2 i 3 sunt conectate intern prin intermediul unei rezistene de sarcin la Vcc. Portul P3 este cu drena n gol. Fiecare linie de intrare sau ieire poate fi utilizat independent ca ieire sau intrare. (Porturile P0 i P2 nu pot fi utilizate ca I/E de uz general cnd sunt utilizate ca magistrale de date i adrese n timpul operaiei de accesare a memoriei externe.) Pentru a putea fi utilizat ca intrare bistabilul de bit trebuie s conin un 1 care

  • blocheaz tranzistorul FET de ieire. Atunci n cazul porturilor 1, 2 i 3 pinul de ieire este adus la nivel sus de ctre rezistena de dren i poate fi adus la nivel jos de o surs extern.

    Portul 0 difer prin faptul c ieirea nu este legata intern la plusul alimentrii (deci la 1 logic) n timpul funcionrii normale. Tranzistorul FET care leag ieirea la plus este folosit numai cnd poarta emite 1 n timpul accesrii memoriei externe. Altfel tranzistorul este blocat, deci liniile lui P0 care sunt utilizate ca linii de ieire sunt cu drena n gol. Scrierea unui 1 n bistabil duce la blocarea ambelor tranzistoare FET de ieire, deci ieirea este flotant i poate fi folosit ca o intrare de nalt impedan.

    Deoarece porturile 1, 2, i 3 au legturi interne fixe la plus ele se mai numesc porturi quasi bidirecionale. Cnd sunt configurate ca intrri ele sunt conectate sus i consum curent (IIL n cataloage) cnd sunt legate extern la mas. Portul 0 este considerat cu adevrat bidirecional deoarece cnd este configurat ca intrare pinul este flotant.

    n toate bistabilele porturilor se nscrie un 1 la iniializare sau reset. Dac se nscrie un 0 ntr-un bistabil al unei pori, acesta poate fi reconfigurat prin nscrierea unui 1.

    Se precizeaz c nivelul logic dintr-un bistabil al unui port poate fi diferit de nivelul logic al pinului corespunztor. De exemplu, n cazul portului P1, fig.2.13.b, dac ieirea Q a bistabilului P1.X este la nivel logic 1, tranzistorul T este blocat i nivelul logic al pinului P1.X poate fi comandat de o surs extern. Aceast surs trebuie s poat absorbi la nivel logic 0 un curent de 0,25mA, generat de sarcina activ Rs, care are rolul de-a mri viteza de comutare de la nivel logic 0 la nivel logic 1 la pinul P1.X, ntr-o operaie de ieire, cnd bistabilul P1.X (ieirea Q) comut de la 0 logic la 1 logic. Mrirea vitezei de comutare se obine prin generare de ctre sarcina activ Rs, a unui curent de 30mA, pe durata a dou perioade ale generatorului de tact, ncepnd cu frontul de comutare 01 logic la ieire Q a bistabilului P1.X.

  • Un exemplu de structur a circuitului corespunztor sarcinii active Rs este prezentat n figura 2.14. Tranzistorul T2, de tipul cu canal iniial, genereaz n permanen un curent de 0,25mA. n regim permanent, Q la nivel logic 0 sau 1, tranzistorul T1, de tipul cu canal indus, este blocat deoarece nivelurile logice de la intrrile circuitului SAU-NU sunt complementare. Dup frontul de comutare a semnalului Q de la nivel logic 1 la nivel logic 0, n intervalul corespunztor a dou perioade T0 ale generatorului de tact, intrrile circuitului SAU-NU sunt la nivel logic 0 i tranzistorul T1 genereaz un curent de 30mA. Acest curent mrete viteza de comutare de la nivel logic 0 la nivel logic 1 a semnalului de ieire de la pinul P1.X.

    Portul P3, figura 2.13.b, poate realiza aceleai funcii ca i portul P1 i, n plus, poate fi utilizat pentru funcii alternative de intrare (RXD,/INT0,/INT1,T0,T1) sau de ieire (TXD,/WR,/RD). Pentru realizarea funciei alternative de intrare corespunztoare unui pin P3.X, circuitul, figura 2.13.b, conine amplificatorul repetor a crui ieire este conectat n structura microcontrolerului, n concordan cu funcia alternativ realizat. De asemenea, pentru realizarea funciei alternative de intrare, este necesar blocarea tranzistorului T, care se obine prin niveluri logice 1 la intrrile circuitului I-NU. Astfel, se impune programarea la nivel logic 1 a bistabilului P3.X (Q=1). Cealalt intrare a circuitului I-NU este conectat intern la nivel logic 1 n circuitul corespunztor unui pin P3.X cu funcie alternativ 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(Q=1). n cazul realizri funciei TXD, pinul P3.1, linia de intrare 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.

    Portul P2, are funcia alternativ de transfer al octetului mai semnificativ al adresei n cicluri de extragere coduri instruciuni 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 registrul DPTR. n intervalele corespunztoare ciclurilor prezentate mai sus, linia de comand adresare, figura 8.7, este la nivel logic 1 i impune poziia 1 pentru comutatorul K. Astfel, bitul de adres corespunztor comand ieirea P2.X a portului. De asemenea, nivelul logic 1 de la ieirea circuitului I comand sarcina activ Rs, astfel nct s genereze un curent mai mare dect 0,25mA dac bitul de adres are nivel logic 1. Astfel se asigur comanda corespunztoare a

    Fig.2.14. Structura circuitului sarcinii active Rs.

  • circuitelor de memorie extern. n afara intervalelor corespunztoare ciclurile 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, figura 8.8, este la nivel logic 1 i se impune 1pentru comutatorul K. Astfel, prin liniile portului P0, se poate realiza transferul adresei i datei de ieire sau intrare, prin multiplexare n timp. La ieirea circuitului I, figura 8.8, se obine nivelul logic 1, care deschide tranzistorul Ts n intervalele de transfer bii de adres cu nivel logic 1 sau de ieire bii de date cu nivel logic 1. n afara acestor intervale, tranzistorul Ts este blocat. n ciclurile de acces la memoriile externe, bistabilele(biii) registrului P0 se ncarc cu nivelele logice 1. n afara ciclurilor de acces la memoriilor 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 Ts blocate, Q=1 prin programare).

    ncrcarea i interfaarea porturilor Buferele de ieire ale porturilor 1, 2, i 3 pot fi ncrcate cu 4 sarcini LS TTL. Aceste pori n varianta NMOS pot fi comandate de circuite TTL sau NMOS. Ambele variante de pini pot fi comandate de ieiri cu colectorul n gol sau cu drena n gol dar trebuie reinut c tranziia 0-1 nu va fi rapid. Buferele de ieire al portului 0 pot comanda 8 intrri LS TTL, dar au nevoie de rezistene sarcin externe pentru a comanda intrri NMOS mai puin n cazul n care sunt utilizate ca magistral de ADRESE/DATE pentru memoria extern.

    FUNCIONAREA SINCRONIZAT A MICROCONTROLERULUI 8051 PENTRU EXECUIA INSTRUCIUNILOR I ACCESUL LA MEMORIILE EXTERNE

    Pentru funcionarea sincronizat, microcontrolerul conine un generator de tact, figura 2.2. Semnalul de comand a generatorului de tact este dat de un oscilator cu frecvena f0 =12MHz (valoare tipic). Pentru realizarea oscilatorului, microcontrolerului 8051 conine un circuit inversor (liniar) cu intrarea i ieirea conectate la pini XTAL1 i XTAL2, figura 2.2. Configuraia de oscilator (Pierce) se obine prin conectarea ntre pinii XTAL1 i XTAL2 a unui cristal de cuar sau a unui rezonator ceramic (plus dou condensatoare conectate de la cei doi pini la mas). O alt variant const n utilizarea unui oscilator extern conectat la pinul XTAL2 pentru varianta de microcontroler NMOS, respectiv la pinul XTAL1 pentru varianta CMOS.

    X

    CICLU

    FAZSTAR

    Fig. 2.15. Diagrama de timp a semnalului de tact

    P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1

    S6 S1 S2 S3 S4 S5 S6 S1

  • Funcionarea sincronizat a microcontrolerului pentru execuia instruciunilor se desfoar n faze, stri i cicluri main, figura 2.15. O faz a microcontrolerului corespunde duratei T0 =1/f0 a perioadei oscilatorului de tact. Dou faze succesive, notate cu P1, P2, definesc o stare a microcontrolerului. n general, operaiile aritmetice i logice se efectueaz n fazele P1, ale strilor, iar transferurile ntre registrele interne se efectueaz n fazele P2ale strilor. Un ciclu main se desfoar pe durata a 12 perioade T0 (6 stri) notate S1P1, S1P2, S2P1,, S6P2, figura 2.15. Microcontrolerul 8051 execut o instruciune n 1 sau 2 cicluri main, funcie de tipul instruciuni, cu excepia instruciunilor de multiplicare MUL i divizare DIV care se execut n 4 cicluri main. Execuia unei instruciuni ncepe n faza S1P1 a unui ciclu main, prin extragerea din memoria de 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 2 sau 3 octei, al doilea octet se extragere din memoria de program n starea S4 a aceluiai ciclu main. Rezult c, n funcie de numrul de cuvinte din codul main al unei instruciuni i n funcie de numrul de cicluri main n care se execut, ntr-un ciclu main se pot efectua dou extrageri coduri instruciuni, o extragere sau nici una, conform exemplelor de mai jos: INC A cod main :1 octet Execuie :1 ciclu main S1: extragere cod operaie (PC)+1(PC) S4: _ _ _ (PC)(PC) ADD A, #data cod maina :2 octei execuie :1 ciclu maina

    S1: extragere cod operaie :(PC)+1(PC) S4: extragere octet data :(PC)+1(PC) INC DPTR cod maina 1 octet execuie 2 cicluri maina

    S1: extragere cod operaie :(PC)+1(PC) S4:_ _ _ :(PC)(PC) S1:_ _ _ S4:_ _ _

    In strile S1 si S4 in care nu se efectueaz extrageri coduri instruciuni, coninutul numrtorului de adrese PC nu se incrementeaz. Execuia unei instruciuni se termina in faza S6P2 a ciclului maina corespunztor. Accesul la memoriile externe de program si de date se refer la adresarea memoriilor externe, la transferul octeilor ntre microcontroler i memoriile externe, precum i la tehnicile de control. Accesul la memoriile de program se realizeaz pentru extrageri coduri instruciuni, prin adresare cu coninutul registrului PC i pentru citiri operanzi, la adresele date de (A) +(DPTR) sau (A)+(PC), n instruciuni MOVC. Accesul la memoria de program extern se realizeaz pentru tot spaiul de adresare 0FFFFh dac se comand adresare extern prin conectare la nivel logic 0 a pinului /EA al microcontrolerului. Dac pinul /EA este la nivel logic 1, accesul la memoria de program extern se realizeaz numai n spaiul de adresare 0FFFhFFFFh. n acest caz, n spaiul de adresare 0FFFFh este accesat memoria de program intern.

  • Accesul la memoria de date extern se realizeaz pentru transfer date prin adresare cu coninutul registrelor DPTR, P2 R0 sau P2 R1, n instruciuni MOVX. n instruciunile MOVX A, @Ri i MOVX @Ri, A coninutul registrului Ri reprezint octetul mai puin semnificativ al adresei, iar coninutul registrului P2 reprezint octetul mai semnificativ al adresei. Transferul unei adrese de la microcontroler la memoriile externe de program sau de date se realizeaz prin liniile amplificatorului de magistral al portului P0 (octetul mai puin semnificativ al adresei) si prin liniile amplificatorului de magistral al portului P2( octetul mai semnificativ al adresei). Transferul unui octet de date ntre microcontroler i o locaie a memoriei externe se realizeaz prin liniile amplificatorului de magistral al portului P0. Rezult c amplificatorul de magistral al portului P0 se utilizeaz la accesul memoriilor externe, att pentru adresare ct i pentru transfer de date (coduri instruciuni ) prin tehnici de multiplexare / demultiplexare n timp interne i externe. Astfel, se impune memorarea temporar ntr-un registru extern a octetului mai puin semnificativ al adresei, transferat n exterior prin liniile corespunztoare portului P0 n cadrul unui acces la memoriile externe. Aceast memorare este necesar pentru meninerea adresei locaiei de memorie pe durata transferului datei (codul instruciune). Funcie de memorare n registrul extern se realizeaz pe baza semnalului de validare registru de adresare ALE, generat la pinul corespunztor de microcontrolerul 8051. Deoarece microcontrolerul 8051 poate accesa 64 Koctei de memorie de program extern i 64 Koctei memorie de date extern prin magistrala de adresare comun de 16 bii, rezult necesitatea seleciei (validri) separate a celor dou tipuri de memorii. n acest scop, microcontrolerul genereaz semnalul /PSEN de validare a memoriei de program extern i semnalele /RD i /WR de validare citire/scriere din /n memoria de date extern, semnalele generate la pinii corespunztori, figura 8.1.

    Conectarea unor memorii externe da date i program cu capacitatea maxim, de cte 64 Koctei, este prezentat n figura 8.10. Registrul pentru memorarea octetului mai puin semnificativ al adresei este comandat la intrarea STB cu semnalul ALE generat de

    Fig. . Conectarea memoriilor externe de date i program la un

    D7D0

    A7A0

    MEMORIE DE DATE (64 Koctei)

    A15A8

    /OE

    /WE

    REGISTRU

    P0.7P0.0.0 P2.7P2.00.

    MICROCON-

    TROLERALE

    /PSEN /EA

    /RD /WR

    D7D0

    MEMORIE DE

    PROGRAM (64 Koctei)

    A7A0

    A15A8/OE

  • microcontroler. Registrul funcioneaz ca amplificator de magistral repetor dac intrarea de control STB este la nivel logic 1, memoreaz starea liniilor magistralei de intrare din momentul frontului de coborre de la intrarea STB i ncarc magistrala de ieire cu aceast stare dac intrarea STB este la nivel logic 0. Funcionarea circuitelor din figura 8.10. n cicluri de extragere coduri instruciuni din memoria de program extern, citire din memoria de date extern i scriere n memoria de date extern este prezentat, pe baz de diagrame de timp, n figurile 8.11.,8.12. i respectiv 8.13..Se precizeaz c diagramele de timp din figura 8.11. sunt caracteristice funcionri microcontrolerului n sensul c semnalele corespunztoare se genereaz tot timpul, cu excepia ciclurilor de acces la memoria de date extern i la memoria de program intern. n acest ultim caz, linia /EA a microcontrolerului se comand cu nivel logic 1. Astfel, memoria de program intern este accesat n spaiul de adresare 00FFFh i n intervalele de acces la memoria de program intern linia /PSEN este comandat de microcontroler n stare inactiv. Incrementarea coninutului numrtorului de adrese, citirea sau ignorarea cuvintelor coduri instruciuni n diferite faze ale ciclurilor main sunt funcie de instruciunile executate de microcontroler, conform exemplelor de instruciuni prezentate n acest paragraf. TEMPORIZATOARE I NUMRTOARE Microcontrolerul 8051 are dou registre Timer/Counter de 16 bii: Timer 0 i Timer 1. Ambele pot fi configurate pentru a lucra sau ca temporizator sau ca numrtor (figura 2.16).

    n funcia Timer (temporizator) registrul este incrementat la fiecare ciclu main. Deoarece un ciclu main const din 12 perioade ale tactului oscilatorului, rata de numrare este 1/12 din frecvena oscilatorului.

    n funcia Counter (numrtor) registrul este incrementat la fiecare tranziie din 1 n 0 a pinului extern de intrare T0 sau T1. n aceast funciune intrarea extern este eantionat pe perioada S2P2 a fiecrui ciclu main. Cnd eantionul este n stare high ntr-un ciclu i n starea low n urmtorul ciclu, numrtorul este incrementat. Noua valoare apare n registru n S3P1 a ciclului care urmeaz celui n care tranziia a fost detectat. Deoarece este nevoie de doua cicluri main ( 24 perioade ale oscilatorului) pentru a recunoate o tranziie de la 1 la 0 rata de numrare maxim este 1/24 din frecvena oscilatorului. Nu exist restricii n ceea ce privete factorul de umplere al semnalului extern de intrare, dar pentru a fi siguri c un nivel dat este eantionat cel puin odat nainte de a se schimba, el trebuie meninut cel puin un ciclu ntreg.

    n completarea celor dou funcii amintite, cele dou timere au patru moduri de operare:

    Modul 0

  • CIRCUITELE DE NUMARARE , TEMPORIZARE ALE MICROCONTROLERULUI 8051

    Microcontrolerul 8051 contine doua circuite de numarare, temporizare notate cu N/TO si N/T1, figura 8.1. Fiecare circuit contine doua registre numaratoare de cate 8 biti THO, TLO respectiv TH1,TL1 din grupul registrelor cu functii speciale.

    Structura unui circuit numarator/temporizator (N/Ti, I=0 sau 1) este prezentata in figura 8.14. Functia de temporizare se realiza prin numarare de impulsuri cu frecventa oscilatorului de tact divizata cu 12. Rezulta frecventa pentru temporizare fo/12=1 MHz, pentru fo=12 MHz.

    Functia de numarare a unui circuit 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 fazele S5P2 din doua cicluri masina consecutive rezultatul testarii este nivel logic 1 urmat de nivel logic 0. Directia unui front de cadere determina incrementarea cu o unitate a continutului registrului urmator in faza S3P1 a ciclului masina urmator celor doua in care s-a detectat frontul. Rezulta ca functia de numarare a fronturilor de cadere ale semnalului da la linia de intrare Ti a microcontrolerului se efectueaza corect daca fiecare nivel logic 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 fo/24, egala co 0,5 Mhz, pentru fo=12MHz.

    Pentru controlul functionarii circuitelor numaratoare/temporizare se utilizeaza registrele interne TMOD si TCON din grupul retgistrelor cu functii speciale. Astfel, functia de numarare sau temporizare realizata de un circuit N/T se stabileste prin programarea corespunzatoare nivelului logic al bitului C/Ti, figura 8.14 (TMOD.2 pentru N/To si TMOD.6 pentru N/T1). Acest bit de comanda comutatorul K1, figura 8.14.

    Fig. 8.14. Structura unui circuit numarator/temporizator (N/Ti; i=0 sau 1)

    Declansarea si blocarea proceselor de numarare/temporizare, corespunzatoare pozitiilor cuplat respectiv decuplat ale comutatorului K2, figura 8.14, se pot stabili prin programarea continutului bitilor TRi din registrul TCON si GATEi din registrul TMOD si prin semnal extern conectat la pinul /INITi al microcontrolerului. Logica de declansare/blocare rezulta din structura circuitelor, figura 8.14. Astfel, declansarea si blocarea proceselor de numarare/temporizare se pot realiza prin program, prin stabilirea bitului GATEi la nivel logic 0. In acest caz, declansarea si blocarea se comanda prin programarea bitului Tri la nivel logic 1 si respectiv, 0. Daca bitii GATEi si TRi se stabilesc, prin programare, la nivel logic 1, declansarea si blocarea se comanda cu semnalul cconectat la intrarea /INTi a microcontrolerului.

    Procesele de numarare/temporizare evolueaza in sensul cresterii continutului registrului numarator al circuitului . La depasirea valorii maxime corespunzatoare capacitatii numaratorului, bitul indicator de depasire TFi din registrul TCON este pozitionat la nicvel logic 1, avand semnificatia de activare a unei cereri de intrerupere. De asemenea, continutul numaratorului, devine zero sau se incarca numaratorul cu o valoare programabila, functie de modul de lucru al circuitului de numarare/temporizare. Astfel, procesul de

  • numarare/temporizare se desfasoara continuu. Bitul indicator de depasire TFi se pozitioneaza la nivel logic zero dupa acceptarea cererii de intrerupere de catre logica de control intreruperi a microcontrolerului.

    In functie de modul de utilizare a registrelor TLi si THi pentru numarare, exista patru moduri de lucru in care poate fi programat fiecare circuit de numarare/temporizare. Aceste moduri de lucru sunt notate cu 0, 1, 2, 3. Selectia modului de lucru se realizeaza prin programarea bitilor M1, M0 ( TMOD.1, TMOD.0) pentru N/To si a bitilor M1, M0 (TMOD.5, TMOD.4) pentru N/T1, conform tabelului 8.3. Numarul modului de lucru selectat corespunde valorii in cod binar natural a secventei de biti M1, M0.

    Tabelul 8.3 M1 M0 Mod de lucru 0 0 0 0 1 1 1 0 2 1 1 3

    In modul de lucru zero, registrul numarator, fig. 8.14, este de 13 biti, format din registrul THi si din cei cinci biti mai putin semnificativi ai registrul TLi, figura 8.15.a. Intr-un proces de numarare/ temporizare , continutul registrului numarator este incrementat pana la valoarea maxima (toti bitii cu nivel logic 1). Urmatoarea imcrementare produce depasirea capacitatii de numarare si anulare a continutului numaratorului.

    In modul de lucru 1, registrul numarator este de 16 biti, format din registrele THi si TLi, din figura 8.15. Functionarea circuitelor N/T la depasire decurge ca si in modul zero.

    In modul de lucru doi, registrul numarator este de 8 biti format din registrul TLi, figura 8.15.c. La depasirea capacitatii de numarare, registrul TLi se incarca cu continutul registrului THi. Acest mod de lucru este util, de exemplu, pentru temporizari cu vloori programabile. Durata tremporizarii este data de perioada cu care apar depasiri ale capacitatii de numarare si implicit, cereri de intrerupere. Rezulta ca durata temporizarii T este data de relatia

    (8.1) [ ])(25612 THifo

    T =

    Unde fo este frecventa oscilatorului de tact al microcontrolerului si ( THi ) este continutul registrului THi stabilit prin programare. Pentru temporizari, valoarea programata in registrul THi se numeste constanta de timp.

    In modul de lucru trei cele doua circuite de numarare/temporizare opereaza in mod diferit.

    Astfel, in modul de lucru 3, circuitul N/To contine ca numarator registrul TL0. In plus,

    registrul TH0 este inclus intr-o structura de circuit temporizator, figura 8.16, care utilizeaza

    bitii TR1 si TF1 ccorespunzatori circuitului N/T1, in celelate moduri de lucruri.

  • FIG 8.15 Utilizarea registrelor Thi si Tli in circuitele de numarare/temporizare pentru numarare: a modul 0; b modul 1; c modul 2.

    Fig 8.16 Structura circuitului temporizator cu registrul TH0 in modul de lucru 3 al

    circuitului N/T0. Prin programaarea circuitului N/TO in modelul de lucru 3 si a circuitului N/T1 in

    unul dintre modurile de lucru 0, 1 sau 2, in sttructura circuitului N/T1,k figura 8.14, comutatorul K2 este cuplat, indiferent de semnalul de comanda. Blocarea procesului de numarare/temporizare se poate obtine prin programarea modului de lucru 3 pentru circuitul N/TO permite utilizarea simultana a doua circuite numaratoare/temporizatoare si a unui circuit temporizator ( THO, figura 8.16 ). De asemenea, circuitul N/T1 nu poate efectua cereri de intrerupere, iar declansarea si blocarea proceselor de numarare/temporizare realizate de acest circuit se pot obtine prin programarea circuitului din modul de lucru 3 in modul de lucru care se opereaza si, respectiv, prin programarea in modul de lucru 3.

  • PORTUL SERIAL AL MICROCONTROLERULUI 8051

    Portul serial al micrcrocontrolerului 8051 este utilizat pentru transferul de informatie inttre microcontroler si componente externe ale SPN sau echipamente de intrare/iesire de tip linie de comunicatie prin multiplexare, respectiv demultiplexare. Rezulta ca la emitator se realizeaza conversia seri-paralel a cuvintelor.

    Comunicatia serie intre doua echipamente poate realiza transferul de informatie in ambele sensuri alternativ, printr-o singura linie, in cazul comunicatiei semiduplex sau simultan, prin doua linii, in cazul comunicatiei duplex.

    In cazul comunicatiei serie asincrone, transferul cuvintelor dintr-un mesaj se poate realiza la intervale de timp variabile. Un cuvant cuprinde o secventa de 8 sau 9 biti de date. Transmisia serie a unui cuvant de catre emitator consta in incarcarea succesiva a liniei de comunicatie cu bitii corespunzatori cuvantului, cu frecventa de comunicatie fc, exprimata in biti/s. Receptia serie a unui cuvant de catre emitator consta in testarea periodica a starii liniei de comunicatie in scopul determinarii secventei de biti incarcata de emitator. Pentru transferul corect al unui cuvant este necesar ca receptorul sa esantioneze starea liniei de comunicatie cu aceeasi frecventa si faza cu care se incarca bitii cuvantului la emisie. In acest scop, comunicatia serie asincrona se realizeaza cu o frecventa de comunicatie fc stabilita (programata) pentru oscilatorul de la emisie si pentru oscilatorul de la receptie. Sincronizarea de faza a oscilatorului de la receptie cu cel de la emisie se realizeaza pe baza frontului de cadere corespunzator bitului de start care precede bitii de date in procesul de transmisie a unui cuvant, figura 8.17. Dupa bitul de start cu nivel logic 0 urmeaza emisia bitilor de date ( 8 sau 9 ) incepand cu bitul de semnificatie minima. Ultimul bit de date emis poate fi bit de paritate utilizat la receptie pentru verificare de erori. Dupa ultimul bit de data urmeaza emisia unui bit de stop cu nivel logic1.

    Portul serial al microcontrolerului 8051 poate fi utilizat pentru comunicatie serie asincrona de tip duplex prin liniile de transmisie TXD ( P3.1) si, respectiv, de receptie RXD (P3.0), ffigura 8.1. Se precizeaza ca microcontrolerul 8051 contine doua registre interne notate cu SBUF si utilizate pentru comunicatia serie, unul pentru transmisie si unul pentru receptie.

    Celor doua registre interne le corespunde aceeasi adresa, si anume 99h. Adresarea directa a operanzilor la adresa 99h se refera la registrul de receptie SBUF, in cazul operanzilor sursa si la registrul de transmisie SBUF, in cazul operanzilor destinatie. Astfel, printr-o instructiune de scriere a unui octet in registrul SBUF, adresat direct, se realizeaza incarcarea registrului de transmisie SBUF cu octetul corespunzator. Incarcare registrului de transmisie SBUF determina declansarea procesului de transmisie serie, prin linia TXD a octetului incarcat. Conversia paralel-serie a octetului se realizeaza prin functionarea registrului de transmisie SBUF ca registru de conversie paralel-serie a datelor de pe linia de receptie RXD. Dupa asamblarea unui octet in registrul de deplasare receptie, continutul aacestuia este transferat in registrul de receptie SBUF. Astfel, printr-o instructiune de citire din regisrtrul SBUF, adresat direct, se realizeaza citirea octetului din registrul de receptie SBUF. Se precizeaza ca, dupa transferul octetului din registrul de deplasare receptie in registrul SBUF, se poate incepe asamblarea unui nou octet in registrul de deplasare receptie inainte de citirea octetului precedent din registrul de receptie SBUF. Astfel, operatiile de asamblare a unui nou octet si de citire a celui precedent se pot desfasura in paralel. Daca citirea octetului precedent nu se realizeaza inainte de terminarea asamblarii noului octet, rezulta pierderea unui octet.

  • Fig.8.17. Structura cuvintelor in comunicatia serie asincrona. Portul serial al microcontrolerului 8051 poate functiona in patru moduri de lucru 0, 1, 2

    sau 3. Modul de lucru se poate stabili prin programarea bitilor SM0 si SM1 din registrul de control al portului serial SCON, conform tabelului 8.4.

    Tabelul 8.4 SM0 (SCON.7)

    SM1 (SCON.6)

    MOD DE LUCRU

    0 0 0 0 1 1 1 0 2 1 1 3

    Modul de lucru 0 al portului serial se poate utiliza pentru realizarea unei comunicatii de

    tip semiduplex. Astfel, linia RXD este utilizata alternativ pentru receptia si transmisia unor secvente de 8 biti de date cu frecventa de comunicatie fo/12 (Biti/s), unde fo este frecventa oscilatorului de tact al microcontrolerului. Semnalul cu frecventa de comunicatie fo/12 este disponibil la linia TXD in intervalele corespunzatoare receptiei sautransmisiei. Declansarea transmisiei se realizeaza prin incarcarea unui octet in registrul de transmisie SBUF. La sfarsitul transmisiei celor opt biti, portul serial pozitioneaza la nivel logic 1 bit indicator de intrerupere la transmisie TI (SCON.1), precizand posibilitatea de incarcare a unui indicatopr de intrerupere la transmisie SBUF. Bitul TI poate fi pozitionat la nivel logic 0 prin program. Declansarea receptiei se realizeaza cand bitul de validare receptie REN (SCON.0) este programat la nivel logiic 0. La sfarsitul receptiei celor 8 biti, portul serial pozitioneaza l;a nivel logic 1 bitul RI.

    Modurile dee lucru 1, 2 si 33 al4eportului serial se potutiliza pppeentru comunicatii asincrone de tip dduplex. Astfel, portul serial realizeaza transmisia, prin linia TXD si receptia, prin linia RXD a unor cuvintecare contin un bit de start cu nivel programabil la transmisie care urmeaza dupa cei 8 biti de date. La transmisie acest bit este TB8 (SCON.3) ssi poate avea semnificatia de bit de paritate. Aceasta semnificatie se poate obtine prin prezenta celor 8 biti de date ai cuvantului de transmis in registrul acumulator A, transferul continutului bitului de paritate P(PSW.0) in TB8 (SCON.3) si, apoi, transferul continutului acumulatorului in registrul de transmisie SBUF. La receptie, bitul careee urmeaza dupa cei 8 biti de date este introdus in RB8 *SCON.2).

  • In modurile de lucru 1, 2 si 3, declansarea transmisiei unui cuvant se realizeaza prin scrierea octetului cu cei opt biti de date in registrul de transmisie SBUF. La inceputul transmisiei bitului de stop corespunzator unu7I cuvant, portul serial pozitioneaza la nivel logic 1 bitul indicator de intrerupere la transmisie TI (scon.1), precizand posibilitatea de transmisie a cuvantului urmator. Bitul TI ttrehbuie pozitionat la nivel logic 0, prin programare.

    In modurile de lucru 1, 2 si 3, validarea receptiei se realizeaza prin programarea la nivel logic 1 a bitului de validare receptie REN (SCON.4). Declansarea receptiei unui cuvant se realizeaza de frontul de cadere corespunzator bitului de start al cuvantului. Daca bitul SM2 (SCON.5) este programat la nivel logic 0, portul serial pozitioneaza la nivel logic 1 bitul indicator de intrerupere la receptie RI (SCON.0), la mijlocul intervalului de receptie a bitului de stop corespunzator din registrul de receptie SBUF. Daca bitul SM2 este programat la nivel logic 1, portul serial pozitioneaza bitul RI la nivel logic 1, numai daca bitul urmator celor 8 biti de date, bit receptionat in RB8 (SCON.2), are nivelul logic 1. Deoarece, in modurile de lucru 2 si 3 ale portului serial, nivelul logic al bitului urmator celor 8 biti de date poate fi programat la transmisie in TB8, rezulta posibilitatea de receptie selectiva (functie de RI) a cuvintelor incarcate pe o linie de comunicatie. Acesata procedura de receptie selectiva poate fi utilizata pentru comunicatie serie intr-un sistem multiprocesor condus de un procesor gazda. Astfel, linia de transmisie serie corespunzatoare procesorului gazda este conectata la intrarile serie ale mai multor procesoare (microcontrolere) din sistem.

    Procesorul gazda poate incarca linia de transmisie cu cuvinte de comanda sau de date. Un cuvant de date contine, dupa cei 8 biti de date, un bit cu nivel logic 0. Porturile seriale ale microprocontolerelor 8051 din sistem sunt programate in modul de lucru 2 sau 3 si cu bitii SM2 la nivel logic 11. Astfel, receptie unui cuvant de comanda pozitioneaza la nivel logic 1bitul RI al fiecarui microcontroler. Rezulta posibilitatea de apel al unei subrutine de intrerupere in fiecare sistem cu microcontroler. Subrutina de intrerupere corespunzatoare analizeaza cei 8 biti de adresa. Microcontrolerul care recunoaste propria adresa, pozitioneaza bitul SM2 la nivel logic 0 pentru receptia cuvcintelor de date care urmeaza dupa cuvantul de comanda corespunzator. Celelalte microcontrolere din sistem mentin bitii SM2 la nivel logic 1 si nu receptioneaza octetii de date deoarece nu se genereaza cereri de intrerupere de receptie.

    In modurile de lucru 1 si 3 ale portului serial, valoarea frecventei de comunicatie poate fi stabilita prin programare si este functie de frecventa fd cu care apar depasiri ale capacitatii de numarare la circuitul N/T1,

    (8.2) d

    SMOD

    c ff = 322 )(

    unde SMOD este bit al registrului PCON. IN multenaplicatii, pentru generarea

    frecventei de comunicatie, circuitul N/T1 se programeaza in modul de3 lucru 2, rezultand

    (8.3) [ ])1(25612322 0

    )(

    TH

    ff

    SMOD

    c =

    Relatia (8.3) se utilizeaza pentru determinarea valorii constantei de timp care se programeaza in registrul TH1, adica

  • (8.4) c

    SMOD

    f

    fTH

    =

    1232

    2256)1( 0

    )(

    De exemplu, pentru fc=4,8 kHz sin (SMOD)=1, se obtine (TH1)=F3yh. In modul de lucru 2 al portului serial, valoarea frecventei de comunicatie este

    (8.5) 0

    )(

    642

    ffSMOD

    c =

    In cele ce urmeaza se prezinta structura, figura 8.18, si functionarea circuitelor pentru transmisie si receptie din portul serial al microcontrolerului 8051, programat in modul; de lucru 1.

    Frecventa de comunicatie fc se obtine din frecventa fd cu care apar depasiri8 ale capacitatii de numarare la circuitul N/T1, prin utilizarea divizoarelor de frecdventa si a comutatorului K, figura *.18. Divizoarele de frecventas cu 2 si 6 sunt realizate cu registre numaratoare modulo 2, si respectiv, modulo 16.

    In afara intervalelor de timp corespunzatoare transmisiei cuvintelor, linia TXD este comandata la nivel logic 1, deoarece semnalulu /SEND este inactiv, adica la nivel logic 1, figura 8.18 si 8.19. Transmisia unui cuvant este initiata de o instructiune in care registrul SBUF este destiatie. Comanda de scriere in registrul SBUF, corespunzatoare instructiunii, determina incarcarea registrului SBUF transmisie de magistrala interna, incarcarea nivelului logic 1 in bistabilul B si validarea transmisiei prin comanda START. Dupa validarea transmisiei se asteaptea primul impulss TX CLOCKI corespunzator numararii de la valoarea 15 la 0 in registrul numarator cuvantului prin activarea semnalului /SEND si mentinerea in stare inactiva a semnalului DATA. Rezulta transmisia bitului de start cu nivel logic 0, in intervalul 1/fc. Urmatorul impuls TX CLOCK determina activarea semnalului DATA si, deci, incarcarea liniei de transmisie cu bitul D0 (cel mai putin semnificativ) din registrul SBUF transmisie, in intervalul 1/fc.

    Figura 8.19 Diagrame de timp corespunzatoare functionarii portului serial pentru

    transmisia unui cuvant. La urmatorul impuls TX CLOCK, logica de control transmisie genereaza un impuls de

    deplasare SHIFT, care determina deplasarea spre dreapta cu un bit a continutului registrului de transmisie SBUF. In pozitia bitului cel mai semnificativ al acestui registru se introducecontinutul bistabilului B ccu nivelul logic 1 corespunzator bitului de stop. Dupa acest transfer, continutul nbistabilului B este adus la nivel logic 0. Linia de transmi9sie TXD se incarca cu bitul D1. Urmeaza transmisia succesiva cu frecventa fc a bitilor de date, pozitiile mai semnificative ale registrului de transmisie SBUF fiind ocupate succesiv cu biti cu valoare logica 0. Intervalul in care bitul D7 incarca linia de transmisie TXD este sesizat de detectorul de zero. Astfel, logica de control transmisie mai genereaza un singur impuls de deplasare SHIFT, care determina dezactivarea liniei /SEND si activarea liniei TI. La iesirea TXD apare nivelul logic 1 corespunzator bitului de stop si apoi intervalul pana la transmisia unui alt cuvant.

    Receptia unui cuvant poate fi declansata de aparitia pe linia de receptioe RXD a unei tranzitii de la nivel logic 1 la nivel logic 0, tranzitie corespunzatoare frontului de cadere al starii de start, figura 8.18 si 8.20. Detectia acestor tranzitii se realizeaza prin esantionarea starii liniei RXD cu frecvanta 16*fc, ddisponibila laa intrarea registrului divizor cu 16. Se vor considera detectata o tranzitie daca in doua esantioane consecutive se obtine nivelul logic 1 urmat de nivelul logic 0. Detectia unei tranzitii (1 spre 0) determina anularea continutului

  • registrului divizor cu 16 de la receptie, operatie echivalenta cu sincronizarea de faza a oscilatorului de la rreceptie cu cel de la transmisie. De asemenea, se comanda incarcarea registrului de deplasare receptie cde 9 biti cu valoarea 1 FFh (toti bitii la nivel logic 1). Detectia nivelului logic al fiecarui bit din cuvantul in curs de receptie se realizeaza prin tri esantionari ale starii liniei RXD. Aceste esantionari sunt plasate la mijlocul in tervalului dee receptie a bitului, corespunzator momentelor in care continutul registrului divizor cu 16 are valorile 7, 8 si 9. Nivelul logic detectat pentru un bit receptionat este cel care apare de cel putin doua ori in cele trei esantionarai (este stabilit prin logica majoritara).

    Fig.8.20 Diagrame de timp corespunzatorare functionarii portului serial pentru receptia

    unui cuvant. Aceasta procedura de detectare a nivelelor logice a bitilor cuvantului receptionat are

    scopul de a reduce erorile de receptie. Se precizeaza ca procesul de receptie a unui cuvant se opreste daca nivelul logic detectat pentru bitul de start nu este zero. Dupa detectarea nivelului logic al unui bit receptionat, logica de control receptie genereaza un impuls de deplasare SHIFT, care determina deplasarea la stanga cu o pozitie a continutului registrului de deplasare receptie si incarcarea ultimului bit receptionat in pozitia libera dupa deplasare. Rezulta ca in registrul de deplasare receptie se asambleaza cuvantul in curs de receptie, incepand cu bitul de start. Prin incarcarea bitului D7 in registrul de deplasare receptie, bitul de start ajunge in pozitia de iesire (cea mai din stanga) si, prin nivelul logic 0, indica acest moment logicii de control receptie, Astfel, logica de control receptie mai genereaza un singur impuls de deplasare SHIFT. In urma acestui impuls, registrul de deplasare receptie contine cei 8 biti de date D0-ED7 si bitul de stop. Daca bitul SM2 este programat la nivel logic 0 sau bitul de stop a fost receptionat cu nivel logic 1 si bitul RI este la nivel logic 0, logica de control receptie comanda transferul bitilor de date in registrul de receptie SBUF, transferul bitului de stop in RB8 si activarea liniei RI. In caz contrar, cuvantul asamblat in registrul de deplasare receptie este pierdut. In ambele situatii portul serial incepe procedura de esantionare a liniei de receptie RXD pentru detectarea unei tranzitii 1-0 corespunzatoare receptiei unui nou cuvant.

    FUNCTIONAREA CU INTRERUPEREA MICROCONTROLERULUI 8051

    Sursele de cereri de intrerupere pentru microcontrolerul 8051 sunt externe si interne. Sursele externe transmit cererile de intrerupere prin pinii /INT0 (P3.2) si /INT1 (P3.3) ai microcontrolerului. Sursele interne sunt circuitele de numarare/temporizare N/T0, N/T1 si portul serial.

    Cererile de intrerupere generate de surse pozitioneaza la nivel logic 1 biti ai registrelor interne TCON si SCON, figura 8.12, 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 numare/temporizare, RI (SCON.0) ssi TI (SCON.1) pentru intreruperi de la portul serial. Starile acestor biti indicatori de cereri de intrerupere sunt de logica de control intreruperi a microcontrolerului in faza S5P2 a fiecarui ciclu masina. Astfel, logica de control intreruperi a microcontrolerului identifica sursele care solicita intrerupere si asigura apelul subrutinei de intrerupere corespunzatoare unei resurse, in corcodanta cu conditiile de validare si prioritate stabilite pentru surse prin programare. Starile bitilor indicatori de cereri de intrerupere pot fi stabilite prin programare.

    O sursa externa poate solicita o cerere de intrerupere prin comanda pinului /INT0 sau /INT1, cu nivel logic 0 sau cu front de cadere, functie de nivelul logic programat in bitul IT0 (TCON.0), respectiv IT1 (TCON.2), figura 8.12. In cazul variantei de cere de intrerupere externe prin nivel, bitul IEi unde i=0 sau 1, urmareste in permanenta nivelul logic de

  • comanda a intrarii /INTi. Astfel,o cerere de intrerupere indicata prin nivelul logic 1 al bitului IEi corespunde nivelului logic 0 de comanda a pinului /INTi, avand in vedere prezenta circuitului inversor.

    Nivelul logic 0 corespunzator unei cereri de intrerupere externe prin nivel trebuie mentinut pana la apelul de catre microcontroler a subrutinei de intrerupere corespunzatoare. Comanda liniei /INTi la nivel logic 1 trebuie sa se efectueze inainte de sfarsitul executiei subrutinei de intrerupere corespunzatoare prin front de cadere, bitul IEi este pozitionat la nivel logic 1 de un front de cadere prezent la intrarea /INTi . Detectia fronturilor de cadere se realizeaza prin esantionarea starii intrarii /INTi cu frecventa ciclurilor masina. Rezulta ca pentru detectia corecta a unui ciclu masina (1 microsecunda). Nivelul logic 1 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 nivelul logic 0 de catre logica de control intreruperi a microcontrolerului.

    Cererile de intrerupere de la un circuit de numarare/temporizare N/Ti, i=0 sau 1, sunt generate de depasirea valorii maxime corespunzatoare capacitatii numaratorului, cand bitul indicator de depasire TFi se pozitioneaza la nivel logic 1. La ap