Documente Academic
Documente Profesional
Documente Cultură
1 . Introducere
Aparatele i sistemele controlate cu microprocesor au aprut i s-au perfecionat odat cu apariia pe pia a miroproesoarelor (1970 -1980) dup care (n special dup 1985) s-au rspndit foarte rapid, nlocuind aproape complet aparatele i sistemele de msur i control numerice clasice (cu logic cablat), att n tehnica de laborator ct i n instrumentaia industrial, mai ales n controlul automat.
Definiii i terminologie
Sistemul de calcul este un echipament care transform datele de intare n rezultate de ieire pe baza unui algoritm materializat ntr-un program. Aceast definiie reprezint sensul clasic al noiunii de calculator . Sistemele inteligente sunt acele sisteme care pot prelucra informaii incomplete definite sau aproape complet definite. Astfel de sisteme sunt sistemele fuzzy sau reelele neuronale. n cazul n care informaiile de prelucrat sunt complet definite atunci avem de-a face cu algoritmi secveniali. Acest tip de algoritmi a stat la baza construciei mainilor secveniale (Von Newman). Dac operaiile elementare independente se pot executa paralel (pe mai multe uniti de calcul), avem de-a face cu algoritmi paraleli. 1
ncepnd cu anii 1970 au aprut tendine de automatizare a proceselor de producie bazate iniial pe automate numerice cablate (logic cablat) i apoi pe sisteme cu microprocesoare (logic programat). De dat recent sunt sistemele bazate pe arhitecturi paralele (sisteme multiprocesor , sisteme distribuite). Arhitectura mainii secveniale standard (Von Newman) este urmtoarea:
Unitate Central
Memorie
Subsistem de intrare/ieire
Om/proces Unitatea central (CPU-Central Processing Unit), transform datele n rezultate pe baza execuiei instruciunilor programului memorat. Memoria este mediul principal de stocare/regsire a datelor, rezultatelor i programelor. Subsistemul de intrare-ieire este destinat realizrii interfeei om-main sau proces-main. Partea fizic a unui sistem de calcul (componentele electronice) este relative simpl, poate fi produs n serie i este relativ ieftin. Termenul hardware se refer tocmai la aceast parte Ceea ce transform acest echipament ieftin ntr-o diversitate de instrumente, controlere industriale, calculatoare speciale sau de uz general, sunt programele (utilitare sau de aplicaii) i sistemele de programe (operare, exploatare), adic software care vor determina hardware-ul de uz general s execute ceea ce dorim. Un alt termen frecvent utilizat este firmware, care desemneaz programe speciale stocate n memorii nevolatile, al cror rol este de a asigura faciliti de configurare i testare a echipamentului, precum i minima sa funcionare. Exemplu biosul de la calculatoarele personale. Microprocesoarele actuale se produc ntr-o gam larg de variante, de la cele de uz general sau cele destinate aplicaiilor industriale, pn la procesoarele de semnal sau coprocesoarele cu funcii bine precizate. De asemenea, microprocesoarele pot fi: - microprocesoare monocip (unitatea central i circuitele de suport sunt dispuse n interiorul aceleiai capsule de circuit integrat). - microprocesoare multicip la care unitatea central i circuitele de suport, sunt realizate sub form de circuite integrate distincte. Microprocesoarele pentru aplicaii dedicate mai ales cele destinate mediului industrial sunt realizate monocip, oferind un plus de comoditate n proiectare i o fiabilitate sporit. De exemplu, microprocesorul 80186, al firmei Intel, include aproximativ toate componentele sistemelor cu 8086, adic unitatea central, generatorul de tact, controlerul de magistral i cel de ntreruperi, controlerul DMA, contor/timer-ul, logica de decodificare, etc. Deseori microprocesoarele monocip includ att memorie de lucru, ct i interfee de intrare/ieire, adic structura minimal a unui microcalculator, motiv pentru care ele se mai numesc i microcalculatoare ntr-un singur cip (Single Component Microcomputer). Deoarece aceast categorie de microprocesoare sunt destinate mai ales aplicaiilor de control n mediul industrial, ele se ntlnesc i sub denumirea de microcontrolere. 2
Microprocesoarele de uz general multicip au fost realizate i n variante monocip, purtnd numele de microprocesoare nglobate. De exemplu, familiile 80186 sau 80386EX sunt produse de Intel i n varianta monocip avnd avantajul utilizrii suportului de programe i exploatare dezvoltat pentru sistemele de calcul existente curent pe pia (de exemplu calculatoarele personale).
Elemente tehnologice
Microprocesoarele i circuitele de suport se pot produce n urmtoarele tehnologii: 1 . Tehnologia bipolar permite obinerea unor viteze de lucru mari, dar cu un consum ridicat i cu probleme de climatizare deosebite. 2 . Tehnologia MOS a evoluat mult, oferind condiii de obinere a unor performane de vitez deosebit, n condiiile unui consum redus i al unui grad de integrare foarte ridicat. Exist 3 familii MOS mai importante: PMOS se bazeaz pe realizarea tranzistoarelor MOS cu canal p, prin difuzia impuritilor de tip p (bor), ntr-un substrat de siliciu de tip n , pentru a forma drena i sursa. Se remarc prin densitate mare de integrare, ns microprocesorul este relativ lent. NMOS se bazeaz pe relizarea tranzistoarelor MOS cu canal n prin difuzia impuritilor de tip n (fosfor sau arseniu) ntr-un substrat de siliciu de tip p, pentru a forma drena i sursa. Se obine o densitate de componente similar cu cea specific PMOS, dar asigur o vitez mai mare pentru circuitele realizate, ns este mult mai scump dect tehnologia PMOS. CMOS combin ambele tipuri de tranzistoare ntr-o structur complementar, rezultatul fiind o vitez de lucru medie, imunitate mare la zgomote i un consum extreme de redus. HMOS este o tehnologie mai recent i a fost utilizat cu succes de firma INTEL la realizarea noilor sale generaii de microprocesoare i microcontrolere. Aceast tehnologie folosete tranzistoare cu canal n, proiectate special pentru a lucra la tensiuni joase i la viteze mari. CHMOS este rodul mbinrii performanelor de vitez deosebit ale tehnologiei HMOS, cu consumul sczut al celei CMOS. Rezultatul a fost remarcabil, astfel nct majoritatea productorilor de microprocesoare i microcontrolere au trecut la aceast tehnologie.
const ntr-un set de simboluri i reguli de sintax foarte bine precizate. Materializarea algoritmului cu ajutorul unui limbaj se face ntr-un program ce const ntr-o succesiune de operaii elementare instruciuni. La nivelul cel mai de jos, instruciunile programului se prezint ca iruri de bii ce pot fi transformate cu uurin n impulsuri electrice, dar care sunt foarte greu de manevrat de ctre programator. Acest limbaj, singurul neles de procesor este numit limbaj main. Din acest motiv, au fost create programe speciale, care permit utilizarea unor limbaje mai apropiate de cel uman (limbaj de asamblare). Ulterior au fost create o multitudine de limbaje (BASIC, FORTRAN, C etc) , numite de nivel ridicat, a cror scop a fost gsirea unei modaliti ct mai accesibile de a programa un microprocesor.
REG DCD X B R3 R1 R4 R2 BI
ADD BUS
Inst DCD
Reset
Unitatea de control
Asigur sincronizarea i coordonarea operaiilor din interiorul i exteriorul microprocesorului. Ca orice automat secvenial sincron, unitatea central este guvernat de un semnal de tact (CLK), produs de un circuit de ceas intern sau extern microprocesorului. n majoritatea cazurilor, oscilatorul, care asigur tactul, este pilotat cu cuar i asigur frecvene ntre 1 i 40 MHz (microprocesoarele ce echipeaz calculatoarele moderne ajung pn la frecvene de ordinal GHz). n principal, unitatea de control solicit instruciunile stocate n memoria de program, le decodific i pe baza acestora comand funcionarea celorlalte blocuri (ALU, registre etc ) interne microprocesorului, n vederea executrii corecte a acestora.
Registrele interne
Au rolul de a stoca temporar operanzii i rezultatele vehiculate prin ALU, pe parcursul uneia sau mai multor instruciuni. Registrele folosite n mod uzual la calcule se numesc registre generale, iar cele folosite la operaii speciale (adresarea, manevrarea stivelor) se numesc registre funcionale. Registrele generale pot ndeplini mai multe roluri: - manevr pentru stocarearea temporar a unui operand sau a unui rezultat; 5
- acumulator (ACC) registru folosit n operaiile de adunare pentru cumularea unui ir de valori (unul din operanzi se gsete ntr-un registru de lucru, iar cellalt l constituie chiar coninutul acumularorului), iar la sfrit rezultatul se depune tot n acumulator; - contor cu autoincrementare sau cu autodecrementare, ce permite realizarea simpl a buclelor de program i parcurgerea irurilor de date; -baz (B) i index (X) ce permite adresarea irurilor de valori (vectori), plasate n locaii succesive de memorie; -indicator de stiv (SP) - permite adresarea unei zone de memorie (stiv), special creat pentru a facilita manevrarea datelor, pe principiul ultimul sositprimul servit (LIFO), prin operaii de tipul PUSH, POP, precum i execuia subrutinelor sau a tratrii ntreruperilor. Un microprocesor posed cel puin 2 registre generale (acumulator i manevr). Majoritatea microprocesoarelor folosesc seturi de 4 16 registre, ce pot prelua unul din rolurile prezentate mai sus. Registrele funcionale ndeplinesc sarcini dedicate pentru controlul derulrii instruciunilor n microprocesor. -Registrul de stare program (PS ) conine o serie de informaii ce descriu starea execuiei progarmului (indicatorii de condiie, care reprezint modul de terminare a unei operaii logico-aritmetice, utilizat la realizarea salturilor condiionate, precum i a indicatorilor de semnalare a evenimentelor speciale i a modurilor de lucru); -Registrul de instruciuni (IR) destinat stocrii instruciunii pe parcursul execuiei sale; -Contorul de program (PC) indic n permanen instruciunea curent (de executat);
Seturi de instruciuni
Instruciunea este o operaie elementar ce se execut de microprocesor n cadrul unui program. Orice instruciune este identificat pe baza unui cod de operaie ce face parte integrant din corpul acesteia. Codul de operaie este completat de informaii suplimentare, numite uzual argumente. Codul operaiei este singura poriune a instruciunii care se decodific intern i declaneaz secvena de microoperaii din unitatea de comand (exist instruciuni formate numai din cod). 6
Lista complet de instruciuni pe care o poate interpreta i executa un microprocesor se numete set de instruciuni. Instruciunile sunt stocate n memorie sub form de cuvinte consecutive, care materializeaz programul existnd dou categorii de instruciuni mprite pe baza formatului: - instruciuni cu format fix la care lungimea acestora i structura diverselor cmpuri componente este fix, indiferent de codul instruciunii; - instruciuni cu format variabil la care lungimea i structura cmpurilor componente este dependent de codul instruciunii. Formate uzuale de instruciuni a) b) c) d) CO Cod operaie CO Cod operaie CO Cod operaie CO Cod operaie AO Adres operand AO Adres operand AO Adres operand AO Adres operand AO Adres operand AR Adres rezultant AI Adres instruciune
AO sau AI Adres operand sau Adres instruciune AO sau AI Adres operand sau Adres instruciune
a) - instruciune cu patru adrese: dou adrese de operanzi, o adres pentru rezultat i o adres pentru urmtoarea instruciune. Formatul este incomod, datorit numrului mare de argumente, care nu sunt folosite ntotdeauna. b) - instruciune cu trei adrese: dou adrese de operanzi i o adres pentru rezultat sau pentru urmtoarea instruciune. n acest caz se presupune c instruciunile sunt plasate n locaii succesive, astfel c adresa instruciunii urmtoare este subneleas. Instruciunile care nu respect aceast secven (salturi, apeluri de subrutine), de regul nu sunt instruciuni de calcul i ca urmare ultimul cmp poate fi folosit pentru adresa urmtoarei instruciuni de executat. c) - instruciuni cu dou adrese: dou adrese de operand, din care ultima poate fi pentru urmtoarea instruciune. Rezultatul unei operaii este depus ntr-un loc implicit cunoscut (de obicei, n acumulator). d) - instruciuni cu o singur adres: o adres de operand sau pentru urmtoarea instruciune. n aceast situaie att unul din operanzi, ct i rezultatul operaiei au un loc prestabilit. Acest format este cel mai economic. Microprocesoarele actuale folosesc , de obicei , instruciuni cu format variabil cu una sau cu dou adrese , deoarece permit o utilizare optim a memoriei de program i o scurtare semnificativ a timpului de extragere decodificare .
Instruciuni de control al programului Instruciunile din acest categorie au drept caracteristic faptul c oricare din ele modific derularea secvenial a programului, provocnd ncrcarea contorului de program cu o valoare dintr-un cmp de adres al instruciunii curente, sau cu o adres calculat ntr-un pas precedent al programului. O instruciune de ramificare, numit i salt, determin prsirea secvenei normale a programului, fr un mecanism de reinere a locului unde s-a ntmplat acest lucru. O posibil revenire este lsat complet n seama programatorului. Exist dou tipuri de salt: -salt necondiionat (JMP); -salt condiionat (JZ, JC), ce are loc doar dac este ndeplinit o condiie specificat prin starea indicatorilor de condiie poziionai anterior. Unele microprocesoare au o instruciune, considerat tot de salt, care determin CPU s ignore una sau mai multe instruciuni dintr-o secven (SKIP). Instruciunile de apel (CALL) i revenire (RET) din subroutine, realizeaz i salvarea adresei de ntoarcere (a locului de unde trebuie reluat programul dup execuia subrutinei). Instruciuni de control al microprocesorului n acest grup pot fi nscrise unele instruciuni speciale de control: -oprire (HALT) ce suspend execuia programului curent pn la apariia unei cereri de ntrerupere extern ; -nici o operaie (NOP); -activarea (EI) sau dezactivarea (DI) sistemului de ntreruperi. Instruciuni de intrare / ieire Acest grup include dou instruciuni de transfer, cu porturi de intrare/ieire, adic citire port (IN) sau scriere port (OUT).
Ex : ADD r , adr
r r + ( adr )
unde (adr) este coninutul locaiei de memorie cu adresa adr. n cazul instruciunii de forma: ADD adr ACC ACC + ( adr ) , avem un caz tipic de combinaie a adresrii implicite i a celei directe. Adresare imediat Presupune aducerea operandului chiar n corpul instruciunii (nlocuind corpul de adres cu operandul). Avantajul const n economia unor referiri suplimentare la memorie n timpul execuiei unei instruciuni, util mai ales la operaii cu constante. ADD r ,4 rr+4 , unde 4 este o constant plasat n corpul instruciunii. Adresarea indexat Este principalul mijloc de adresare a irurilor de date dispuse la adrese consecutive, pornind de la o adres de baz. Adresarea indexat utilizeaz un registru special, numit registru de index, n care se plaseaz numrul de ordine al elementului din ir, care trebuie prelucrat. n corpul instruciunii sunt specificate adresa de baz i adresa registrului de index. Ex : ADD r , adr [ x ] Adresarea bazat Este folosit ca mijloc alternativ (la adresarea indexat) de acces la irurile de date. Adresa irului este plasat n registru special numit registru de baz, iar indexul face parte din corpul instruciunii. Adresarea bazat combinat cu adresarea indexat dau un mijloc foarte eficient de acces la blocurile mari de date. Ex : ADD r , B[10] r r + (B+10) , unde r este registrul de lucru, B este registrul de baz, iar prin (B+10) se nelege coninutul locaiei de memorie cu adresa dat de registrul de baz la care s-a adugat 10. nlocuind constanta 10 cu x, adic B[x] se obine o adresare bazat i indexat. Adresarea indirect Este o modalitate de regsire a informaiei pe baza interpretrii operandului, nu ca o valoare de calcul ci ca o nou adres de unde se poate extrage valoarea sa adevrat. Adresarea indirect permite partajarea unei date ntre mai multe uniti de program, dar i accesul la irurile de date. EX : ADD r , (adr) r r+(adr) Prin (adr) se nelege coninutul locaiei de memorie cu adresa adr, la care se afl o nou adres. Alte tipuri de adresri: -adresare relativ la care calculul adresei se face n raport cu coninutul contorului de program; -adresare cu autoincrementare i autodecrementare (punere i extragere din stiv); -adresare paginat; De obicei microprocesoarele nu admit combinarea oricrei insruciuni cu orice mod de adresare. Instruciunile de transfer implementeaz cele mai multe moduri de adresare. r r + ( adr +x )
instruciune de ieire (OUT). Utilizatorul are acces la funciile interfeei prin intermediul registrelor acesteia. Registrele de interfa se grupeaz n trei categorii: -registre de control, destinate manevrrii interfeei i perifericului asociat; -registre de stare, cu ajutorul crora se verific condiiile i modul de execuie al operaiilor, precum i erorile aprute; -registre de date, prin care se face transferul propriu zis. Structura simplificat a unei interfee este prezentat n figura urmtoare:
CMD BUS
AD BUS
Registru de control
Registru de date
DATA BUS
Tampon
Registru de date
Tipuri de Interfee
-interfaa paralel permite interconectarea perifericelor cu vitez de lucru ridicat; -interfaa serial permite interconectarea perifericelor cu vitez redus, dar folosind un numr mic de linii (de regul dou sau trei), conform unui standard (RS 232, RS 422, RS 485 etc); -contor/temporizator: este o interfa special folosit ca i contor sau generator de impulsuri programabil; -interfaa video: permite obinerea imaginilor grafice ale caracterelor sau curbelor pe un ecran monitor TV sau cu cristale lichide.
Ciclurile de citire/scriere ale microprocesorului sunt date n diagramele urmtoare: Ciclu de citire T1 CLK AD BUS MRQ , IRQ RD DATA BUS Dat stabil Adres stabil dres stabil T2 T3
Ciclu de scriere T1 CLK AD BUS MRQ , IRQ WR DATA BUS Dat stabil Adres stabil T2 T3
nti microprocesorul pune o adres valid pe liniile AD BUS (locaie de memories sau registru I/O), apoi activeaz pe rnd semnalele care specific natura dispozitivului ( MRQ sau IORQ ) i apoi operaia dorit ( RD sau WR ). n timpul ciclului de citire, microprocesorul ateapt dispozitivul adresat s pun pe magistrala de date un cuvnt valid, pe care-l preia spre sfritul ciclului.Dac dispozitivul nu poate rspunde n timp util, el poate folosi dezactivarea liniei READY, fornd microprocesorul s atepte. Folosirea liniei READY pentru sincronizarea cu dispozitive lente determin microprocesorul s insereze automat o succesiune de stri de ateptare, acestea sunt introduse n interiorul ciclului, lungindu-i convenabil durata. Dac dispozitivul adresat nu activeaz linia READY, sistemul se poate bloca.
O problem important n orice sistem de calcul este sincronizarea activitii microprocesorului cu evenimentele externe. Toate aceste evenimente au un punct comun: sunt asincrone n raport cu execuia programului de ctre procesor. Programul trebuie informat printr-un mijloc oarecare c un astfel de eveniment s-a produs i c trebuie tratat corespunztor (printr-o secven specific numit rutin de tratare). Exist trei tipuri de mecanisme utilizate pentru tratarea evenimentelor externe: - ateptarea (bucla) programat; - ntreruperi; - accesul direct la memorie. Ateptarea programat n forma sa cea mai simpl, const ntr-o secven de program care citete n permanen o informaie de stare i testeaz un indicator, pentru a afla dac evenimentele au avut loc. Procesorul nu execut nici o alt activitate pn ce evenimentul nu s-a produs rezultnd timpi inutilizabili pentru sistem. ntreruperi Sunt faciliti hardware oferite de microprocesoare, prin care un dispozitiv periferic atrage atenia asupra producerii unor evenimente externe ce reclam o intervenie prompt. nainte ca o ntrerupere s poat avea loc, este necesar s se ndeplineasc condiiile: -perifericul n cauz trebuie s fie capabil s genereze o ntrerupere; -sistemul trebuie s posede toate mecanismele hardware de transmitere a semnalului de ntrerupere de la periferic la CPU; -programul ce se execut de microprocesor trebuie s conin secvene de cod special destinate lucrului cu ntreruperi (rutine de tratare a ntreruperilor); -perifericul trebuie s genereze semnalul de ntrerupere. Apariia unei ntreruperi n activitatea curent a microproesorului determin urmtoarea secven de evenimente: -instruciunea n curs de execuie se ncheie normal; -starea intern a procesorului (registrul de stare i contorul de program) este salvat pentru a permite mai trziu reluarea activitii din locul unde a fost ntrerupt; -microprocesorul ncarc noi informaii de stare i execut un salt de la o rutin de tratare specific, ce realizeaz toate aciunile urgente implicate de apariia evenimentului; -la sfritul rutinei de tratare (marcat cu o instruciune de revenire din ntrerupere IRET) se restaureaz starea procesorului salvat anterior; -restaurarea este ncheiat cu rencrcarea contorului de program cu valoarea salvat i prin aceasta, reluarea programului ntrerupt. Observaii -tratarea ntreruperii trebuie s nlture cauza apariiei acesteia, astfel secvena de mai sus se poate repeta; -dac sosesc noi ntreruperi de aceeai natur, n timpul execuiei rutinei de tratare, se poate ajunge la situaia ca aceasta s fie restartat recursive, pn la apariia unor erori sau pierderea controlului asupra programului; -procesoarele actuale suport instruciuni ce permit activarea, respectiv dezactivarea tratrii ntreruperilor. Pe baza acestora se pot elimina ntreruperile neprevzute. Microprocesoarele mai simple sunt dotate cu o singur intare pentru semnale de ntrerupere (INT), dar cele mai multe posed o intrare suplimentar (NMI), care permite tratarea unor evenimente imperative, motiv pentru care nu exist nici un mecanism intern de inhibare a acestora (ntreruperi nemascabile). O problem important apare la conectarea ntreruperilor de la mai multe periferice. Cum pot fi luate acestea n considerare dac microprocesorul dispune doar de o singur intrare INT. Rspunsul este dat de introducerea unui mecanism de multiplexare/arbitrare a cererilor de ntrerupere, bazat pe o logic cu prioriti. 13
O soluie este folosirea unui controler de ntreruperi. Acesta dispune de un codor de prioriti care determin solicitantul cu cel mai mare nivel de prioritate i genereaz semnalul de ntrerupere ctre procesor. n momentul acceptrii ntreruperii, controlerul pune pe magistral un cuvnt de identificare al perifericului solicitant, astfel nct microprocesorul s fie capabil s activeze rutina de tratare specificat. O alt soluie este cea n care logica de arbitrare i multiplexare a fost distribuit chiar n circuitele de interfa. Fiecare circuit are o intrare de autorizare a ntreruperilor (IEI) i o ieire de semnalizare a activitii ctre perifericul urmtor (IEO). Dac IEI1, atunci perifericul n cauz poate genera o ntrerupere. Dac acelai periferic se afl n curs de tratare, el va pune IEO0. Un dispozitiv cu IEI0 este obligat s transmit IEO0. Prioritatea este stabilit pe baza poziiei fizice a perifericului ntr-un lan de prioriti. Odat generat ntreruperea i acceptat de procesor, perifericul i va pune cuvntul de identificare pe magistral, pentru a permite activarea rutinei de tratare corect.
Periferic 1
Periferic 2
Controler de 1 ntreruperi
INT
MICROPROCESOR
Periferic n
1 IEI
NMI
Periferic 1 IEO ntrerupere nemascabil IEI Periferic 2 IEO NMI IEI Periferic n IEO 14 ntrerupere nemascabil INT MICROPROCESOR
Microprocesor
Avantajul imediat al tehnicii de transfer prin acces direct la memorie este c acesta permite eliberarea procesorului de sarcina gestionrii directe a intrrilor i ieirilor de date din sistem: este suficient s programm controlerul DMA pentru citirea unui bloc de date de la un periferic (de exemplu. CAN), dup care procesorul este liber s realizeze o alt activitate ce nu are nevoie de datele solicitate. Unitatea de transfer a datelor prin DMA este blocul, de aceea la sfritul transferului este considerat a fi epuizarea blocului de date.
Microcontrolerul 8051(INTEL)
Familia de microcontrolere de 8 bii MCS51 lansat i produs de Intel a devenit practic un standard industrial. Ea a stat la baza dezvoltrii de microcontrolere compatibile realizate de firme ca: Philips, Siemens, Dallas, etc. Arhitectura MCS51 este optimizat pentru aplicaii de control. Intel ofer o gam larg de microcontrolere compatibile cu 8051 ce difer ntre ele doar prin opiuni i tehnologie. Principalele caracteristici ale familiei MCS51 sunt prezentate n tabelul urmtor: CHIP 8031 8051 80C51 8032 8052 80C52 89C52 ROM intern 4k 4k 8k 8k 8k Flash RAM intern 128 128 128 256 256 256 256 Timere 16 biti 2 2 2 3 3 3 3 Surse int. 5 5 5 6 6 6 6
Microcontrolerul 8051 are n structura sa: unitate aritmetica i logic de 8 bii ce poate executa operaii de adunare, scdere, nmulire, mprire, incrementare, I, SAU, SAU Exclusiv, complementare i rotire, memorie de program de tip ROM 4k octei memorie de date RAM 128 octei 4 porturi paralele de intrare/ieire P0 P3 de 8 bii un port serial duplex dou circuite numrtoare/temporizatoare N/T0, N/T1 de cte 16 bii 16
5 surse de ntrerupere cu dou nivele de prioriti generator de tact 1, 2 12 MH z Deasemenea microcontrolerul are posibilitatea de adresare a unei memorii externe de program i a unei memorii externe de date cu capacitate maxim de 64k octei. Toate microcontrolerele din familia MCS51 au spaiu separat pentru memoria de date i de program. Acest lucru permite o cretere de vitez datorat att suprapunerii pariale a unor microoperatii, ct i crearea posibilitatii de adresare scurt (cu un singur octet de adres). Memoria de program poate fi doar citit. La 8051 primii 4k octei de program sunt n chip. Restul se afl n exterior, iar pentru a citi aceast memorie de program extern se folosete semnalul PSEN (Program Store Enable). Memoria de date ocup un spaiu separat fa de memoria program. La 8051 exist 128 octei RAM n chip. Memoria de date extern poate fi accesat prin generarea de ctre unitatea central a semnalelor de citire RD sau scriere WR. Memoria de program i cea de date (extern) pot fi combinate dac dorim prin folosirea semnalelor RD si PSEN pentru a genera smnal de citire pentru o memorie comun n care s avem att memorie program ct i memorie de date.
Memoria de program
Dup reset CPU i ncepe execuia de la adresa 0000H unde trebuie s existe o instruciune de salt peste zona vectorilor de ntrerupere. Aceast zon ncepe de la adresa 0003H unde este plasat rutina de tratare a ntreruperii externe INTR0. Harta memoriei program arat astfel:
FFFFh FFFFh
sau
ROM extern
0000h
Adresele vectorilor de tratare a ntreruperilor sunt: 0003h INTRO 0 000Bh Timer 0 0013h INTR 1 001Bh Timer 1 0023h Seriala 002Bh Timer 2 (doar pentru 8x52) Dac rutina de tratare a ntreruperii este foarte scurt ea poate fi plasat n cei 8 octei rezervai. Rutinele mai lungi pot folosi o instruciune de salt peste locaiile rezervate ntreruperilor urmtoare, dac acestea se folosesc. Cei 4k octei (8k octei la 8x52) de memorie program pot fi n capsul sau extern. Aceast selecie este posibil folosind linia EA (External Acces). Daca EA=0 se acceseaz 64k octei memorie extern. Dac EA=1, atunci se execut program din: - memoria intern 4k octei (0000h-0FFFh); - memoria externa de pn la 64k octei ntre adresele 1000h i FFFFh.
17
n timpul execuiei programului din memoria intern nu se genereaz semnalul PSEN. Porturile P0 i P2 sunt dedicate pentru a se folosi ca magistral de adres. Deasemenea P0 este folosit i ca magistral de date prin multiplexarea adreselor A0-A7 i datelor D0-D7. Modul de conectare al memoriei program este prezentat n continuare:
P0 DO-D7
80C51
ALE P2 PSEN
LATCH
AO-A7
STB
MEM
PROG
A8-A15 OE
Pentru citirea memoriei program se emite octetul inferior al PC (Program Counter) ca o adres la portul P0. Cu ajutorul semnalului ALE (Adress Catch Enable) se nscrie aceast adres ntr-un latch. ntre timp la portul P2 se emite octetul superior al PC. Odat ce adresa este stabil se activeaz semnalul PSEN pentru citirea datelor din memoria de program, date care sunt citite de portul P0.
Adresarea memoriei program se face ntotdeauna pe 16 bii. Execuia programelor din memoria program extern sacrific astfel dou porturi P0 i P2.
R0
R1
R2
R3
R4
R5
R6
R7 07h
Spaiul 00h-07h reprezint, dup reset, grupul de registre R0-R7 utilizate pentru surse sau destinaii n multe instruciuni ca: ADD A,Rn MOV Rn,#data 18
ntr-o astfel de instruciune, registrele R0-R7 sunt adresate direct cu un cmp de 3 bii (n = 0 7) cuprins mpreun cu codul operaiei, n primul octet corespunztor codului main al instruciunii. Ex: ADD A,Rn ADD A,R0 ADD A,R1 .................... ADD A,R7 cod instr.: 0010.1rrr 28h 29h 2Fh
Registrele R0 i R1 sunt utilizate i pentru adresarea indirect a memoriei de date interne ca de exemplu, n instruciunile: MOV A,@Ri ADD A,@Ri INC @Ri n aceste instruciuni indicele i cu valorile 0 sau 1 este precizat n primul cuvnt din codul main printr-un bit. Deasemenea, registrele R0 i R1 sunt utilizate pentru adresarea indirect a memoriei de date externe n instruciunile: MOVX A,@Ri MOVX @Ri,A n aceste instruciuni, coninutul registrului R0 sau R1 reprezint octetul mai puin semnificativ al adresei. Octetul mai semnificativ al adresei este dat de portul P2. Exist posibilitatea ca, prin programarea biilor RS1 i RS0 ai registrului de stare a programului (PSW), grupul de registre R0-R7 s fie ales conform tabelului: PSW.4 RS1 0 0 1 1 PSW.3 RS0 0 1 0 1 Adresa grupului R0-R7 00h-07h 08h-0Fh 10h-17h 18h-1Fh
Locaiile memoriei din spaiul 20h-2Fh reprezint o zon de memorie adresabil i la nivel de bit n instruciuni de tipul: CPL bit JB bit,rel Adresarea biilor se realizeaz direct, cu un octet coninut n codul main al instruciunii corespunzatoare. Ex: CPL CPL C bit are codul are codul 10110011 10110010 adr.bit
Zona de memorie 80h-FFh este o zon de memorie cu acces direct i pe bit folosit pentru registrele cu funciuni speciale. La microcontrolerul 8x52 aceast zon este dublat cu o zon de memorie RAM dar la care accesul se face numai indirect. Astfel memoria intern de date arat astfel:
19
FFh
80h 7Fh
00h Memoria intern de date este utilizat deasemenea pentru stiv. Registrul indicator de stiv SP este ncrcat, dup reset, cu valoarea 07h. Exist posibilitatea de modificare a zonei din memoria intern de date utilizat pentru stiv, prin ncrcarea altei valori n registrul SP. De exemplu prin ncarcarea valorii 2Fh n registrul SP stiva ncepe de la valoarea 30h.
Indicatorul de depire OV (PSW.2) se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni de adunare dac s-a produs un transport din poziia bitului 6 i nu s-a produs un transport din poziia bitului 7 indicnd astfel depirea domeniului de valori (128 127) . Indicatorul de paritate P (PSW.0) conine suma modulo 2 a biilor registrului acumulator. La nivel logic 1 indic un numr impar de bii cu nivel logic 1 n acumulator. Bitul P nu este modificat de nici o instruciune de scriere n registrul PSW. Ceilali bii ai PSW sunt: F (PSW.5) disponibil pentru uz general, PSW.1 rezervat pentru dezvoltri ulterioare (nefolosit), RS1 i RS0 (PSW.4 i PSW.3) pentru selecia grupului de registre R0-R7. SBUF registru serial fiind compus de fapt din dou registre separate de 8 bii avnd aceeai adres direct, unul pentru transmisie i unul pentru recepie folosite pentru interfaa serial. Cnd un octet de date este scris n SBUF acesta este plasat n bufferul de transmisie i declanseaz nceputul transmisiei seriale a acestuia. Cnd se realizeaz o recepie se citete coninutul bufferului de recepie. Adresa direct a registrului SBUF este 99H. Registrele de control exist mai multe astfel de registre, care conin bii de control i de stare pentru ntreruperi, temporizatoare/numrtoare i portul serial. Ele vor fi descrise la funciile corespunzatoare. Registrele de temporizare exist dou perechi de registre de cte 8 bii T0 (TH0, TL0) T1 (TH1, TL1) folosite ca numrtoare/temporizatoare de 16 bii programabile n 4 moduri diferite. Celelalte registre interne i funciile acestora vor fi discutate ulterior.
Moduri de adresare
Modurile de adresare folosite de microcontrolerul 8051 sunt: Adresare direct n adresarea direct operandul este specificat de un cmp de 8 bii de adres din instruciune. Doar RAM-ul intern de date i SRF pot fi adresate direct. Ex: MOV A,30h MOV A,DPL Adresarea indirect n adresarea indirect instruciunea specific un registru ce conine adresa operandului. Doar RAM-ul intern i cel extern poate fi adresat indirect. Adresa pe 8 bii a operandului se afl n unul din registrele R0 sau R1. Registrul Ri, i=0 sau 1 este precizat printr-un bit din codul main al instruciunii. Ex: MOV A,@Ri 1110 011I MOV @Ri,A 1111 011I MOV @Ri,direct 1010 011I ADR.DIRECT MOV direct,@Ri 1000 011I ADR.DIRECT Adresa pe 16 bii a operandului se afl n DPTR fiind folosit pentru transfer de date din memoria RAM extern n instruciuni de tipul: MOVX A,@DPTR MOVX @DPTR,A Instruciuni cu regitrii Instruciunile cu regitrii de lucru interni (R0-R7) au avantajul eliminrii unui octet de adres din instruciune deoarece adresa operandului se poate coda pe 3 bii din codul instruciune. Ex: MOV A,Rn 1110 1rrr MOV Rn,direct 1010 1rrr adr direct Exist i instruciuni specifice orientate pe manevrarea regitrilor. Unele instruciuni opereaz doar n acumulator sau DPTR nefiind necesar nici un octet suplimentar de adres n codul instruciunii. Ex: CLR A 1110 0100 DEC A 0001 0100 DIV A,B 1000 0100 21
JMP MOVX
@A+DPTR A,@DPTR
0111 1110
0011 0000
Constante imediate Valoarea constantei urmeaz codului n memoria program. De exemplu MOV A,#data ncarc valoarea dat n acumulator. Ex: MOV A,#100100 A MOV A,#64H Adresarea indexat Se folosete pentru a accesa memoria de program ce poate fi doar citit. Acest mod se folosete pentru a citi tabele din memoria de program. Registrul de baz de 16 bii (unul din registre DPTR sau PC) indic baza tabelului iar acumulatorul este incrcat cu poziia din tabel dorit. Adresa de citire din tabel rezult ca sum dintre coninutul acumulatorului i pointerul de baz.
Tipuri de instruciuni
Instruciuni aritmetice Aceste instructiuni sunt: Adunare ADD A,<BYTE> Adunare cu C ADDC A,<BYTE> Scdere SUBB A,<BYTE> Incrementare INC <BYTE> Decrementare DEC <BYTE> nmulire MUL AB mprire DIV AB Ajustare zecimal DA Instruciuni logice Instruciunile logice disponibile sunt: ANL A,<BYTE> ANL <BYTE>,A ANL <BYTE>,#data ORL <BYTE>,A ORL A,<BYTE> ORL <BYTE>, #data XRL A,<BYTE> XRL <BYTE>, A XRL <BYTE>,#data CLR A CPL A RL A RLC A RR A RRC A SWAP A O operaie de tipul ANL A,<byte> poate lua una din formele urmtoare: Adresare direct ANL A,30H Adresare indirect ANL A,@R1 Adresare registru ANL A,R6 Adresare imediat ANL A,#100 22
Toate operaiile asupra memoriei de date pot fi executate fr a folosi acumulatorul. De ex. XRL <byte>, #data execut un sau exclusiv ntre octetul de memorie i data imediat fr folosirea acumulatorului. Instruciunea SWAP A schimb ntre ele partea superioar i cea inferioar din acumulator. Instruciuni pentru transferul datelor cu memoria intern Formatul general al instruciunii este: MOV <dest>,<sursa> i permite transferul ntre dou locaii interne RAM sau SRF fr a folosi acumulatorul sau ntre un registru i o locaie de memorie. Trebuie inut cont de faptul c pentru 8052 spaiul de memorie superior celor 128 octei RAM poate fi adresat doar indirect, iar spaiul registrelor cu funcii speciale poate fi adresat doar direct. Stiva se afl n memoria RAM intern i crete spre adresele superioare. Instruciunea PUSH mai nti incrementeaz SP (Stach Pointer) i apoi depune octetul pe stiv. Instruciunile PUSH i POP se folosesc doar n modul de adresare direct pentru a indica octetul ce va fi salvat sau restaurat. Dac stiva depete cei 128 de octei din RAM-ul intern, octeii depui n continuare se pierd iar cei restaurai au valori nedeterminate. Instruciunile de transfer includ i instruciuni pe 16 bii care pot fi folosite pentru a iniializa pointerul de date DPTR pentru citiri de tabele din memoria program sau pentru accesul la memoria extern de date. Principalele instruciuni care adreseaz spaiul intern al memoriei de date sunt: MOV A,<src> MOV <dest>,A MOV <dest>,<src> MOV DPTR,#data 16 PUSH <src> POP <dest> XCH A,<byte> XCHD A,@Ri Instruciunea XCH A,<byte> face ca acumulatorul i octetul s-i schimbe valorile ntre ele. Instruciunea XCHD A,@Ri este asemntoare, dar doar cei mai puin semnificativi 4 bii sunt schimbai. Instruciuni pentru transferul datelor cu memoria extern n acest caz poate fi folosit doar adresarea indirect. Alegerea tipului de transfer se face dup numrul de octei de adres. Dac se dorete adresarea cu un singur octet de adres se vor folosi regitrii R0 sau R1. Pentru adresarea cu doi octei de adres se va folosi registrul DPTR. Dezavantajul folosirii adresei pe 16 bii este acela al folosirii portului P2 care astfel nu poate fi folosit pentru aplicaie. Selectarea memoriei externe se face cu operaii de tipul MOVX ce pot fi: MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A Setul de instruciuni al microcontrolerului 8051 conine i dou instruciuni pentru citirea tabelelor din memoria program. Aceste instruciuni sunt: MOVC MOVC A,@A+DPTR A,@A+PC
Instruciunea MOVC A,@A+DPTR transfer intrarea din tabel n acumulator. DPTR este setat s indice nceputul tabelei iar acumulatorul intrarea din tabel. Instruciunea MOVC A,@A+PC se compune din urmtoarele microoperaii:
( PC ) ( PC ) +1 ( A) (( A) + PC )
Folosirea acestui tip de citire a datelor este ilustrat de programul urmtor: MOV A,INTR_TABLE CALL TABLE 23
-----------------Subrutina TABLE va arta astfel: TABLE: MOVC A,@A+PC RET data1 ------dataN Imediat dup instruciunea RET se plaseaz tabela cu intrri de la 1 la 255. Intrarea 0 nu se foloseste deoarece n timpul execuiei instruciunii MOVC, PC-ul conine adresa instruciunii de ntoarcere RET.
Offset relativ
Destinaia adresei unde se face un salt condiionat este specificat n asamblor de un tabel sau de o adres n memoria program. Destinaia se d ca un offset relativ la poziia curent a PC. Aceasta nseamn, n cod complement lui doi, c octetul offset se adun la PC dac saltul are loc. Domeniul de salt este cuprins ntre -128 i +127 octei n memoria program, relativ la primul octet ce urmeaz dup instruciune. Instructiuni de salt Aceste instruciuni sunt: JMP addr JMP @A+DPTR Instruciunea JMP addr ascunde de fapt trei instruciuni: SJMP, AJMP, LJMP 1. SJMP formeaz adresa destinaie ca offset relativ, avnd doi octei coninnd codul operaiei i offsetul relativ. Distana maxim de salt este limitat la -128, +127 octei relativ la instruciunea ce urmeaz dup SJMP. 2. LJMP formeaz adresa de salt ca o constant pe 16 bii. Instruciunea are 3 octei constnd n codul operaiei i doi octei de adres, destinaia fiind oriunde n spaiul de 64 k. 3. AJMP formeaz adresa destinaie ca o constant pe 11 bii. Instruciunea are 2 octei lungime, unul conine codul operaiei din 5 bii i pe 3 bii adresele cele mai semnificative. Al doilea octet conine restul adresei. Adresa de salt poate fi oriunde n spaiul de 2k octei relativ la instruciunea ce urmeaz dup AJMP. JMP @A+DPTR ofer posibiliti de salt pentru lucru cu tabele. Adresa destinaie este obinut ca sum dintre registrul DPTR i coninutul acumulatorului. Adresa de salt este pe 16 bii. n mod uzual DPTR este setat cu adresa tabelului i funcie de adresa acumulatorului avem o anumit specificaie. TABLE:AJMP CASE0 AJMP CASE1 AJMP CASEN MOV DPTR,#TABLE MOV A,INDEX RL A ;nmulire cu doi JMP @A+DPTR Lucrul cu subrutine Apelul unei subrutine se face cu instruciuni de tipul CALL adr. De fapt sunt dou instruciuni LCALL i ACALL cu adresare pe 16 bii, respectiv pe 11 bii. Subrutinele trebuie s se termine cu RET pentru a reveni la instruciunea de dup CALL. ntreruperile se vor termina cu RETI. Salturi condiionate 24
Acestea specific destinaia adresei ca un offset relativ la instructiunea ce urmeaz dup instruciunea de salt. Distana de salt este limitat la -128 la +127 octeti fa de primul octet al instruciunii urmtoare. Nu exist flag z n PSW. Instruciunile JZ i JNZ testeaz direct coninutul acumulatorului dac este zero i n funcie de coninut face saltul sau continu programul. DJNZ este o instruciune de control pentru bucle la fel ca i CJNE. Formatul lor este: DJNZ <byte>, rel CJNE A,<byte>,rel CJNE <byte>,#data,rel Porturile paralele ale 8051 Microcontrolerul 8051 conine patru porturi paralele bidirecionale de cte 8 bii. Fiecare port are un registru intern de 8 bii P0P3 i un amplificator de magistral bidirecional. Prin structura microcontrolerului, porturile paralele pot realiza funcii alternative care determin utilizri specifice ale porturilor. Astfel amplificatoarele de magistral ale porturilor P0 i P2 se utilizeaz pentru accesul memoriilor externe. Portul P1 este un port clasic de intrare/ieire. Liniile portului P3 pot avea utilizri alternative. Portul P1 Un operand surs pentru o instruciune de adresare direct a unui port poate fi dat de coninutul registrului portului sau de nivelele logice ale liniilor (pinilor) portului. Citire bistabil P1.x A1 Linia x Magistral intern comand scriere n bistabil P1.x
D T A2
Q Q T
Rs PIN P1.x
citire P1.x
n instruciunea ANL P1,A un operand surs este coninutul registrului portului P1. n instruciunea ANL A,P1 un operand sursa este dat de nivelele logice corespunztoare ale pinilor portului P1. Aceast logic de funcionare se realizeaz prin comenzi corespunztoare de citire a bistabilelor P1.X, respectiv a pinilor P1.X. Nivelul logic dintr-un bistabil al unui port poate fi diferit de nivelul logic al pinului corespunztor. De ex. Dac ieirea Q a bistabilului P1.X este la nivel logic1, tranzistorul T este blocat i nivelul logic al pinului P1.X poate fi comandat din exterior. Rezistena Rs este o rezisten de sarcin activ cu rolul de a mri viteza de comutare de la nivel logic 0 la nivel logic 1. Aceast mrire de vitez se obine prin generarea de ctre sarcina activ a unui curent de 30 mA pe durata a dou perioade ale generatorului de tact, ncepnd cu frontul de comutare 0 1 logic de la ieirea Q a bistabilului P1.X. Structura unei astfel de rezistene active este :
25
Vcc
0,25mA linie ntrziere
2T0
T1
T2 PIN P1.x
Q
bistabil P1.x
Tranzistorul T2 cu canal iniial, genereaz n permanen un curent de 0,25 mA. n regim staionar avnd Q la nivelul logic 0 sau 1, tranzistorul T1 de tipul cu canal indus, este blocat deoarece nivelele logice de la ntrzierile circuitului SAU_NU sunt complementare. Dup frontul de comutare a semnalului de la nivelul 1 la 0 logic, n intervalul a dou perioade T0 ale generatorului de tact, ntrzierile circuitului SAU_NU sunt la nivelul logic 0 i tranzistorul T1 genereaz un curent de 30 mA. Acest curent mrete viteza de comutare de la nivelul logic 0 la nivelul logic 1 a semnalului de ieire de la pinul P1.X. Portul P3 Portul P3 poate realiza aceleai funciuni ca i portul P1 i n plus poate fi utilizat pentru funcii alternative de intrare sau de la ieire. Pentru realizarea funciei alternative de intrare corespunztoare unui pin P3.X circuitul conine amplificatorul repetor A3 a crui ieire este conectat n structura microcontrolerului n concordan cu funcia alternativ realizat. comand citire bistabil P3.x A1 Vcc Linie x Magistrala interna comanda scriere bistabil P3.X D Q
Bistabil P3.x
Funcie alternativ
Rs PIN P3.x
Q A2 A3 Funcie alternativ
Deasemenea pentru realizarea funciei alternative de intrare este necesar blocarea tranzistorului T care se obine prin aplicarea de nivele logice 1 la intrrile circuitului I-NU. Astfel se impune programarea la nivel logic 1 a bistabilului P3.X. cealalt intrare a circuitului I-NU este conectat intern la nivel logic 1 n circuitul corespunzator unui pin P3.X cu funcie alternative de intrare. Funcia alternativ de ieire corespunztoare unui pin P3.X se realizeaz prin comanda unei intrri n circuitul I-NU, cealalt intrare fiind stabilit la nivel logic 1 prin programarea bistabilului P3.X. n cazul realizrii funciei TXD (pin P3.1) linia de intrare n circuitul I-NU pentru funcia alternativ este la nivel logic 1 cu excepia intervalului corespunztor transmisiei unui caracter, declanat de scrierea unui octet n registrul 26
intern SBUF. n cazul realizrii funciilor WR i RD liniile de intrare n circuitele I-NU pentru funciile alternative sunt la nivel logic1, cu excepia intervalelor corespunztoare ciclurilor de scriere, respectiv citire n/din memoria de date extern. Portul P2 Portul P2 are funcia alternativ de transfer al octetului mai semnificativ al adresei n cicluri de extragere coduri instructiuni din memoria de program extern, n cicluri de citire din memoria de program extern, cu instruciuni MOVC i n cicluri de acces la memoria de date extern cu instruciuni MOVX n care adresarea se realizeaz cu registru DPTR. n aceste cicluri linia de comand adresare este la nivel logic 1 i impune poziia 1 pentru comutatorul k: Comand Bit de adres comand citire adres bistabil P2.x A1 Vcc Linie x Magistrala interna comanda scriere bistabil P2.X D Q
1 0 K
Rs PIN P2.x
Bistabil P2.x
Q A2
comand citire pin P2.x Astfel bitul de adres corespunztor comand ieirea P2.X a portului. Deasemenea, nivelul logic 1 la ieirea circuitului I comand sarcina activ RS astfel nct s genereze un curent mai mare de 0,25 mA dac bitul de adres are nivel logic 1. Se asigur astfel comanda corespunztoare a circuitelor de memorie extern. n afara intervalelor corespunztoare ciclurilor indicate mai sus portul P2 poate fi utilizat pentru intrri/ieiri de uz general. Portul P0 Are funcia alternativ de transfer al octetului mai puin semnificativ al adresei, precum i al octetului cod instruciune sau dat n orice ciclu de acces la memoriile externe. Bit de adres/date Comand adres/date
A1 Vcc Linie x Magistrala interna comanda scriere bistabil P0.X comand citire pin P0.x 27 D Q
1 K 0
Ts PIN P0.x
Bistabil P0.x
Q A2
n intervalele corespunztoare acestor cicluri, linia de comand adresare/transfer date, este la nivel logic 1 i impune poziia 1 pentru comutatorul k. Astfel prin liniile portului P0 se poate realiza transferul adresei i datei de intrare sau ieire, prin multiplexarea n timp. La ieirea circuitului I se obine nivel logic 1 care deschide tranzistorul TS n intervalele de transfer bii de adres cu nivel logic 1, sau de ieire bii de date cu nivel logic 1. n afara acestor intervale, tranzistorul Ts este blocat. n ciclurile de acces la memoriile externe, bistabilele (biii) registrului P0 se ncarc cu nivele logice 1. n afara ciclurilor de acces la memoriile externe, portul P0 poate fi utilizat pentru intrri/ieiri de uz general. Ieirile P0.X sunt de tipul dren n gol (Ts-blocat), iar intrrile P0.X sunt de impedan ridicat (T i T S = blocate, Q = 1 prin programare). Funcionarea sincronizat a microcontrolerului 8051 Pentru funcionarea sincronizat, microcontrolerul conine un generator de tact. Semnalul de comand al generatorului de tact este dat de un oscilator cu frecvena maxim f 0 = 12 MHz . Pentru realizarea oscilatorului, microcontrolerul conine un circuit inversor cu intrarea i ieirea conectate la pinii XTAL1 i XTAL2. Configuraia de oscilator se obine prin conectarea ntre pinii XTAL1 i XTAL2 a unui cristal de cuar i a doi condensatori conectai de la cei doi pini la mas. Funcionarea sincronizat a microcontrolerului se desfoar n faze, stri i cicluri main. O faz a microcontrolerului corespunde duratei T0 = 1 / R0 a perioadei de tact. Dou faze succesive notate P1, P2 definesc o stare a microcontrolerului. Un ciclu main se desfoar pe durata a 12 perioade T0 adic 6 stri. Cele 12 perioade ale unui ciclu main sunt notate S1P1, S1P2, S2P1, S2P2, . S6P1, S6P2. Microcontrolerul 8051 execut o instruciune n unul sau dou cicluri main cu excepia instruciunilor de multiplicare i divizare ce se realizeaz n 4 cicli main. CLK P1 S1 P2 P1 S2 P2 P1 S3 P2
t
FAZA STARE
Execuia unei instruciuni ncepe n faza S1P1 a unui ciclu main prin extragerea din memoria program a primului octet al instruciunii i transferul acestuia n registrul de instruciuni al microcontrolerului n faza S1P2. n cazul unei instruciuni cu codul main de doi oceti, al doilea octet se extrage din memoria program n starea S4 a aceluiai ciclu main. Rezult c intr-un ciclu main se pot efectua dou extrageri de coduri instruciune. Dac este nevoie i de cel de-al treilea octet, acesta se va extrage n faza S1P2 a celui de-al doilea ciclu main. n strile n care se face extragere de cod instruciunea are loc i incrementarea contorului de program PC. Execuia unei instruciuni se termin n faza S6P2 a ciclului main corespunztor. Pentru accesul memoriilor externe, adresa se formeaz din valoarea portului P2 (octetul superior) i valoarea portului P0 (octetul inferior). Transferul unui octet de date se face prin liniile portului P0. rezult c portul P0 este folosit att pentru adrese ct i pentru date prin tehnici de multiplexare. Se impune astfel memorarea temporar ntr-un registru extern a octetului mai puin semnificativ al adresei. Memorarea adresei inferioare n registru se realizeaz pe baza semnalului de validare registru de adresare ALE. Pentru selecia diferit a celor dou tipuri de memorie (de program i RAM) microcontrolerul genereaz semnalul PSEN pentru validarea memoriei de 28
program extern i semanlele RD i WR pentru memoria de date extern. Diagramele de timp corespunzatoare extragerii de coduri instruciuni din memorii program sunt:
CLK S2 S3 S4 S5 S6
S1
ALE
PSEN
P0-P7
PC L
COD INSTRUCTIUNE
PC L
COD INSTRUCTIUNE
A0-A7
PCL
A15-A8 P2.7-P2.0
PCL
P C H
PCH
PCH
Circuitele de numrare/temporizare ale microcontrolerului 8051 Microcontrolerul 8051 conine dou circuite de numrare/temporizare notate cu N/T0 i N/T1. Fiecare circuit conine dou registre numrtoare de cte 8 bii , TH0, TL0, TH1, TL1 din grupul registrelor cu funcii speciale. Structura unui circuit numrtor/temporizator este prezentat n figura de mai jos. Funcia de temporizare se realizeaz prin numarare de impulsuri cu o frecvena egal cu frecvena oscilatorului divizat cu 12. Rezult c frecvena pentru temporizare avnd f0=12 MHz este f=1 MHz. Funcia de numrare se realizeaz prin numrarea fronturilor de cdere ale semnalului aplicat la pinul Ti al microcontrolerului. Aceste fronturi se detecteaz prin testarea de ctre microcontroler a strii liniei Ti n fazele S5P2 ale ciclurilor main. Se consider detectat un front de cdere dac n fazele S5P2 din dou cicluri main consecutive rezultatul testrii va fi un nivel logic 1 urmat de un nivel 0 logic. Detecia unui front de cdere determin incrementarea cu o unitate a coninutului registrului numrator n faza S3P1 a ciclului main 29
urmtor detectrii frontului de cdere. Rezult c funcia de numrare a fronturilor de cdere ale semnalului extern aplicat pinului Ti se efectueaz corect dac fiecare nivel corespunztor acestui semnal este meninut pe o durat mai mare dect durata unui ciclu main. Astfel frecvena maxim a semnalului de la linia de intrare Ti este f0/24 adic 500KHz pentru f0=12MHz.
Generator de tact
f0
Divizor frecven ()
f0/12
C/Ti (TMOD)
0
K1
K2
1
Ti
PIN P3.i+4
1
GATE i (TMOD)
TR i (TCON)
TF i (TCON)
/ INTi
PIN P3.i+2
Cerere ntrerupere
Pentru controlul funcionrii circuitelor numrtoare/temporizatoare se utilizeaz registrele interne TMOD i TCON din grupul registrelor cu funcii speciale. Funcia de numrare sau temporizare se realizeaz prin comanda corespunztoare a comutatorului K1. Acest comutator este comandat de bitul C/Ti din registrul TMOD (C/T0=TMOD.2, C/T1=TMOD.6). Dup cum rezult i din figura anterioar vom avea: C/Ti = 0 temporizator C/Ti = 1 numrtor Declanarea i blocarea proceselor de numrare/temporizare, corespunztoare poziiilor cuplat respectiv decuplat ale comutatorului K2 se pot stabili prin programarea biilor TRi din registrul TCON i GATEi din registrul TMOD i prin semnal extern conectat la pinul INTi al microcontrolerului. Comanda proceselor de numrare/temporizare se poate realiza prin program prin stabilirea bitului GATEi la nivelul logic 0. n acest caz declanarea i blocarea se comand prin programarea bitului TRi. Dac biii GATEi i TRi se programeaz la nivel logic 1, comanda se realizeaz cu semnalul conectat la intrarea INTi a microcontrolerului. Procesele de numrare/temporizare evolueaz n sensul creterii coninutului registrului numrtor. La depirea valorii maxime corespunztoare capacitii numrtorului, bitul indicator de depire TFi din registrul TCON este poziionat la nivel logic 1 semnaliznd o cerere de ntrerupere. Coninutul numrtorului devine zero sau se ncarc cu o valoare programat n funcie de modul de lucru al circuitului numrtor/temporizator. Bitul indicator de depire se poziioneaz la nivelul logic 0 dup acceptarea cererii de ntrerupere de ctre logica de control. Exist 4 moduri de lucru n funcie de modul de utilizare al registrelor TLi i THi. Selecia modului de lucru se realizeaz prin programarea biilor M1 i M0 (TMOD.1, TMOD.0) pentru N/T0 si M1 si M0 (TMOD.5, TMOD.4) pentru N/T1.\ n modul 0 registrul numrtor este de 13 bii format din registrul TH i cei mai puin semnificativi 5 bii ai registrului TL. Reg. TL TL.4 TL.0 Reg. TL TH.7 TH.0 30
Coninutul registrului astfel obinut este incrementat pn la valoarea maxim. Urmtoarea incrementare duce la anularea coninutului numrtorului. n modul 1 registrul numrtor este de 8 bii format din registrul TL ca n fig. urmtoare: Reg. TL TL.7 TL.0
TF
Reg. TL TH.7 TH.0 La depirea capacitii de numrare, registrul TL se ncarc cu coninutul registrului TH. Accest mod de lucru este util pentru temporizri cu valori programabile. Durata temporizrii este dat de perioada cu care apar depiri ale capacitii de numrare. Rezult c durata temporizrii este dat de:
T = 12 [256 (TH )] f0
n modul de lucru 3 cele dou circuite de numrare/temporizare opereaz n mod diferit. Circuitul N/T0 conine ca numrtor registrul TL0. n plus registrul TH0 este inclus ntr-o structur de temporizator care utilizeaz biii TR1 i TF1 corespunztori circuitului N/T1 n celelalte moduri de lucru. f0/12 K REG TH0
TF1 TCON.7
Cerere ntrerupere
TR1 TMOD.6
Prin programarea circuitului N/T0 n modul 3 i a circutului N/T1 n modurile 0, 1 sau 2, comutatorul K2 este cuplat indiferent de circuitul de comand. Blocarea procesului de numrare se poate face prin programarea modului 3 pentru circuitul N/T1. Circuitul N/T1 n modul 3 nu poate efectua cereri de ntreruperi, iar declanarea numrtorului 1 se face doar prin programarea in alt mod de lucru. Portul serial al microcontrolerului 8051
31
Este utilizat pentru transferul de informaie ntre microcontroler i componentele externe sistemului cu comunicaie serial. Transferul serial al unui cuvnt de la emitor la receptor se realizeaz prin conversia paralel-serie a cuvntului i apoi conversia serie-paralel. Comunicaia serial ntre dou echipamente poate realiza transferul de informaie n ambele sensuri alternativ printr-o singur linie (comunicaie semiduplex) sau simultan prin dou linii (comunicaie duplex). n cazul comunicaiei asincrone, transferul cuvintelor dintr-un mesaj se poate realiza la intervale de timp variabile. Un cuvnt conine o secven de 8 sau 9 bii de date. Transmisia presupune ncrcarea succesiv a liniei de comunicaie cu biii corespunztori cuvntului de transmis, cu frecvena de comunicaie fc exprimat n bii/s. Recepia const n testarea periodic a strii liniei de comunicaie n scopul citirii secvenei de bii de date. Pentru transferul corect al unui cuvnt este necesar ca receptorul s citeasc starea liniei de comunicaie cu aceeai frecven i faz cu care se ncarc biii cuvntului la emisie. Sincronizarea de faz a circuitului de recepie cu cel de emisie se realizeaz pe baza frontului de cdere corespunztor bitului de start. Dup bitul de start cu nivel logic 0 urmeaz emisia biilor de date (8 sau 9) ncepnd cu bitul de semnificaie minim (LSB). Ultimul bit de date emis poate fi bit de paritate utilizat pentru verificarea corectitudinii cuvntului recepionat. Dup ultimul bit de date urmeaz un bit de stop cu nivel logic 1.
BIT START
BIT Data.0
BIT Data.7
LS B 1/fc
MS B
Portul serial al microcontrolerului 8051 poate fi utilizat pentru comunicaie serial asincron de tip duplex prin liniile de transmisie TXD (P3.1) respectiv recepie RXD (P3.0). Microcontrolerul 8051 are 2 registre interne notate SBUF, unul pentru transmisie i unul pentru recepie. Cele dou registre au aceeai adres 99H. Adresarea direct ca i operand surs a adresei 99H se refer la registrul SBUF de recepie. Adresarea direct ca i operand destinaie a adresei 99H se refer la registrul SBUF de transmisie. Pentru recepie, portul serial utilizeaz un registru de deplasare care realizeaz conversia serie paralel a datelor de pe linia de recepie. Coninutul registrului de deplasare este transferat n registrul SBUF doar dup asamblarea complet a unui octet. Dup transferul octetului din registrul de deplasare n registrul de recepie SBUF se poate trece la obinerea unui nou octet n registrul de deplasare nainte de citirea octetului precedent din registrul de recepie SBUF. Dac citirea octetului precedent nu se realizeaz nainte de terminarea asamblrii noului octet, rezult pierderea octetului precedent. Portul serial al microcontrolerului 8051 poate funciona n 4 moduri de lucru stabilite prin programarea biilor SM0 i SM1 din registrul de control al portului serial SCON. Modul 0 Se folosete pentru realizarea unei comunicaii semiduplex. Astfel, linia RXD se utilizeaz alternativ pentru recepia sau transmisia unor secvene de 8 bii de date cu frecvena de comunicaie f 0 / 12 bii/s (f0 frecvena oscilatorului de tact). Semnalul cu frecvena de comunicaie f 0 / 12 este disponibil la linia TXD. Declanarea transmisiei se realizeaz prin ncrcarea unui octet n registrul SBUF. La sfritul transmisiei celor 8 bii de date, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere la transmisie Ti preciznd posibilitatea de ncrcare a unui octet n registrul de transmisie. Declanarea recepiei se realizeaz dac bitul de validare a recepiei REN este programat la nivel 1. La sfritul recepiei celor 8 bii de date, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere la recepie Ri.
32
Modurile de lucru 1, 2, 3 ale portului serial se utilizeaz pentru comunicaie asincron de tip duplex. Astfel se realizeaz transmisia prin linia TXD i recepia prin linia RXD a unor cuvinte ce conin un bit de start cu nivel 0, 8 bii de date i un bit de stop cu nivel 1. n modurile 2 i 3, cuvintele conin i un bit cu nivel logic programabil ce urmeaz celor 8 bii de date. n modurile 1,2,3 declanarea transmisiei se realizeaz prin scrierea octetului de transmis n registrul SBUF. La nceputul transmisiei bitului de stop, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere Ti. Validarea recepiei se face prin programarea la nivel 1 a bitului de validare recepie REN. Declanarea recepiei unui cuvnt se realizeaz de frontul de cdere al bitului de start. Dac bitul SM2 (SCON.5) este programat la nivel 0, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere la recepie Ri, la mijlocul intervalului de recepie a bitului de stop corespunztor cuvntului recepionat. Dac bitul SM2 (SCON.5) este programat la nivel 1, portul serial poziioneaz la nivel 1 bitul indicator de ntrerupere la recepie Ri, numai dac bitul urmtor celor 8 bii de date (RB8) are nivel 1. Deoarece n modurile 2 i 3, nivelul logic al bitului urmtor celor 8 bii de date poate fi programat la transmisie n TB8, rezult posibilitatea de recepie selectiv in funcie de SM2 a cuvintelor ncrcate pe o linie de comunicaie. Acest lucru poate fi folosit pentru comunicaii multiprocesor. Un cuvnt de comand conine 8 bii de date cu adresa unui microprocesor din sistem i un bit urmtor cu nivel 1. Un cuvnt de date conine dup cei 8 bii de date un bit cu nivel 1. Porturile seriale ale microcontrolerelor 8051 din sistem sunt programate n modurile 2 sau 3 i cu SM2 la nivel 1. Astfel recepia unui cuvnt de comand poziioneaz la nivel 1 bitul Ri din fiecare microcontroler. Subrutina de ntrerupere analizeaz cei 8 bii ce pot fi de adres. Microcontrolerul ce recunoate propria C din sistem adres poziioneaz SM2 la 0 pentru a recepiona cuvintele de date ce urmeaz. Celelalte menin SM2=1 i nu genereaz ntrerupere de recepie. n modurile 1 i 3 valoarea frecvenei de comunicaie poate fi stabilit prin programare. Pentru aceasta se folosete Timerul 1 ca generator de frecven de comunicaie programat n modul 2.
fc = 2 ( SMOD ) f0 32 12 [256 (TH 1)]
unde, SMOD este un bit din PCON. De cele mai multe ori utilizatorul tie frecvena de comunicaie i dorete s tie valoarea ce trebuie nscris n TH1. TH 1 = 256 2 ( SMOD ) f 0 32 12 f c
THi trebuie s fie o valoare ntreag. Rotunjind pe TH1 la ntregul cel mai apropiat se produce o modificare a frecvenei de comunicaie iar utilizatorul trebuie s schimbe valoarea cuarului. Ex:
f c = 9600 biti/sec. f 0 = 12 MHz TH 1 = 249,5 (SMOD) = 0 f TH 1 = 249 = 8928 biti/sec. se impune schimbarea cuartului f THI = 10416 biti/sec.
33
Comand Date
(SM2=1) rec.adr. (SM2=0) rec.date cel cu adr.01C (SM2=1) pt. adr. BAD
Sistemul de ntreruperi al C8051 Sursele de cereri de ntreruperi pentru C 8051 sunt externe i interne. Sursele externe transmit cererile de ntrerupere prin pinii INT0(P3.2) i INT1( P3.3) ai microcontrolerului. Sursele interne de ntrerupere sunt circuite de numrare/temporizare N / T0 , N / T1 i portul serial. Cererile de ntrerupere generate de sursele de ntrerupere poziioneaz la nivel 1 biii corespunztori din registrele interne TCON i SCON dup cum urmeaz: - IE0 (TCON.1) si IE1 (TCON.3) pentru ntreruperi externe - TF0 (TCON.5) i TF1 (TCON.7) pentru ntreruperi de la circuitele de numrare/temporizare. - Ri (SCON.0) i Ti (SCON.1) pentru ntreruperi de la portul serial. Strile acestor bii indicatori de cereri de ntrerupere sunt testate de logica de control a ntreruperilor microcontrolerului n faza S5P2 a fiecrui ciclu main. Astfel logica de control a ntreruperilor identific sursele care solicit ntrerupere i asigur apelul subrutinei de ntrerupere corespunztoare unei surse, n concordan cu condiiile de validare i prioritile stabilite pentru surse prin programare. Strile biilor indicatori de cereri de ntrerupere pot fi stabilite prin programare. O surs extern poate solicita o cerere de ntrerupere prin comanda pinului INT 0 sau INT1` cu nivel logic 0 sau cu un front de cdere, n funcie de nivelul logic programat n bitul IT0 sau IT1. n cazul variantei de cerere de ntrerupere extern prin nivel, bitul IEi urmrete n permanen nivelul logic de comand a intrrii INT i . Astfel, o cerere de ntrerupere indicat prin nivel logic 1 al bitului IEi corespunde nivelului logic 0 de comand a pinului INT i , avnd n vedere prezena circuitului inversor. Nivelul logic 0 corespunztor unei cereri de ntrerupere extern prin nivel trebuie meninut pn la apelul de ctre microcontroler a subrutinei de ntrerupere corespunztoare. Comanda liniei INT i la nivel 1 trebuie s se efectueze nainte de sfritul execuiei subrutinei de ntrerupere corespunztoare, pentru a se evita apelul repetat al acesteia. n cazul variantei de cerere de ntrerupere prin front de cdere, bitul IEi este poziionat la nivel 1 de un front de cdere prezent la intrarea INT i . Detecia fronturilor de cdere se realizeaz prin eantionarea strii intrrii INT i cu frecvena ciclurilor main. Rezult c pentru detecia corect a unui front de cdere este necesar comanda intrrii INT i cu nivel 1, apoi cu nivel 0, fiecare nivel logic trebuind s fie meninut pe o durat cel putin egal cu durata unui ciclu main. Nivelul logic1 din bitul IEi, rezultat ca urmare a deteciei unui front de cdere, se menine pn la apelul de ctre microcontroler a subrutinei de ntrerupere corespunzatoare, cnd bitul IEi este poziionat la nivel 0 de ctre logica de control a microcontrolerului.
34
IT0 TCON.0
0 1 K1
IE0 TCON.1
TF0 TCON.5
IT1 TCON.2
0 1 K2
IE1 TCON.3
N/T0
TF1 TCON.7
35
Cererile de ntrerupere de la un circuit de numrare/temporizare N/Ti0, i=0, 1, sunt generate la depirea valorii maxime corespunztoare capacitii numrtorului, cnd bitul indicator de depire TFi se poziioneaz la nivel logic 1. La apelul subrutinei de ntrerupere corespunztoare, bitul TFi este poziionat la nivel logic 0 de ctre logica de control a ntreruperilor microntrolerului. Cererile de ntrerupere de la portul serial sunt generate de la sfritul transmisiei sau recepiei unui cuvnt, cnd biii indicatori de cereri de ntrerupere Ti respectiv Ri se poziioneaz la nivelul logic 1. La apelul subrutinei de ntrerupere corespunztoare, strile biilor Ti i Ri nu sunt modificate de ctre logica de control a ntreruperilor microcontrolerului, astfel subrutina de ntrerupere se testeaz biii Ri i Ti pentru determinarea tipului de ntrerupere (recepie respectiv transmisie) i apoi se programeaz nivelul logic n biii Ri i Ti. Sursele de cereri de ntreruperi pentru microcontrolerul 8051 sunt mascabile. Astfel validarea sau invalidarea acceptrii de ctre microcontroler a cererilor de ntreruperi corespunztoare diferitelor surse se pot stabili prin programarea registrului de validare ntrerupere IE. Invalidarea tuturor surselor de cereri de ntrerupere se realizeaz prin programarea bitului EA (IE.7). La nivel logic 0. Dac bitul EA este programat la nivel 1 validarea sau invalidarea surselor de cereri de ntrerupere se programeaz independent pentru fiecare surs utiliznd biii de validare a ntreruperilor din registrul IE, dup cum urmeaz: EX0 (IE.0) pentru INT0 ET0 (IE.1) pentru N/T0 EX1 (IE.2) pentru INT1 ET1 (IE.3) pentru N/T1 ES (IE.4) pentru portul serial Programarea nivelului logic 1 n bitul IE.i conduce la validarea sursei de cereri de ntrerupere corespunztoare. Sistemul de prioriti al ntreruperilor Sistemul de prioriti pentru deservirea cererilor de ntrerupere cuprinde dou nivele de prioritate. Fiecare surs de cerere de ntrerupere poate fi plasat n unul din cele dou niveluri de prioritate, prin programarea corespunztoare a biilor registrului de control a prioritii ntreruperilor IP dup cum urmeaz: PX0 (IP.0) pentru INT0 PT0 (IP.1) pentru N/T0 PX1 (IP.2) pentru INT1 PT1 (IP.3) pentru N/T1 PS (IP.4) pentru portul serial. Programarea nivelului 1 in bitul IPi conduce la starea sursei de cereri de ntreruperi corespunztoare la nivelul de prioritate ridicat. Execuia unei subrutine de ntrerupere corespunztoare unei surse de ntrerupere programat la nivel ridicat de prioritate nu poate fi ntrerupt. n cazul a dou cereri de ntrerupere de la dou surse din niveluri de prioritate diferite ce apar simultan, microcontrolerul servete prima cerere de ntrerupere corespunztoare sursei de ntrerupere cu un nivel de prioritate ridicat. n cazul cererilor de ntrerupere simultane de la surse de acelai nivel de prioritate se utilizeaz un al doilea criteriu de prioritate stabilit prin structura microcontrolerului . Acest al doilea criteriu este stabilit pentru ambele niveluri de prioritate i plaseaz sursele de cereri de ntreruperi n ordinea scderii prioritii, dup cum urmeaz: INT0, NIT0, INT1, NIT1, i portul serial. Logica de control a ntreruperilor microcontrolerului 8051 eantioneaz starea biilor indicatori de cereri de ntrerupere n faza S5P2 a fiecrui ciclu main i analizeaz 36
rezultatele fiecrei eantionri n ciclul main urmtor. Aceast analiz const n identificarea sursei de prioritate maxim care solicit ntrerupere. Dup ciclul de analiz, microcontrolerul execut intern ciclurile corespunztoare unei instruciuni: LCALL addr., unde addr este funcie de surs de cerere de ntrerupere servit dac sunt ndeplinite condiiile urmtoare: Ciclul de analiz este ultimul din execuia unei instruciuni. Ciclul de analiz nu corespunde execuiei unei instruciuni din subrutina de ntrerupere corespunztoare unei surse de acelai nivel de prioritate sau de nivel de prioritate mai ridicat Ciclul de analiz nu corespunde execuiei unei instruciuni RETI sau a unei instruciuni de acces la registrele IE i IP. La execuia unei instruciuni LCALL addr., pentru apelul unei subrutine de ntrerupere se salveaz n memoria stiv coninutul numrtorului de adrese PC i se ncarc n aceasta adresa de nceput a subrutinei de ntrerupere. Aceast adres este funcie de sursa de cerere de ntrerupere servit i este stabilit prin structura microcontrolerului dup cum urmeaz: INT0 03h NIT0 0Bh INT1 13h N/T1 1Bh Port serial 23h Subrutina de ntrerupere se termin cu o instruciune RETI prin care se realizeaz ncrcarea PC din memoria stiva cu adresa de revenire n programul ntrerupt. Deasemenea, prin execuia instruciunii RETI se informeaz logica de control a ntreruperilor cu privire la terminarea subrutinei de ntrerupere.
37