23590806-Microcontrolere

download 23590806-Microcontrolere

of 172

Transcript of 23590806-Microcontrolere

  • 7/29/2019 23590806-Microcontrolere

    1/172

    CAPITOLUL 1

    Introducere n Microcontrolere

    Introducere

    Circumstanele n care ne gsim astzi n domeniul microcontrolerelor i-au avut nceputurilen dezvoltarea tehnologiei circuitelor integrate. Aceast dezvoltare a fcut posibilnmagazinarea a sute de mii de tranzistoare ntr-un singur cip. Aceasta a fost o premiz pentru

    producia de microprocesoare, i primele calculatoare au fost fcute prin adugareaperifericelor ca memorie, linii intrare-ieire, timer-i i altele. Urmtoarea cretere a volumuluicapsulei a dus la crearea circuitelor integrate. Aceste circuite integrate conin att procesorulct i perifericele. Aa s-a ntmplat cum primul cip coninnd un microcalculator, sau ce vadeveni cunoscut mai trziu ca microcontroler a luat fiin.

    Istorie

    Este anul 1969, i o echip de ingineri japonezi de la compania BUSICOM sosesc n StateleUnite cu cererea ca unele circuite integrate pentru calculatoare s fie fcute folosind proiectelelor. Propunerea a fost fcut ctre INTEL, iar Marcian Hoff a fost desemnat responsabil cuacest proiect. Pentru c el era cel ce avea experien n lucrul cu un calculator (PC) PDP8, i-avenit s sugereze o soluie diferit fundamental n locul construciei propuse. Aceast soluie

    presupunea c funcionarea circuitului integrat este determinat de un program memorat n el.Aceasta a nsemnat c configuraia ar fi fost mult mai simpl, dar aceasta ar fi cerut mult maimult memorie dect ar fi cerut proiectul propus de inginerii japonezi. Dup un timp, cu toatec inginerii japonezi au ncercat s caute o soluie mai simpl, ideea lui Marcian a ctigat, ia luat natere primul microprocesor. n transformarea unei idei ntr-un produs finit, FredericoFaggin a fost de un ajutor major pentru INTEL. El s-a transferat la INTEL, i doar n 9 luni areuit s scoat un produs din prima sa concepie. INTEL a obinut drepturile de a vinde acest

    bloc integral n 1971. n primul rnd ei au cumprat licena de la compania BUSICOM carenu au avut idee ce comoar avuseser. n timpul acelui an a aprut pe pia un microprocesornumit 4004. Acela a fost primul microprocesor de 4 bii cu vitez 6000 operaii pe secund.

    Nu mult dup aceea, compania american CTC a cerut de la INTEL i de la TexasInstruments s fac un microprocesor pe 8 bii pentru folosin n terminale. Cu toate c CTCa renunat la aceast idee pn la sfrit, INTEL i Texas Instruments au continuat s lucreze

    la microprocesor i n aprilie 1972 a aprut pe pia primul microprocesor de 8 bii subnumele de 8008. Putea s adreseze 16Kb de memorie i avea 45 de instruciuni i viteza de300.000 de operaii pe secund. Acel microprocesor a fost predecesorul tuturormicroprocesoarelor de astzi. INTEL au continuat dezvoltrile lor pn n aprilie 1974 i aulansat pe pia microprocesorul de 8 bii sub numele de 8080 ce putea adresa 64Kb dememorie i avea 75 de instruciuni, iar preul ncepuse de la 360$.

    ntr-o alt companie american Motorola, i-au dat seama repede ce se ntmpla, aa c aulansat pe pia un microprocesor de 8 bii 6800. Constructor ef era Chuck Peddle i pe lngmicroprocesorul propriu-zis, Motorola a fost prima companie care s fac alte periferice ca6820 i 6850. La acel timp multe companii au recunoscut marea importan a

    microprocesoarelor i au nceput propriile lor dezvoltri. Chuck Peddle prsete Motorola

  • 7/29/2019 23590806-Microcontrolere

    2/172

    pentru a se muta la MOS Technology i continu s lucreze intensiv la dezvoltareamicroprocesoarelor.

    La expoziia WESCON din Statele Unite din 1975 a avut loc un eveniment critic n istoriamicroprocesoarelor. MOS Technology a anunat c produce microprocesoarele 6501 i 6502

    la 25$ bucata pe care cumprtorii le puteau cumpra imediat. Aceasta a fost att desenzaional nct au crezut c este un fel de nelciune, gndind c competitorii vindeau 8080i 6800 la 179$. Ca un rspuns la competitorii lor att INTEL ct i Motorola au sczut

    preurile lor n prima zi a expoziiei pn la 69.95$ pe microprocesor. Motorola intenteazrepede proces contra lui MOS Technology i contra lui Chuck Peddle pentru copierea

    protejatului 6800. MOS Technology nceteaz de a mai produce 6501 dar continu s produc6502. 6502 este un microcontroler pe 8 bii cu 56 de instruciuni i o capabilitate de adresaredirect de 64Kb de memorie. Datorit costului sczut, 6502 devine foarte popular, aa c esteinstalat n calculatoare ca :KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb,Orao, Ultra i multe altele. Curnd apar civa productori de 6502 (Rockwell, Sznertek,GTE, NCR, Ricoh i Comodore preiau MOS Technology) ce era n momentul prosperitii

    sale vndut la o rat de 15 milioane de microprocesoare pe an!

    Alii totui nu au cedat. Federico Faggin prsete INTEL, i i pornete propria sa companieZilog Inc.n 1976 Zilog anun Z80. n timpul crerii acestui microprocesor, Faggin ia o deciziecrucial. tiind c un mare numr de programe fuseser dezvoltate pentru 8080, Faggin i dseama c muli vor rmne fideli acelui microprocesor din cauza marii cheltuieli care arrezulta n urma refacerii tuturor programelor. Astfel el decide c un nou microprocesor trebuies fie compatibil cu 8080, sau c trebuie s fie capabil s execute toate programele care dejafusese scrise pentru 8080. n afar acestor caracteristici, multe altele noi au fost adugate, aac Z80 a fost un microprocesor foarte puternic la vremea lui. Putea adresa direct 64Kb dememorie, avea 176 instruciuni, un numr mare de registre, o opiune incorporat pentruremprosptarea memoriei RAM dinamice, o singur surs, vitez de lucru mult mai mare etc.Z80 a fost un succes mare i toat lumea a fcut conversia de 8080 la Z80. Se poate spune cZ80 comercial, a fost fr nici o ndoial, cel mai de succes micropocesor de 8 bii a aceluitimp. n afar de Zilog, ali noi productori apar de asemenea ca: Mostek, NEC, SHARP iSGS. Z80 a fost inima a multor calculatoare ca: Spectrum, Partner, TRS703, Z-3.

    n 1976, INTEL iese pe pia cu o versiune mbuntit de microprocesor pe 8 bii numit8085. Totui, Z80 era cu mult mai bun nct INTEL curnd a pierdut btlia. Chiar dac auaprut pe pia nc cteva microprocesoare (6809, 2650, SC/MP etc.), totul fusese de fapt

    deja hotrt. Nu mai erau de fcut mbuntiri importante ca s-i fac pe productori s seconverteasc spre ceva nou, aa c 6502 i Z80 mpreun cu 6800 au rmas ca cei maireprezentativi ai microprocesoarelor de 8 bii ai acelui timp.

    Microcontrolere contra Microprocesoare

    Microcontrolerul difer de un microprocesor n multe feluri. n primul rnd i cel maiimportant este funcionalitatea sa. Pentru a fi folosit, unui microprocesor trebuie si se adauge alte componente ca memorie, sau componente pentru primirea itrimiterea de date. Pe scurt, aceasta nseamn c microprocesorul este inimacalculatorului. Pe de alt parte, microcontrolerul este proiectat s fie toate acestea

    ntr-unul singur. Nu sunt necesare alte componente externe pentru aplicarea sa

  • 7/29/2019 23590806-Microcontrolere

    3/172

    pentru c toate perifericele necesare sunt deja incluse n el. Astfel, economisimtimpul i spaiul necesare pentru construirea de aparate.

    1.1 Unitatea de memorie

    Memoria este o parte a microcontrolerului a crei funcie este de a nmagazina date.Cel mai uor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dacpresupunem c am marcat sertarele ntr-un asemenea fel nct s nu fie confundate, oricaredin coninutul lor va fi atunci uor accesibil. Este suficient s se tie desemnarea sertarului iastfel coninutul lui ne va fi cunoscut n mod sigur.

    Componentele de memorie sunt exact aa. Pentru o anumit intrare obinem coninutul uneianumite locaii de memorie adresate i aceasta este totul. Dou noi concepte ne sunt aduse:adresarea i locaia de memorie. Memoria const din toate locaiile de memorie, i adresareanu este altceva dect selectarea uneia din ele. Aceasta nseamn c noi trebuie s selectmlocaia de memorie la un capt, i la cellalt capt trebuie s ateptm coninutul acelei locaii.n afar de citirea dintr-o locaie de memorie, memoria trebuie de asemenea s permitscrierea n ea. Aceasta se face prin asigurarea unei linii adiionale numit linie de control.Vom desemna aceast linie ca R/W (citete /scrie). Linia de control este folosit n urmtorulfel: dac r/w=1, se face citirea, i dac opusul este adevrat atunci se face scrierea n locaiade memorie. Memoria este primul element, dar avem nevoie i de altele pentru camicrocontrolerul nostru s funcioneze.

    1.2 Unitatea de procesarecentral

    S adugm alte 3 locaii de memorie pentru un bloc specific ce va avea o capabilitateincorporat de nmulire, mprire, scdere i s-i mutm coninutul dintr-o locaie dememorie n alta. Partea pe care tocmai am adugat-o este numit "unitatea de procesare

    central" (CPU). Locaiile ei de memorie sunt numite regitri.

  • 7/29/2019 23590806-Microcontrolere

    4/172

    Regitrii sunt deci locaii de memorie al cror rol este de a ajuta prin executarea a variateoperaii matematice sau a altor operaii cu date oriunde se vor fi gsit datele. S privim lasituaia curent. Avem dou entiti independente (memoria i CPU) ce sunt interconectate, iastfel orice schimb de informaii este ascuns, ca i funcionalitatea sa. Dac, de exemplu,

    dorim s adugm coninutul a dou locaii de memorie i ntoarcem rezultatul napoi nmemorie, vom avea nevoie de o conexiune ntre memorie i CPU. Mai simplu formulat,trebuie s avem o anumit "cale" prin care datele circul de la un bloc la altul.

    1.3 Bus-ul

    Calea este numit "bus"- magistral. Fizic, el reprezint un grup de 8, 16, sau mai multe fire.Sunt dou tipuri de bus-uri: bus de adres i bus de date. Primul const din attea linii ct estecantitatea de memorie ce dorim s o adresm, iar cellalt este att de lat ct sunt datele, ncazul nostru 8 bii sau linia de conectare. Primul servete la transmiterea adreselor de la CPUla memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul

    microcontrolerului.

    n ceea ce privete funcionalitatea, situaia s-a mbuntit, dar o nou problem a aprut deasemenea: avem o unitate ce este capabil s lucreze singur, dar ce nu are nici un contact culumea de afar, sau cu noi! Pentru a nltura aceast deficien, s adugm un bloc ce conine

    cteva locaii de memorie al cror singur capt este conectat la bus-ul de date, iar cellalt are

  • 7/29/2019 23590806-Microcontrolere

    5/172

  • 7/29/2019 23590806-Microcontrolere

    6/172

  • 7/29/2019 23590806-Microcontrolere

    7/172

    Bineneles, cnd aceasta se ntmpl cu un calculator, l resetm pur i simplu i va continuas lucreze. Totui, nu exist buton de resetare pe care s-l apsm n cazul microcontroleruluicare s rezolve astfel problema noastr. Pentru a depi acest obstacol, avem nevoie de aintroduce nc un bloc numit watchdog-cinele de paz. Acest bloc este de fapt un alt contorliber (free-run) unde programul nostru trebuie s scrie un zero ori de cte ori se executcorect. n caz c programul se "nepenete", nu se va mai scrie zero, iar contorul se va resetasingur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, icorect de aceast dat pe toat durata. Acesta este un element important al fiecrui program cetrebuie s fie fiabil fr supravegherea omului.

    1.8 Convertorul Analog-Digital

    Pentru c semnalele de la periferice sunt substanial diferite de cele pe care le poate nelegemicrocontrolerul (zero i unu), ele trebuie convertite ntr-un mod care s fie neles demicrocontroler. Aceast sarcin este ndeplinit de un bloc pentru conversia analog-digitalsau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informaii despreo anumit valoare analogic ntr-un numr binar i pentru a o urmri pe tot parcursul la un

    bloc CPU aa ca blocul CPU s o poat procesa.

    Astfel microcontrolerul este acum terminat, i tot ce mai rmne de fcut este de a-l pune ntr-o component electronic unde va accesa blocurile interioare prin pinii exteriori. Imaginea demai jos arat cum arat un microcontroler n interior.

    Configuraia fizic a interiorului unui microcontroler

  • 7/29/2019 23590806-Microcontrolere

    8/172

    Liniile subiri ce merg din interior ctre prile laterale ale microcontrolerului reprezint fireconectnd blocurile interioare cu pinii capsulei microcontrolerului. Schema urmtoarereprezint seciunea central a microcontrolerului.

    Pentru o aplicaie real, un microcontroler singur nu este de ajuns. n afar de microcontroler,avem nevoie de un program pe care s-l execute, i alte cteva elemente ce constituie ointerfa logic ctre elementele de stabilizare (ce se va discuta n capitolele urmtoare).

    1.9 Programul

    Scrierea programului este un domeniu special de lucru al microcontolerului i este denumit

    "programare". S ncercm s scriem un mic program ce l vom crea singuri i pe care oricineva fi n stare s-l neleag.

  • 7/29/2019 23590806-Microcontrolere

    9/172

    STARTREGISTER1=MEMORY LOCATION_AREGISTER2=MEMORY LOCATION_BPORTA=REGISTER1 + REGISTER2

    END

    Programul adun coninutul a dou locaii de memorie, i vede suma lor la portul A. Primalinie a programului este pentru mutarea coninutul locaiei de memorie "A" ntr-unul dinregitri unitii de procesare centrale. Pentru c avem nevoie i de celelalte date de asemenea,le vom muta de asemenea n cellalt registru al unitii de procesare centrale. Urmtoareainstruciune instruiete unitatea de procesare central s adune coninutul celor doi regitri strimit rezultatul obinut la portul A, nct suma acestei adunri s fie vizibil pentru toatlumea de afar. Pentru o problem mai complex, programul care s lucreze la rezolvarea eiva fi mai mare.

    Programarea poate fi fcut n cteva limbaje ca Assembler, C i Basic care sunt cele maifolosite limbaje. Assembler aparine limbajelor de nivel sczut ce sunt programate lent, darfolosesc cel mai mic spaiu n memorie i d cele mai bune rezultate cnd se are n vedereviteza de execuie a programului. Pentru c este cel mai folosit limbaj n programareamicrocontrolerelor va fi discutat ntr-un capitol ulterior. Programele n limbajul C sunt maiuor de scris, mai uor de neles, dar sunt mai lente n executare dect programele nAssembler. Basic este cel mai uor de nvat, i instruciunile sale sunt cele mai aproape demodul de gndire a omului, dar ca i limbajul de programare C este de asemenea mai lentdect Assembler-ul. n orice caz, nainte de a v hotr n privina unuia din aceste limbajetrebuie s studiai cu atenie cerinele privind viteza de execuie, mrimea memoriei i timpuldisponibil pentru asamblarea sa.

    Dup ce este scris programul, trebuie s instalm microcontrolerul ntr-un aparat i s-l lsms lucreze. Pentru a face aceasta trebuie s adugm cteva componente externe necesare

    pentru funcionarea sa. Mai nti trebuie s dm via microcontrolerului prin conectarea sa lao surs (tensiune necesar pentru operarea tuturor instrumentelor electronice) i oscilatoruluial crui rol este similar inimii din corpul uman. Bazat pe ceasul su microcontrolerul executinstruciunile programului. ndat ce este alimentat microcontrolerul va executa un scurtcontrol asupra sa, se va uita la nceputul programului i va ncepe s-l execute. Cum va lucraaparatul depinde de muli parametri, cel mai important fiind priceperea dezvoltatorului dehardware, i de experiena programatorului n obinerea maximului din aparat cu programul

    su.

  • 7/29/2019 23590806-Microcontrolere

    10/172

  • 7/29/2019 23590806-Microcontrolere

    11/172

    CISC, RISC

    S-a spus deja c PIC1684 are o arhitectur RISC. Acest termen este adeseori gsit n literaturadespre calculatoare, i are nevoie s fie explicat aici mai n detaliu. Arhitectura Harvard esteun concept mai nou dect von-Neumann. S-a nscut din nevoia de mrire a vitezeimicrocontrolerului. n arhitectura Harvard, bus-ul de date i bus-ul de adrese sunt separate.Astfel este posibil un mare debit de date prin unitatea de procesare central, i bineneles, ovitez mai mare de lucru. Separarea programului de memoria de date face posibil ca maideparte instruciunile s nu trebuiasc s fie cuvinte de 8 bii. PIC16F84 folosete 14 bii

    pentru instruciuni ceea ce permite ca toate instruciunile s fie instruciuni dintr-un singur

    cuvnt. Este de asemenea tipic pentru arhitectura Harvard s aib mai puine instruciuni dectvon-Newmann i s aib instruciuni executate uzual intr-un ciclu.

    Microcontrolerele cu arhitectur Harvard sunt de asemenea numite "microcontrolere RISC".RISC nseamn Reduced Instruction Set Computer. Microcontrolerele cu arhitectura von-

    Newmann sunt numite "microcontrolere CISC". Titlul CISC nseamn ComplexInstruction Set Computer.

    Pentru c PIC16F84 este un microcontroler RISC, aceasta nseamn c are un set redus deinstruciuni, mai precis 35 de instruciuni (de ex. microcontrolerele INTEL i Motorola au

    peste 100 de instruciuni). Toate aceste instruciuni sunt executate ntr-un ciclu cu excepia

    instruciunilor jump i branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la

  • 7/29/2019 23590806-Microcontrolere

    12/172

    rezultate de 2:1 n compresia cod i 4:1 n vitez n comparaie cu alte microcontrolere de 8bii din clasa sa.

    Aplicaii

    PIC16F84 se potrivete perfect n multe folosine, de la industriile auto i aplicaiile decontrol casnice la instrumentele industriale, senzori la distan, mnere electrice de ui idispozitivele de securitate. Este de asemenea ideal pentru cardurile smart ca i pentruaparatele alimentate de baterie din cauza consumului lui mic.

    Memoria EEPROM face mai uoar aplicarea microcontrolerelor la aparate unde se cerememorarea permanent a diferitor parametri (coduri pentru transmitoare, viteza motorului,frecvenele receptorului, etc.). Costul sczut, consumul sczut, mnuirea uoar iflexibilitatea fac PIC16F84 aplicabil chiar i n domenii unde microcontrolerele nu au fost

    prevzute nainte (exemple: funcii de timer, nlocuirea interfeei n sistemele mari, aplicaiilecoprocesor, etc.).

    Programabilitatea sistemului acestui cip (mpreun cu folosirea a doar doi pini n transferul dedate) face posibil flexibilitatea produsului, dup ce asamblarea i testarea au fost terminate.Aceast capabilitate poate fi folosit pentru a crea producie pe linie de asamblare, de anmagazina date de calibrare disponibile doar dup testarea final, sau poate fi folosit pentru ambunti programele la produsele finite.

    Clock-ul /ciclul instruciune

    Clock-ul sau ceasul este starter-ul principal al microcontrolerului, i este obinut dintr-ocomponent de memorie extern numit "oscilator". Dac ar fi s comparm unmicrocontroler cu un ceas de timp, "clock-ul" nostru ar fi un ticit pe care l-am auzi de laceasul de timp. n acest caz, oscilatorul ar putea fi comparat cu arcul ce este rsucit astfel caceasul de timp s mearg. De asemenea, fora folosit pentru a ntoarce ceasul poate ficomparat cu o surs electric.

    Clock-ul de la oscilator intr ntr-un microcontroler prin pinul OSC1 unde circuitul intern almicrocontrolerului divide clock-ul n 4 clock-uri egale Q1, Q2, Q3 i Q4 ce nu se suprapun.Aceste 4 clock-uri constituie un ciclu de o singur instruciune (numit de asemenea ciclumain) n timpul creia instruciunea este executat.

    Executarea instruciunii ncepe prin apelarea unei instruciuni care este urmtoarea n linie.

    Instruciunea este apelat din memoria program la fiecare Q1 i este scris n registrul deinstruciuni la Q4. Decodarea i executarea instruciunii sunt fcute ntre urmtoarele cicluriQ1 i Q4. n urmtoarea diagram putem vedea relaia dintre ciclul instruciunii i clock-uloscilatorului (OSC1) ca i aceea a clock-urilor interne Q1-Q4. Contorul de program (PC)reine informaia despre adresa urmtoarei instruciuni.

  • 7/29/2019 23590806-Microcontrolere

    13/172

    Pipelining

    Ciclul instruciune const din ciclurile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelarei executare sunt conectate ntr-un aa fel nct pentru a face o apelare, este necesar un ciclucu o instruciune, i mai este nevoie de nc unul pentru decodare i executare. Totui, datorit

    pipelining-ului (folosirea unei pipeline-conduct, i este aducerea unei instruciuni dinmemorie n timp ce se execut alta), fiecare instruciune este executat efectiv ntr-un singurciclu. Dac instruciunea cauzeaz o schimbare n contorul programului, i PC-ul nudirecioneaz spre urmtoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps saucalling), 2 cicluri sunt necesare pentru executarea unei instruciuni. Aceasta este pentru cinstruciunea trebuie procesat din nou, dar de data aceasta de la adresa corect. Ciclul ncepecu clock-ul Q1, prin scrierea n registrul instruction register (IR). Decodarea i executarea

    ncepe cu clock-urile Q2, Q3 i Q4.

    TYC0 citete instruciunea MOVLW 55h (nu are importan pentru noi ce instruciune a fostexecutat, ce explic de ce nu este un dreptunghi desenat n partea de jos).TCYI execut instruciunea MOVLW 55h i citete MOVWF PORTB.TCY2 execut MOVWF PORTB i citete CALL SUB_1.TCY3 execut o apelare a subprogramului CALL SUB_1, i citete instruciunea BSFPORTA, BIT3. Pentru c instruciunea aceasta nu este aceea de care avem nevoie, sau nu este

    prima instruciune a subprogramului SUB_1 a crei execuie este urmtoarea n ordine,instruciunea trebuie citit din nou. Acesta este un bun exemplu a unei instruciuni avnd

  • 7/29/2019 23590806-Microcontrolere

    14/172

    nevoie de mai mult de un ciclu.TCY4 ciclul instruciunii este total folosit pentru citirea primei instruciuni din subprogram laadresa SUB_1.TCY5 execut prima instruciune din subprogram SUB_1 i citete urmtoarea.

    Semnificaia pinilor

    PIC16F84 are un numr total de 18 pini. Cel mai adesea se gsete ntr-o capsul de tip DIP18dar se poate gsi de asemenea i ntr-o capsul SMD care este mai mic ca cea DIP. DIP este

    prescurtarea de la Dual In Package. SMD este prescurtarea de la Surface Mount Devicessugernd c gurile pentru pini unde s intre acetia, nu sunt necesare n lipirea acestui tip decomponent.

    Pinii microcontrolerului PIC16F84 au urmtoarea semnificaie:

    Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcie adiional.Pin nr.2 RA3 Al treilea pin la portul A. Nu are funcie adiional.Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcioneaz ca timer se gsete deasemenea la acest pin.Pin nr.4 MCLRReseteaz intrarea i tensiunea de programare Vpp a microcontrolerului.Pin nr.5 VSS Alimentare, mas.Pin nr.6 RB0 Pin de zero la portul B. Intrarea ntrerupere este o funcie adiional.Pin nr.7 RB1 Primul pin la portul B. Nu are funcie adiional.Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcie adiional.Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcie adiional.

    Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcie adiional.Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcie adiional.Pin nr.12 RB6 Al aselea pin la portul B. Linia de 'Clock' n mod programare.Pin nr.13 RB7 Al aptelea pin la portul B. Linia 'Data' n mod programare.Pin nr.14 Vdd Polul pozitiv al sursei.Pin nr.15 OSC2 Pin desemnat pentru conectarea la un oscilator.Pin nr.16 OSC1 Pin desemnat pentru conectarea la un oscilator.Pin nr.17 RA2 Al doilea pin la portul A. Nu are funcie adiional.Pin nr.18 RA1 Primul pin la portul A. Nu are funcie adiional.

  • 7/29/2019 23590806-Microcontrolere

    15/172

  • 7/29/2019 23590806-Microcontrolere

    16/172

  • 7/29/2019 23590806-Microcontrolere

    17/172

    2.2 Reset-ul

    Resetul este folosit pentru a pune microcontrolerul ntr-o condiie 'cunoscut'. Aceastanseamn practic c microcontrolerul poate s se comporte incorect n unele condiii nedorite.Pentru a continua s funcioneze corect trebuie resetat, nsemnnd c toi registrii vor fi puintr-o stare de start. Resetul nu este folosit numai cnd microcontrolerul nu se comport cumvrem noi, dar poate de asemenea s fie folosit cnd se ncearc un montaj ca o ntreruperentr-un program de execuie sau cnd se pregtete un microcontroler de a citi un program.

    Pentru a preveni ajungerea unui zero logic la pinulMCLR accidental (linia de deasupra nseamn c

    resetul este activat de un zero logic), MCLR trebuie sfie conectat printr-un rezistor la polul pozitiv al surseide alimentare. Rezistorul trebuie s fie ntre 5 i 10k.Acest rezistor a crui funcie este de a menine oanumit linie la starea logic unu ca o prevenire, senumete o scoatere-pull up.

    Microcontrolerul PIC16F84 are cteva surse de reset:

    a) Reset la alimentare, POR (Power-On Reset)b) Reset n timpul lucrului obinuit prin aducerea unui zero logic la pinul MCLR almicrocontrolerului.c) Reset n timpul regimului SLEEPd) Reset la depirea timer-ului watchdog (WDT)e) Reset n timpul depirii WDT n timpul regimului SLEEP.

    Cele mai importante resurse de reset sunt a) i b). Prima are loc de fiecare dat cnd estealimentat microcontrolerul i servete la aducerea toturor regitrilor la starea iniial a poziiei

    de start. A doua este pentru a aduce un zero logic la pinul MCLR n timpul operaiei normalea microcontrolerului. Este des folosit n dezvoltarea de programe.

    n timpul unui reset, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute laalimentare i nu sunt schimbate la nici un reset. Spre deosebire de acestea, regitrii SFR suntresetai la o stare iniial a poziiei de start. Unul din cele mai importante efecte ale resetuluieste setarea contorului de program (PC) la zero (0000h), ceea ce permite programului snceap executarea de la prima instruciune scris.

    Resetul la scderea tensiunii de alimentare dincolo de limita permisibil (Brown-outReset)

  • 7/29/2019 23590806-Microcontrolere

    18/172

    Impulsul pentru resetare n timpul creterii tensiunii este generat de microcontrolerul nsuicnd detecteaz o cretere n tensiunea Vdd (n domeniul de la 1.2V la 1.8V). Acest impulsdureaz 72 ms ceea ce este un timp suficient pentru oscilator ca s se stabilizeze. Aceste 72ms sunt asigurate de un timer intern PWRT care are oscilatorul lui RC. Microcontrolerul este

    n modul reset ct timp PWRT este activ. Totui, cnd montajul funcioneaz, probleme aparcnd sursa nu scade la zero ci cnd scade mai jos de limita ce garanteaz funcionarea corecta microcontrolerului. Acesta este un caz real din practic, n special n mediile industrialeunde perturbaiile i instabilitile sursei de alimentare sunt ceva foarte curent. Pentru arezolva aceast problem trebuie s ne asigurm c microcontrolerul este ntr-o stare de resetde fiecare dat cnd tensiunea sursei scade sub limita admis.

    Dac, conform cu specificaiile electrice, circuitul intern de resetare a microcontrolerului nupoate satisface aceste cerine, se pot folosi componente electronice speciale ce sunt capabiles genereze semnalul de reset dorit. n afar de aceast funcie, ele pot funciona pentrusupravegherea tensiunii de alimentare. Dac tensiunea scade mai jos de nivelul specificat, unzero logic va apare la pinul MCLR ce ine microcontrolerul n starea de reset pn cetensiunea nu este n limitele ce garanteaz funcionarea corect.

    2.3 Unitatea de Procesare Central

    Unitatea de procesare central (CPU) este creierul microcontrolerului. Aceast parte esteresponsabil cu gsirea i aducerea (citirea din memorie)-fetching instruciunii corecte cetrebuie executat, cu decodarea acelei instruciuni, i n final cu executarea ei.

  • 7/29/2019 23590806-Microcontrolere

    19/172

    Unitatea de procesare central conecteaz toate prile microcontrolerului ntr-un ntreg.Desigur, funcia sa cea mai important este s decodeze instruciunile de program. Cnd

    programatorul scrie un program, instruciunile au o form clar ca MOVLW 0x20. Totui,pentru ca microcontrolerul s neleag aceasta, aceast form de 'scrisoare' a unei instruciunitrebuie tradus ntr-o serie de zero-uri i unu-uri ce se numete 'opcode'. Aceast tranziie dela o scrisoare la o form binar este fcut de translatori ca translatorul assembler (cunoscutca i assembler sau asamblor). Instruciunea astfel adus-fetched din memoria programuluitrebuie s fie decodat de unitatea de procesare central. Putem apoi selecta din tabela tuturorinstruciunilor un set de aciuni ce execut o sarcin desemnat definit de instruciune. Pentru

    c instruciunile pot s conin n ele asignri ce cer diferite transferuri de date dintr-omemorie n alta, din memorie la porturi, sau alte calcule, CPU trebuie s fie conectat cu toateprile microcontrolerului. Aceasta este posibil printr-un bus de date i un bus de adrese.

    Unitatea de Logic Aritmetic (ALU)

    Unitatea de logic aritmetic este responsabil de executarea operaiilor ca adunarea,scderea, mutarea (la stnga sau la dreapta ntr-un registru) i de operaiile logice. Mutareadatelor ntr-un registru se mai numete 'shifting'- transferare. PIC16F84 conine o unitatelogic aritmetic de 8 bii i regitri de lucru de 8 bii.

  • 7/29/2019 23590806-Microcontrolere

    20/172

  • 7/29/2019 23590806-Microcontrolere

    21/172

    Registru STATUS

    bit 0C (Carry) TransferBit care este afectat de operaiile de adunare, scdere i transfer.1= transferul produs din bitul cel mai nalt al rezultatului0= transferul nu s-a produs

    Bitul C este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.

  • 7/29/2019 23590806-Microcontrolere

    22/172

    bit 1DC (Digit Carry) DC TransferBit afectat de operaiile de adunare, scdere i transfer. Spre deosebire de bitul C, acest bitreprezint transferul din al patrulea loc rezultat. Este setat de adunare cnd se ntmpl untransport de la bitul 3 la bitul 4, sau de scdere cnd se ntmpl mprumut de la bitul 4 la

    bitul 3, sau de transfer n ambele direcii.

    1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.0= transferul nu s-a produsBitul DC este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.

    bit 2Z (Zero bit) Indicarea unui rezultat zero.Acest bit este setat cnd rezultatul unei operaii aritmetice sau logice executate este zero.1= rezultatul egal cu zero0= rezultatul nu este egal cu zero

    bit 3PD (Power-down bit)Bit ce este setat cnd microcontrolerul este alimentat atunci cnd ncepe s funcioneze, dup

    fiecare reset obinuit i dup executarea instruciunii CLRWDT. Instruciunea SLEEP lreseteaz cnd microcontrolerul intr n regimul consum/uzaj redus. Setarea lui repetat este

    posibil prin reset sau prin pornirea sau oprirea sursei. Starea poate fi triggerat de asemeneade un semnal la pinul RB0/INT, de o schimbare la portul RB, de terminarea scrierii nEEPROM-ul de date intern, i de watchdog de asemenea.1= dup ce sursa a fost pornit0= executarea instruciunii SLEEP

    bit 4TO Time-out ; depirea-overflow watchdog-ului.Bitul este setat dup pornirea sursei i executarea instruciunilor CLRWDT i SLEEP. Bituleste resetat cnd watchdog-ul ajunge la sfrit semnalnd c ceva nu este n ordine.1= depirea-oveflow nu s-a produs0= depirea-overflow s-a produs

    bit6:5RP1:RP0 (Register Bank Select bits-Bii de Selectare a Bancului de Regitri)Aceti doi bii sunt partea superioar a adresei la adresarea direct. Pentru c instruciunile ceadreseaz memoria direct au doar apte bii, ei au nevoie doar de nc un bit pentru a adresacei 256 bytes adic ci are PIC16F84. Bitul RP1 nu este folosit, dar este lsat pentruexpansiuni viitoare ale acestui microcntroler.01= primul banc00= bancul zero

    bit 7IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regitri)Bit al crui rol este de a fi al optulea bit la adresarea indirect a RAM-ului intern.1= bancul 2 i 30= bancul 0 i 1 (de la 00h la FFh)

    Registrul STATUS conine starea aritmetic ALU (C, DC, Z), starea RESET (TO, PD) ibiii pentru selectarea bancului de memorie (IRP, RP1, RP0). Considernd c seleciabancului de memorie este controlat prin acest registru, el trebuie s fie prezent n fiecarebanc. Bancul de memorie se va discuta mai n detaliu n capitolul Organizarea memoriei.Registrul STATUS poate fi o destinaie pentru orice instruciune, cu oricare alt registru. Dac

    registrul STATUS este o destinaie pentru instruciunile ce afecteaz biii Z, DC or C, atunciscrierea n aceti trei bii nu este posibil.

  • 7/29/2019 23590806-Microcontrolere

    23/172

    Registrul OPTION

    bit 0:2PS0, PS1, PS2 (Prescaler Rate Select bit-Bit Selecie Rat Prescaler)Aceti trei bii definesc bitul de selecie a ratei prescalerului. Ce este un prescaler i cum potafecta aceti bii funcionarea unui microcontroler va fi explicat n seciunea depre TMRO.

    bit 3PSA (Prescaler Assignment bit-Bit de Asignare Prescaler)Bit ce asigneaz prescalerul ntre TMRO i watchdog.1= prescalerul este asignat watchdogului

    0= prescalerul este asignat timer-ului liber (ree-run) TMRO

    bit 4T0SE (TMR0 Source Edge Select bit-Bit Selecie a Frontului Sursei TMR0)Dac este permis de a se triggera TMRO prin impulsurile de la pinul RA4/T0CKI, acest bitdetermin dac aceasta va fi la frontul descresctor sau cresctor al unui semnal.1= front cresctor0= front descresctor

    bit 5TOCS (TMR0 Clock Source Select bit-Bit Selecie Surs Ceas TMR0)Acest pin permite timerului liber (free-run) s incrementeze starea lui fie de la oscilatorulintern la fiecare a ceasului oscilatorului, fie prin impulsuri externe la pinul RA4/T0CKI.

    1= impulsuri externe0= ceas intern 1/4

    bit 6INTEDG (Interrupt Edge Select bit-Bit de Selecie a Frontului ntrerupere)Dac ntreruperea este activat este posibil ca acest bit s determine frontul la care ontrerupere va fi activat la pinul RB0/INT.1= front cresctor0= front descresctor

    bit 7RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB)Acest bit pornete i oprete rezistorii interni 'pull-up'-scoatere la portul B.1= Rezistori oprire "pull-up"0= Rezistori pornire "pull-up"

  • 7/29/2019 23590806-Microcontrolere

    24/172

    .4 Porturi

    Portul se refer la un grup de pini ai unui microcontroler ce pot fi accesai simultan, sau lacare putem seta combinaia dorit de zero-uri i unu-uri, sau de la care putem citi o stareexistent. Fizic, portul este un registru n interiorul unui microcontroler ce este conectat cufire la pinii microcontrolerului. Porturile reprezint conexiunea fizic a Unitii de ProcesareCentral cu lumea exterioar. Microcontrolerul le folosete pentru a monitoriza sau controlaalte componente sau aparate. Datorit funcionalitii, unii pini au rol dublu ca RA4/TOCKIde exemplu, care este simultan al patrulea bit la portul A i o intrare extern pentru contorulliber (free-run). Selecia uneia din aceste dou funcii ale pinului se face n unul din regitriiconfiguraionali. O ilustraie a acesteia este al cincilea bit T0CS n registrul OPTION.Selectnd una din funcii cealalt este dezactivat.

    Toi pinii portului pot fi definii ca intrare sau ieire, conform cu nevoile unui montaj ce esten dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de ieire, trebuie scris

    combinaia corect de zero-uri i unu-uri n registrul TRIS. Dac n locul potrivit este scris"1" logic n registrul TRIS, acel pin este pin de intrare, iar dac este valabil contrariul, este unpin de ieire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iarportul B are TRISB la adresa 86h.

    PORTB

    PORTB are 8 pini legai la el. Registrul adecvat pentru direcia datelor este TRISB la adresa86h. Setarea unui bit n registrul TRISB definete pinul portului corespunztor ca pin deintrare, i resetarea unui bit n registrul TRISB, definete pinul portului corespunztor ca pinde ieire. Fiecare pin la PORTB are un rezistor slab intern pull-up (scoatere) (rezistor care

    definete o linie la unu logic) care poate fi activat prin resetarea celui de-al aptelea bit RBPUn registrul OPTION. Aceti rezistori 'pull-up' se nchid automat cnd pinul portului este

  • 7/29/2019 23590806-Microcontrolere

    25/172

    configurat ca o ieire. Cnd pornete microcontrolerul, 'pull-up'-ii sunt dezactivai.

    Patru pini ai portului PORTB, RB7:RB4 pot cauza o ntrerupere, care se ntmpl cnd starealor se schimb de la unu logic la zero logic i invers. Numai pinii configurai ca intrare potcauza aceast ntrerupere s se ntmple (dac fiecare pin RB7:RB4 este configurat ca o ieire,

    nu va fi generat o ntrerupere la schimbarea strii). Aceast opiune de ntrerupere curezistorii 'pull-up' fac mai uoar rezolvarea problemelor din practic, ca de exemplu otastatur matriceal. Dac rndurile tastaturii sunt conectate la aceti pini, fiecare apsare aunei clape va cauza o ntrerupere. Microcontrolerul va determina care clap este apsat ntimp ce se proceseaz o ntrerupere. Nu se recomand s apelai la portul B n timp ce se

    proceseaz ntreruperea.

    Exemplul de mai sus arat cum pinii 0, 1, 2, i 3 sunt declarai ca intrare, i pinii 4, 5, 6 i 7 caieire.

    PORTA

    PORTA are 5 pini legai la el. Registrul corespunztor pentru direcia datelor este TRISA laadresa 85h. Ca i la portul B, setarea unui bit n registrul TRISA definete de asemenea pinul

    portului corespunztor ca un pin de intrare, i resetarea unui bit n registrul TRISA definetepinul portului corespunztor ca pin de ieire.Al cincilea pin al portului A are funcie dual. La acel pin se afl de asemenea o intrareextern pentru timer-ul TMRO. Una din aceste dou opiuni este aleas prin setarea sauresetarea bitului TOCS (TMR0 Clock Source Select bit-bit de Selecie a Sursei CeasuluiTMRO). Acest pin permite timer-ului TMRO sa-i creasc starea fie de la oscilatorul internfie prin impulsuri externe la pinul RA4/T0CKI.

    Exemplul arat cum pinii 0, 1, 2, 3, i 4 sunt declarai ca intrare iar 5, 6 i 7 ca pini de ieire.

    2.5 Organizarea memoriei

  • 7/29/2019 23590806-Microcontrolere

    26/172

    PIC16F84 are dou blocuri separate de memorie, unul pentru date i cellalt pentru programe.Memoria EEPROM i regitrii GPR n memoria RAM constituie un bloc, i memoria FLASHconstituie un bloc de programe.

    Memoria program

    Memoria program a fost realizat n tehnologia FLASH ceea ce face posibil de a programa unmicrocontroler de mai multe ori nainte de a fi instalat ntr-un montaj, i chiar dup instalareasa dac se ntmpl unele schimbri n program sau parametri de proces. Mrimea memoriei

    program este de 1024 locaii cu lime de 14 bii unde locaiile zero i patru sunt rezervatepentru reset i pentru vectorul ntrerupere.

    Memoria de date

    Memoria de date const din memoriile EEPROM i RAM. Memoria EEPROM const din 64de locaii de opt bii a cror coninut nu este pierdut n timpul opririi sursei de alimentare.

    EEPROM-ul nu este direct adresabil, dar este accesat indirect prin regitrii EEADR iEEDATA. Pentru c memoria EEPROM este folosit curent la memorarea unor parametriimportani (de exemplu, o temperatur dat n regulatoarele de temperatur), exist o

    procedur strict de scriere n EEPROM ce trebuie urmat pentru a preveni scriereaaccidental. Memoria RAM pentru date ocup un spaiu ntr-o hart a memoriei de la locaia0x0C la 0x4F ceea ce nseamn 68 de locaii. Locaiile memoriei RAM sunt de asemeneadenumite regitri GPR care este o abreviere General Purpose Registers-Regitri cu ScopGeneral. Regitrii GPR pot fi accesai indiferent de ce banc este selectat la un moment.

    Regitri SFR

    Regitri ce ocup primele 12 locaii n bancurile 0 i 1 i sunt regitri ai funciei specializateasignat cu unele blocuri ale microcontrolerului. Acetia sunt numii Special FunctionRegisters-Regitri ai Funciei Speciale.

  • 7/29/2019 23590806-Microcontrolere

    27/172

    Bancuri de Memorie

    n afar de aceast diviziune n 'lungime' a regitrilor SFR i GPR, harta memoriei este deasemenea mprit n 'lime' (vezi harta precedent) n dou zone numite 'bancuri'.Selectarea unuia din bancuri se face de biii RPO i RP1 n registrul STATUS-stare.

    Exemplu:bcf STATUS, RP0

    Instruciunea BCF terge bitul RPO (RP0=0) n registrul STATUS i astfel seteaz bancul 0.

  • 7/29/2019 23590806-Microcontrolere

    28/172

    bsf STATUS, RP0

    Instruciunea BSF seteaz bitul RPO (RP0=1) n registrul STATUS i astfel seteaz bancul 1.

    Uzual, grupurile de instruciuni care sunt adesea n uz, sunt conectate ntr-o singur unitate cepoate fi uor apelat ntr-un program, i a crei nume are o semnificaie clar, aa-numitulMacros-macrocomand. Cu ajutorul lor, selecia dintre dou bancuri devine mai clar i

    programul mult mai elegibil.

    BANK0 macroBcf STATUS, RP0 ;Select memory bank 0Endm

    BANK1 macro

    Bsf STATUS, RP0 ;Select memory bank 1Endm

    Locaiile 0Ch - 4Fh sunt regitri cu scop general (GPR) ce sunt folosii ca memorie RAM. Cnd sunt

    accesate locaiile 8Ch - CFh n Bancul 1, accesm de fapt exact aceleai locaii n Bancul 0. Cu alte

    cnd dorii s accesai unul din regitrii GPR, nu trebuie s v ngrijorai c nu tii n ce banc sunte

    Contorul de Program

    Contorul de program (PC) este un registru de 13 bii ce conine adresa instruciunii ce se

    execut. Prin incrementarea sau schimbarea sa (ex. n caz de salturi) microcontrolerul executinstruciunile de program pas-cu-pas.

    Stiva

    PIC16F84 are o stiv de 13 bii cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaii dememorie de 13 bii lime cu funcii speciale. Rolul su de baz este de a pstra valoareacontorului de program dup un salt din programul principal la o adres a unui subprogram.Pentru ca un program s tie cum s se ntoarc la punctul de unde a pornit, trebuie snapoieze valoarea contorului programului din stiv. Cnd se mut dintr-un program ntr-unsubprogram, contorul programului este mpins n stiv (un exemplu de acesta este

    instruciunea CALL). Cnd se execut instruciuni ca RETURN, RETLW sau RETFIE ce aufost executate la sfritul unui subprogram, contorul programului a fost luat dintr-o stiv, aaca programul s poat continua de unde a fost oprit nainte de a fi ntrerupt. Aceste operaii de

    plasare ntr-o i luare dintr-o stiv de contor de program sunt numite PUSH i POP, i suntnumite conform cu instruciunile similare ale unor microcontrolere mai mari.

    Programarea n Sistem

    Pentru a programa o memorie de program, microcontrolerul trebuie s fie setat pentru un modde lucru special prin aducerea pinului MCLR la 13.5V, iar sursa de tensiune Vdd trebuie sfie stabilizat ntre 4.5V i 5.5V. Memoria program poate fi programat serial folosind doi

    pini 'data/clock' ce trebuie s fie mai nti separai de liniile montajului, aa ca s nu apar

  • 7/29/2019 23590806-Microcontrolere

    29/172

    erori n timpul programrii.

    Moduri de adresare

    Locaiile de memorie RAM pot fi accesate direct sau indirect.

    Adresarea Direct

    Adresarea Direct se face printr-o adres de 9 bii. Aceast adres este obinut princonectarea celui de-al aptelea bit al adresei directe a unei instruciuni cu doi bii (RP1, RP0)din registrul STATUS dup cum se arat n figura urmtoarea. Orice acces la regitrii SFR

    poate fi un exemplu de adresare direct.

    Bsf STATUS, RP0 ;Bankl

    movlw 0xFF ;w=0xFFmovwf TRISA ;address of TRISA register is taken from

    ;instruction movwf

    Adresarea Direct

    Adresarea Indirect

    Adresarea indirect spre deosebire de cea direct nu ia o adres dintr-o instruciune ci ocreeaz cu ajutorul bitului IRP a regitrilor STATUS i FSR. Locaia adresat este accesat

    prin registrul INDF care de fapt ine o adres indicat de un FSR. Cu alte cuvinte, oriceinstruciune care folosete INDF ca registrul al ei, n realitate acceseaz datele indicate de un

    registru FSR. S spunem, de exemplu, c un registru cu scop general (GPR) la adresa 0Fhconine o valoarea 20. Prin scrierea unei valori 0Fh n registrul FSR vom obine un registru

  • 7/29/2019 23590806-Microcontrolere

    30/172

    indicator la adresa 0Fh, iar prin citirea din registrul INDF, vom obine valoarea 20, ceea censeamn c am citit din primul registru valoarea lui fr accesarea lui direct (dar prin FSR iINDF). Se pare c acest tip de adresare nu are nici un avantaj fa de adresarea direct, darexist unele nevoi n timpul programrii ce se pot rezolva mai simplu doar prin adresareaindirect.

    Un asemenea exemplu poate trimite un set de date prin comunicaia serial, lucrnd cu buferei indicatoare (ce vor fi discutate n continuare ntr-un capitol cu exemple), sau s tearg o

    parte a memoriei RAM (16 locaii) ca n urmtorul exemplu.

    Citind datele din registrul INDF cnd coninutul registrului FSR este egal cu zero, ntoarcevaloarea zero, i scrie n el rezultatul n operaia NOP (no operation- nu opereaz).

    2.6 ntreruperi

  • 7/29/2019 23590806-Microcontrolere

    31/172

    ntreruperile sunt un mecanism a unui microcontroler ce i permit s rspund la uneleevenimente la momentul cnd se ntmpl, indiferent de ce face atunci microcontrolerul.Aceasta este o parte foarte important, pentru c permite conexiunea microcontrolerului culumea de afar. n general, fiecare ntrerupere schimb debitul programului, l ntrerupe idup executarea unui subprogram (rutine de ntrerupere), continu din acelai punct.

    Registrul de control al unei ntreruperi se numete INTCON i se gsete la adresa 0Bh. Rolullui este de a permite sau interzice cererile de ntreruperi, i n caz c nu sunt permise,nregistreaz cererile de ntrerupere singulare prin biii lui.

    Registru INTCON

    bit 0RBIF (RB Port Change Interrupt Flag bit-bit Stegule de ntrerupere a SchimbriiPortului RB) Bit ce informeaz despre schimbrile de la pinii 4, 5, 6 i 7 ai portului B.1=cel puin un pin i-a schimbat starea

    0=nu s-a ntmplat nici o schimbare la vreun pin

  • 7/29/2019 23590806-Microcontrolere

    32/172

    bit 1INTF (INT External Interrupt Flag bit-bit Stegule de ntrerupere Extern INT) A avutloc o ntrerupere extern.1=a avut loc o ntrerupere0=nu a avut loc o ntrerupereDac s-a detectat un front cresctor sau descresctor la pinul RB0/INT, (ce este definit cu

    bitul INTEDG n registrul OPTION), bitul INTF este setat. Bitul trebuie s fie ters nsubprogramul ntrerupere pentru a detecta urmtoarea ntrerupere.

    bit 2T0IF (TMR0 Overflow Interrupt Flag bit-bit Stegule Depire ntrerupere TMRO)Depirea contorului TMRO.1=contorul i-a schimbat starea de la FFh la 00h.0=depirea nu a avut locBitul trebuie s fie ters n program pentru ca o ntrerupere s fie detectat.

    bit 3RBIE (RB port change Interrupt Enable bit-bit Permite ntreruperea schimbrii portuluiRB) Permite s aib loc ntreruperi la schimbarea strii pinilor 4, 5, 6, i 7 ai portului B.

    1=permite ntreruperi la schimbarea strii0=ntreruperi interzise la schimbarea striiDac RBIE i RBIF au fost simultan setate, va avea loc o ntrerupere.

    bit 4INTE (INT External Interrupt Enable bit-bit Permite ntrerupere extern INT) Bit cepermite ntreruperea extern de la pinul RB0/INT.1=ntrerupere extern permis0=ntrerupere extern interzisDac INTE i INTF au fost setate simultan, va avea loc o ntrerupere.

    bit 5T0IE (TMR0 Overflow Interrupt Enable bit-bit Permite Depire ntrerupere TMRO)Bit ce permite ntreruperile n timpul depirii contorului TMRO.1=ntrerupere permis0=ntrerupere interzisDac T0IE i T0IF au fost simultan setate, va avea loc ntreruperea.

    Bit 6EEIE (EEPROM Write Complete Interrupt Enable bit-bit Permite ntrerupere Completa Scrierii EEPROM) Bit ce permite o ntrerupere la sfritul unei rutine de scriere nEEPROM1= ntrerupere permis0= ntrerupere interzis

    Dac EEIE i EEIF (ce este n registrul EECON1) au fost simultan setate, va avea loc ontrerupere.

    Bit 7GIE (Global Interrupt Enable bit-bit Permite ntrerupere Global) Bit ce permite sauinterzice toate ntreruperile.1=toate ntreruperile sunt permise0=toate ntreruperile sunt interzise

    PIC16F84 are patru surse de ntrerupere:

    1. Terminarea scrierii datelor n EEPROM2. ntrerupere TMR0 cauzat de depirea timer-ului

  • 7/29/2019 23590806-Microcontrolere

    33/172

    3. ntrerupere n timpul schimbrii la pinii RB4, RB5, RB6 i RB7 ai portului B.4. ntrerupere Extern de la pinul RB0/INT al microcontrolerului

    n general, fiecare surs de ntrerupere are doi bii legai la ea. Unul permite ntreruperea, iarcellalt detecteaz cnd au loc ntreruperi. Exist un bit comun numit GIE ce poate fi folosit

    pentru a interzice sau permite toate ntreruperile simultan. Acest bit este foarte folositor cndse scrie un program pentru c permite ca toate ntreruperile s fie interzise pentru o perioadde timp, aa ca execuia unei pri importante a programului s nu fie ntrerupt. Cndinstruciunea ce reseteaz bitul GIE a fost executat (GIE=0, toate ntreruperile interzise),fiecare ntrerupere ce rmne nerezolvat trebuie ignorat.

    ntreruperile ce rmn nerezolvate i ce au fost ignorate, sunt procesate cnd bitul GIE(GIE=1, toate ntreruperile sunt permise) va fi ters. Cnd i s-a rspuns ntreruperii, bitul GIEa fost ters, aa c orice ntreruperi adiionale vor fi interzise, adresa de ntoarcere a fosttrimis n stiv, iar adresa 0004h a fost scris n contorul programului numai dup aceastancepe rspunsul la o ntrerupere! Dup ce este procesat ntreruperea, bitul a crui setare acauzat o ntrerupere trebuie ters, sau rutina de ntrerupere va fi procesat automat tot mereun timpul ntoarcerii la programul principal.

    Pstrarea coninutului regitrilor importaniDoar valoarea de ntoarcere a contorului programului este nmagazinat ntr-o stiv n timpulunei ntreruperi (prin valoare de ntoarcere a contorului programului nelegem adresainstruciunii ce trebuie executat, dar nu a fost executat pentru c a avut loc ntreruperea).Pstrnd doar valoarea contorului programului adesea nu este suficient. Unii regitri ce sunt nuz n programul principal pot fi de asemenea n uz n rutina de ntrerupere. Dac ei nu suntreinui, programul principal va obine valori complet diferite n acei regitri n timpulntoarcerii dintr-o rutin de ntrerupere, ceea ce va cauza erori n program. Un exemplu deasemenea caz este coninutul registrului de lucru W. Dac presupunem c programul principala folosit registrul de lucru W pentru unele din operaiile sale, i c a pstrat n el o valoare ce

    este important pentru urmtoarea instruciune, atunci o ntrerupere ce se va ntmpla naintede acea instruciune va schimba valoarea registrului de lucru W, ce va influena direct

  • 7/29/2019 23590806-Microcontrolere

    34/172

    programul principal.

    Procedura de nregistrare de regitri importani nainte de a merge la o rutin de ntrerupere senumete PUSH, n timp ce procedura ce aduce valorile nregistrate napoi, se numete POP.PUSH i POP sunt instruciuni ale altor microcontrolere (Intel), dar sunt att de larg acceptate

    c o ntreag operaie este numit dup ele. PIC16F84 nu are instruciuni ca PUSH i POP, iele trebuie s fie programate.

    Datorit simplitii i folosirii frecvente, aceste pri ale programului pot fi fcute ca macro-uri. Conceptul unui Macro este explicat n "Limbaj de asamblare program". n urmtorulexemplu, coninuturile regitrilor W i STATUS sunt memorate n variabilele W_TEMP iSTATUS_TEMP nainte de rutina de ntrerupere. La nceputul rutinei PUSH trebuie sverificm bancul selectat n prezent pentru c W_TEMP and STATUS_TEMP nu se gsesc n

    bancul 0. Pentru schimbul de date ntre aceti regitri, instruciunea SWAPF se folosete nloc de MOVF pentru c nu afecteaz starea biilor registrului STATUS.

    Exemplul este un program asamblor pentru urmtorii pai :1. Testarea bancului curent2. Stocarea registrului W indiferent de bancul curent3. Stocarea registrul STATUS n bancul 04. Executarea rutinei de ntrerupere pentru procesul de ntrerupere (ISR)5. Restaureaz registrul STATUS6. Restaureaz registrul W

    Dac mai sunt i alte variabile sau regitri ce trebuie stocai, atunci ei trebuie s fie pstrai

  • 7/29/2019 23590806-Microcontrolere

    35/172

    dup stocarea registrului STATUS (pasul 3), i adui napoi nainte ca registrul STATUS sfie restaurat (pasul 5).

    Acelai exemplu se poate realiza utiliznd macro-uri, fcnd astfel programul mai eligibil.Macro-urile ce sunt deja definite, pot fi folosite pentru scrierea de noi macro-uri. Macro-urileBANK1 i BANK0 ce sunt explicate n capitolul "Organizarea memoriei" sunt folosite cumacro-urile 'push' i 'pop'.

  • 7/29/2019 23590806-Microcontrolere

    36/172

  • 7/29/2019 23590806-Microcontrolere

    37/172

  • 7/29/2019 23590806-Microcontrolere

    38/172

    Rentoarcerea dintr-o rutin de ntrerupere poate fi fcut cu instruciunile RETURN, RETLW i R

    Se recomand ca s fie utilizat instruciunea RETFIE pentru c acea instruciune este singura ce

    automat bitul GIE, ceea ce permite s se produc o nou ntrerupere.

    2.7 Timer-ul liber TMR0

    Timer-ele (temporizatoarele) sunt de obicei cele mai complicate pri ale unui microcontroler,aa c este necesar s rezervm mai mult timp pentru a le explica. Odat cu aplicarea lor este

    posibil s se creeze relaii ntre o dimensiune real ca "timp" i o variabil ce reprezint stareatimer-ului ntr-un microcontroler. Fizic, timer-ul este un registru a crui valoare cretecontinuu pn la 255, i apoi pornete de la capt: 0, 1, 2, 3, 4...255....0,1, 2, 3......etc.

  • 7/29/2019 23590806-Microcontrolere

    39/172

  • 7/29/2019 23590806-Microcontrolere

    40/172

    Dup fiecare numrtoare pn la 255, timer-ul i reseteaz valoarea la zero i ncepe cu un

    nou ciclu de contorizare pn la 255. n timpul fiecrei tranziii de la 255 la zero, bitul TOIFn registrul INTCON este setat. Dac se permit ntreruperi, de aceasta se poate profita ngenerarea i n procesarea rutinei de ntrerupere. Depinde de programator s reseteze bitulTOIF n rutina de ntrerupere, aa ca noua ntrerupere, sau noua depire s fie detectate. nafar de ceasul oscilator intern, starea timer-ului poate de asemenea s creasc prin ceasulextern la pinul RA4/TOCKI. Alegerea uneia din aceste dou opiuni se face n registrulOPTION prin bitul TOCS. Dac a fost aleas aceast opiune de ceas extern, va fi posibil sse defineasc frontul unui semnal (cresctor sau descresctor), la care timer-ul s-i creascvaloarea.

    n practic, unul din exemplele tipice ce este rezolvat prin ceas extern i unde timer-ulcontorizeaz rotaiile complete ale unui ax al unei maini de producie, ca bobinatorul de

  • 7/29/2019 23590806-Microcontrolere

    41/172

    transformator de exemplu. S rotim patru uruburi de metal pe axul unui bobinator. Acestepatru uruburi vor reprezenta convexitatea metalic. S plasm acum un senzor inductiv la odistan de 5 mm de captul unui urub. Senzorul inductiv va genera semnalul descresctor defiecare dat cnd capul urubului este paralel cu capul senzorului. Fiecare semnal vareprezenta o ptrime dintr-o rotaie, i suma tuturor rotaiilor se va gsi n timer-ul TMRO.

    Programul poate uor citi aceste date din timer printr-un bus de date.

    Urmtorul exemplu ilustreaz cum s se iniializeze timer-ul la fronturile descresctoare alesemnalului din sursa extern cu un prescaler 1:4. Timer-ul lucreaz n mod "polig-mpingere".

    Acelai exemplu poate fi realizat printr-o ntrerupere n modul urmtor:

    Prescalerul poate fi asignat fie de timer-ul TMRO fie de watchdog. Watchdogul este unmecanism pe care microcontrolerul l folosete s se apere mpotriva blocrii programelor. Caorice alt circuit electric, la fel i cu microcontrolerul se pot ntmpla defectri, sau unelestricciuni. Din nefericire microcontrolerul are de asemenea un program unde se pot ntmpla

    probleme. Cnd se ntmpl aceasta, microcontrolerul se va opri din funcionare i va rmnen acea stare pn ce cineva l reseteaz. Din cauza aceasta, a fost introdus mecanismulwatchdog. Dup o anumit perioad de timp, watchdogul reseteaz microcontrolerul (de fapt

  • 7/29/2019 23590806-Microcontrolere

    42/172

    microcontrolerul se reseteaz singur). Watchdogul luceaz pe baza unui principiu simplu:dac se ntmpl depirea timer-ului, microcontrolerul este resetat, i ncepe executarea

    programului mereu din nou. Astfel, se va ntmpla un reset att n cazul unei funcionricorecte ct i incorecte. Urmtorul pas este prevenirea resetului n cazul unei funcionricorecte, ce se face prin scrierea unui zero n registrul WDT (instruciunea CLRWDT) de

    fiecare dat cnd se apropie de depire. Astfel programul va preveni un reset ct timp esteexecutat corect. De ndat ce s-a blocat, nu se va scrie zero, va avea loc depirea timer-uluiWDT i un reset ce va duce microcontrolerul napoi la funcionarea corect din nou.

    Prescalerul este acordat cu timer-ul TMRO, sau cu timer-ul watchdogului prin bitul PSA nregistrul OPTION. tergnd bitul PSA, prescalerul va fi acordat cu timer-ul TMRO. Cnd

    prescalerul este acordat cu timer-ul TMRO, toate instruciunile de scriere n registrul TMRO(CLRF TMR0, MOVWF TMR0, BSF TMR0,...) vor terge prescalerul. Cnd prescalerul esteasignat timerului watchdog, numai instruciunea CLRWDT va terge prescalerul i timer-ulwatchdog n acelai timp. Schimbarea prescalerului este complet sub controlul

    programatorului, i poate fi schimbat n timp ce se ruleaz programul.

    Exist doar un prescaler i un timer. Funcie de nevoi, ele sunt asignate fie timer-ului TMRO fie wat

    ului.

    Registrul control OPTION

    Bit 0:2PS0, PS1, PS2 (Prescaler Rate Select bit-bit Selectare Rat Prescaler)Subiectul prescaler, i cum afecteaz aceti bii lucrul unui microcontroler va fi abordat nseciunea despre TMRO.

    bit 3PSA (Prescaler Assignment bit-bit Asignare Prescaler)Bit ce asigneaz prescalerul ntre TMRO i timer-ul watchdog).1=prescalerul este asignat la timer-ul watchdog0=prescalerul este asignat la timer-ul free-liber

    bit 4T0SE (TMR0 Source Edge Select bit-bit Selectare Front Surs TMRO)

    Dac triggerul TMRO a fost activat cu impulsuri de la pinul RA4/T0CKI, acest bit va

  • 7/29/2019 23590806-Microcontrolere

    43/172

    determina dac va fi la frontul cresctor sau descresctor al semnalului.1=front descresctor0=front cresctor

    bit 5T0CS (TMR0 Clock Source Select bit-bit Selectare Surs Ceas TMRO)

    Acest bit permite unui timer free-run s-i incrementeze valoarea fie de la oscilatorul intern,de exemplu din ceasul oscilatorului, sau prin impulsuri externe la pinul RA4/T0CKI.1=impulsuri externe0=1/4 ceas intern

    bit 6INTEDG (Interrupt Edge Select bit-bit Selectare Front ntreruperi)Dac a fost permis producerea de ntreruperi, acest bit va determina la ce front va avea locntreruperea la pinul RB0/INT.1=front cresctor0=front descresctor

    bit 7RBPU (PORTB Pull-up Enable bit-bit Permite Pull-up-tragerea PORTB)Acest bit deschide sau nchide rezistorii interni la portul B.1=rezistorii 'pull-up' deschii0=rezistorii 'pull-up' nchii

    2.8 Memoria de date EEPROM

    PIC16F84 are 64 de bytes de locaii de memorie EEPROM la adresele de la 00h la 63h undese poate scrie sau de unde se poate citi. Cea mai important caracteristic a acestei memoriieste c nu pierde coninutul n timpul nchideri sursei de alimentare. Aceasta nseamn practicc ceea ce a fost scris n ea va rmne chiar i cnd microcontrolerul este nchis. Datele pot fireinute n EEPROM fr sursa de alimentare pn la 40 de ani. (dup cum declar

    productorul lui PICD16F84), i se pot executa 10000 de cicluri de scriere.

    n practic, memoria EEPROM este folosit pentru stocarea unor date importante sau a unor

    parametri de proces.Un asemenea parametru este o temperatur dat, asignat cnd se seteaz un regulator detemperatur la un proces. Dac nu s-a reinut, va fi nevoie s se ajusteze temperatura datdup fiecare ntrerupere a alimentrii. Pentru c aceasta este foarte nepractic (chiar

    periculos), productorii de microntrolere au nceput s instaleze un tip mai mic de memorieEEPROM.

    Memoria EEPROM este plasat ntr-un loc special al memoriei i poate fi accesat prinregitri speciali. Aceti regitri sunt:

    EEDATA la adresa 08h, care reine datele de citit sau cele de scris.

    EEADRla adresa 09h, ce conine o adres a locaiei EEPROM ce este accesat. EECON1 la adresa 88h, ce conine bii de control.

  • 7/29/2019 23590806-Microcontrolere

    44/172

    EECON2 la adresa 89h. Acest registru nu exist fizic i servete la protejarea EEPROM-ului de scrieri accidentale.

    Registrul EECON1 la adresa 88h este un registru de control cu 5 bii implementai.Biii 5, 6 i 7 nu sunt folosii, i prin citire sunt totdeauna zero. Interpretarea biilor registrului

    EECON1 urmeaz.

    Registrul EECON1

    bit 0 RD (Read Control bit-bit Control Citire)Setarea acestui bit iniializeaz transferul de date definit n EEADR la registrul EEDATA.Pentru c timpul nu este esenial n citirea datelor ca la scriere, datele din EEDATA pot fi dejafolosite n urmtoarea instruciune.1=initializeaz citirea0=nu iniializeaz citirea

    bit 1 WR(Write Control bit-bit Control Scriere)Setarea acestui bit iniializeaz scrierea datelor din registrul EEDATA la adresa specifcat

    prin registrul EEADR.1=initializeaz scrierea

    0=nu iniializeaz scrierea

    bit 2 WREN (EEPROM Write Enable bit-bit Permite Scrierea EEPROM) Permite scrierea nEEPROMDac acest bit nu a fost setat, microcontrolerul nu va permite scrierea n EEPROM.1=scriere permis0=scriere interzis

    bit 3 WRERR(Write EEPROM Error Flag-Stegule Eroare Scriere EEPROM ) Eroare ntimpul scrierii n EEPROMAcest bit a fost setat doar n caz c scrierea n EEPROM a fost intrerupt de un semnal sau

    prin terminarea timpului din timer-ul watchdog (dac este activat).1=a avut loc eroare0=nu a avut loc eroare

    bit 4 EEIF (EEPROM Write Operation Interrupt Flag bit-bit Stegule ntrerupere OperaieScriere EEPROM) Bit folosit pentru a informa c scrierea datelor s-a terminat.Cnd s-a terminat scrierea, acest bit va fi setat automat. Programtorul trebuie s tearg bitulEEIF n programul su pentru a detecta noua terminare a scrierii.1=scrierea terminat0=scrierea nc neterminat, sau nc nu a nceput

    Citirea din memoria EEPROM

  • 7/29/2019 23590806-Microcontrolere

    45/172

    Setarea bitului RD iniializeaz transferul de date de la adresa gsit n EEADR la registrulEEDATA. Ca i la citirea datelor nu avem nevoie de att de mult timp ca la scriere, dateleluate din registrul EEDATA pot deja fi folosite mai departe n urmtoarea instruciune.

    O mostr a prii programului ce citete datele n EEPROM, ar putea arta ca mai jos:

    Dup ultima instruciune de program, coninutul de la o adres EEPROM zero poate fi gsit nregistrul w.

    Scrierea n memoria EEPROM

    Pentru a scrie datele n locaia EEPROM, programatorul trebuie mai nti s scrie adresa nregistrul EEADR i datele n registrul EEDATA. Numai atunci este folositor de a seta bitulWR ce pune totul n micare. Bitul WR va fi resetat, i bitul EEIF setat urmnd o scriere ce

    poate fi folosit n procesarea ntreruperilor. Valorile 55h i AAh sunt prima i a doua cheiecare interzic ca scrierea accidental n EEPROM s se ntmple. Aceste dou valori suntscrise n EECON2 care servete doar pentru acel scop, de a primi aceste dou valori i de a

    preveni orice scriere accidental n memoria EEPROM. Liniile de program marcate ca 1, 2, 3i 4 trebuie s fie executate n acea ordine n intervale egale de timp. De aceea este foarte

    important, s nchidei ntreruperile ce ar putea schimba timpul necesar pentru executareinstruciunilor. Dup scriere, ntreruperile, pot fi permise din nou.

    Exemplu unei pri a programului ce scrie datele 0xEE n prima locaie n memoria EEPROMar putea arta ca mai jos:

  • 7/29/2019 23590806-Microcontrolere

    46/172

    Este recomandat ca WREN s fie nchis tot timpul cu excepia scrierii datelor n EEPROM, aa c

    posibilitatea unei scrieri accidentale va fi minim. Scrierea n EEPROM va fi automat tears!

    CAPITOLUL 3

    Set Instruciuni

    Introducere

    Am menionat deja c microcontrolerul nu este ca orice alt circuit integrat. Cnd ies din

    producie cele mai multe circuite integrate sunt gata de a fi introduse n aparate ceea ce nu

  • 7/29/2019 23590806-Microcontrolere

    47/172

    este cazul cu microcontrolerele. Pentru a "face" microcontrolerul s ndeplineasc o sarcin,

    trebuie s-i spunem exact ce s fac, sau cu alte cuvinte trebuie s scriem programul pe care

    microcontrolerul s-l execute. Vom descrie n acest capitol instruciunile care alctuiesc

    assembler-ul, sau limbajul de programare cu nivel sczut pentru microcontrolerele PIC.

    Set de Instruciuni n Familia Microcontrolerului PIC16Cxx

    Setul complet care cuprinde 35 de instruciuni este dat n tabela urmtoare. Un motiv pentruun numr aa de mic de instruciuni st n primul rnd n faptul c discutm despre unmicrocontroler RISC ale crui instruciuni sunt bine optimizate avnd n vedere viteza delucru, simplitatea arhitectural i compactitatea codului. Singurul neajuns este c

    programatorul trebuie s controleze o tehnic "neconfortabil" n a utiliza un set modest de 35

    de instruciuni.

    Transfer de Date

    Transferul de date ntr-un microcontroler este fcut ntre registrul de lucru (W) i un registru

    'f' ce reprezint orice locaie n RAM-ul intern (indiferent dac acetia sunt regitri speciali

    sau de scop general).

    Primele trei instruciuni (a se vedea urmtorul tabel) fac ca o constant s fie nscris nregistrul W (MOVLW este prescurtarea pentru MOVe Literal to W), i ca datele s fie copiatedin registrul W n RAM i datele din RAM s fie copiate n registrul W (sau n aceeai locaieRAM, la care punct numai starea steguleului Z se schimb). Instruciunea CLRF scrieconstanta 0 n registrul 'f ', iar CLRW scrie constanta 0 n registrul W. Instruciunea SWAPFschimb locurile cmpului de nibbles- buci de 4 bii n interiorul unui registru.

    Aritmetic i logic

    Din toate operaiile aritmetice, PIC ca majoritatea microcontrolerelor, accept doar scderea i

    adunarea. Steguleele C, DC i Z sunt setate funcie de rezultatul adunrii sau scderii, dar cu

    o excepie: pentru c scderea se face ca o adunare a unei valori negative, eticheta C este

    invers urmnd scderii. Cu alte cuvinte, este setat dac operaia este posibil, i este resetat

    dac un numr mai mare a fost sczut din unul mai mic.

    Unitatea logic a PIC-ului are capabilitatea de a face operaiile AND (I), OR (SAU), EX-OR

    (SAU-EXCLUSIV), complementare (COMF) i rotaie (RLF i RRF).

  • 7/29/2019 23590806-Microcontrolere

    48/172

  • 7/29/2019 23590806-Microcontrolere

    49/172

    exemplul anterior, constanta 'k2' va fi n registrul W urmnd unei ntoarceri dintr-un

    subprogram.

    RETFIE (RETurn From Interrupt - Interrupt Enable) este o ntoarcere dintr-o rutin dentrerupere i difer de o RETURN numai n aceea c seteaz automat bitul GIE (GlobalInterrupt Enable). La o ntrerupere, acest bit este automat ters. Cnd ncepe ntreruperea,numai valoarea contorului de program este pus n vrful stivei. Nu este prevzut memorareaautomat a valorilor i strii registrului.

    Jump-urile (salturile) condiionale sunt sintetizate n dou instruciuni: BTFSC i BTFSS.Funcie de starea bitului n registrul 'f' ce este testat, instruciunile sar sau nu pesteinstruciunea de program urmtoare.

    Perioada de Execuie a Instruciunii

    Toate instruciunile sunt executate ntr-un ciclu cu excepia instruciunilor ramurcondiionale dac condiia a fost adevrat, sau dac coninutul contorului de program a fostschimbat de o anumit instruciune. n acest caz, execuia cere dou cicluri de instruciuni, iaral doilea ciclu este executat ca NOP (No Operation-Fr operaii). Patru clock-uri oscilatorfac un ciclu instruciune. Dac folosim un oscilator cu frecvena de 4 MHz, timpul normal

    pentru execuia instruciunii este 1 s, i n caz de branching-ramificare condiional, perioadade execuie este 2 s.

    List de cuvinte

    f orice locaie de memorie ntr-un microcontrolerW registru de lucrub poziie bit n registru 'f'd bit destinaielabelgrup de opt caractere ce marcheaz nceputul unei pri de programTOS vrful stivei[] opiune poziie bit n registru

  • 7/29/2019 23590806-Microcontrolere

    50/172

  • 7/29/2019 23590806-Microcontrolere

    51/172

    CAPITOLUL 4

    Programare n Limbaj de Asamblare

    Introducere

    Abilitatea de a comunica este de mare importan n orice domeniu. Totui, este posibilnumai dac amndoi partenerii de comunicare cunosc acelai limbaj, sau urmresc aceleaireguli n timpul comunicrii. Folosind aceste principii ca un punct de plecare, putem deasemenea defini comunicarea ce are loc ntre microcontrolere i om. Limbajul pe caremicrocontrolerul i omul l folosesc pentru a comunica este numit "limbaj de asamblare".

    Titlul nsui nu are un neles deosebit, i este analog numelor altor limbaje, de ex. engleza ifranceza. Mai precis, "limbajul de asamblare" este doar o soluie trectoare. Programele scrisen limbaj de asamblare trebuie traduse ntr-un "limbaj de zero-uri i unu-uri" pentru ca unmicrocontroler s-l neleag. "Limbajul de asamblare" i "assembler-ul" sau asamblorul suntdou noiuni diferite. Primul reprezint un set de reguli folosite n scrierea unui program

    pentru un microcontroler, iar cellalt este un program n computerul personal care traducelimbajul de asamblare ntr-un limbaj de zero-uri i unu-uri. Un program ce este tradus n"zero-uri" i "unu-uri" este numit "limbaj main".

    Fizic, "Program" reprezint un fiier pe discul computerului (sau n memorie dac este cititntr-un microcontroler), i este scris conform cu regulile de asamblare sau ale altui limbaj

    pentru programarea microcontrolerului. Omul poate nelege pentru c este constituit dinsemne i cuvinte ale alfabetului. Cnd se scrie un program, trebuie urmrite unele reguli

    pentru a se obine un efect dorit. Un Translator interpreteaz fiecare instruciune scris nlimbajul de asamblare ca o serie de zero-uri i unu-uri ce au o semnificaie pentru logicaintern a microcontrolerului.

    S lum de exemplu instruciunea "RETURN" pe care microcontrolerul o folosete pentru a

    se ntoarce dintr-un sub-program.

  • 7/29/2019 23590806-Microcontrolere

    52/172

  • 7/29/2019 23590806-Microcontrolere

    53/172

    Instruciuni

    Instruciunile sunt deja definite prin folosirea unui microcontroler specific, aa c ne rmnedoar s urmm instruciunile pentru folosirea lor n limbajul de asamblare. Modul n carescriem o instruciune mai este numit "sintaxa" instruciunii. n exemplul urmtor putem

    recunoate o greeal n scriere pentru c instruciunile movlp i goto nu exist pentrumicrocontrolerul PIC16F84.

    Operanzi

    Operanzii sunt elemente ale instruciunii pentru instruciunea ce este executat. Ei sunt deobicei regitri sau variabile sau constante. Constantele sunt numite "literal-e". Cuvntulliteral nseamn "numr".

    ComentariiComentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programulmai clar i mai uor de citit. Se plaseaz dup o instruciune , i trebuie s nceap cu punct ivirgul";".

    Directive

    O directiv este similar unei instruciuni, dar spre deosebire de o instruciune esteindependent de modelul microcontrolerului, i reprezint o caracteristic a limbajului deasamblare nsui. Directivelor le sunt date uzual nelesuri de scop prin variabile i regitri. De

    exemplu, LEVEL poate fi o desemnaie pentru o variabil n memoria RAM la adresa 0Dh. nfelul acesta, variabila la acea adres poate fi accesat prin desemnaia LEVEL. Aceasta este

  • 7/29/2019 23590806-Microcontrolere

    54/172

  • 7/29/2019 23590806-Microcontrolere

    55/172

    Dup deschiderea comentariului ce a fost scris, trebuie inclus directiva. Aceasta este artatn exemplul de mai sus.

    Pentru a funciona corect, trebuie s definim civa parametri ai microcontrolerului ca:- tipul oscilatorului

    - dac timer-ul watchdog este pe deschis, i- dac circuitul de resetare intern este activ.

    Toate acestea sunt definite prin urmtoarea directiv:

    _CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC

    Cnd toate elementele necesare au fost definite, putem ncepe scrierea unui program. nprimul rnd, este necesar de a determina adresa de unde ncepe microcontrolerul, duppornirea sursei de alimentare. Aceasta este (org 0x00). Adresa de la care ncepe programuldac are loc o ntrerupere este (org 0x04). Pentru c acesta este un program simplu, va fi

    suficient s direcionm microcontrolerul la nceputul programului cu o instruciune "gotoMain".

    Instruciunile gsite n Main sub-routine selecteazbank-ul 1 al memoriei (BANK1) pentrua accesa registrul TRISIB, aa nct portul B s fie declarat ca o ieire (movlw 0x00, movwfTRISIB).

    Urmtorul pas este de a selecta bank-ul de memorie 0 i de plasa statusul unu-lui logic laportul B( movlw 0Xff, movwf PORTB ), i astfel programul principal este terminat. Trebuies facem o alt bucl unde microcontrolerul s fie inut ca s nu se "rtceasc" dac sentmpl o eroare. Pentru acest scop, se face o bucl infinit unde micro-ul este reinut n timpce sursa este conectat. Necesarul "sfrit" de la concluzia fiecrui program informeaztranslatorul de asamblare c nu mai sunt instruciuni n program.

    Directive de control

    4.1 #DEFINE Schimb o bucat de text pentru o alta

    Sintax:#define []

    Descriere:De fiecare dat cnd apare n program , va fi nlocuit cu .

    Exemplu:#define turned on 1#define turned off 0

    Directive similare: #UNDEFINE, IFDEF,IFNDEF

    4.2 INCLUDE Include un fiier adiional ntr-un program

    Sintax:#include

  • 7/29/2019 23590806-Microcontrolere

    56/172

  • 7/29/2019 23590806-Microcontrolere

    57/172

  • 7/29/2019 23590806-Microcontrolere

    58/172

  • 7/29/2019 23590806-Microcontrolere

    59/172

    Descriere:Directiva este scris la sfritul blocului condiional pentru translatorul de asamblare pentru ati c este sfritul blocului condiional

    Exemplu:

    If level=100goto LOADSelsegoto UNLOADSendif

    Directivesimilare: ELSE, IF

    4.12 WHILE Execuia seciunii programului ct timp condiia este ndeplinit

    Sintax:

    while.endw

    Descriere:Liniile de program ntre WHILE I ENDW vor fi execuate ct timp condiia este ndeplinit.Dac condiia se oprete din a mai fi valid, programul continu executarea instruciunilorurmnd linia ENDW. Numrul de instruciuni dintre WHILE i ENDW poate fi cel mult 100,i numrul de execuii 256.

    Exemplu:While i

  • 7/29/2019 23590806-Microcontrolere

    60/172

    Sintax:ifdef

    Descriere:Dac desemnarea este definit anterior (cel mai adesea prin

    instruciunea#DEFINE), instruciunile ce urmeaz sunt executate pn ce nu se ajunge ladirectivele ELSE i ENDIF.

    Exemplu:#define test.ifdef test ;how the test is defined......; instructions from these lines will executeendif

    Directive similare: #DEFINE, ELSE, ENDIF, IFNDEF, #UNDEFINE

    4.15 IFNDEF Execuia unei pri de program dac simbolul este definit

    Sintax:ifndef

    Descriere:Dac desemnarea nu a fost definit anterior, sau dac definiia ei a fost tearscu directiva directive #UNDEFINE, instruciunile ce urmeaz sunt executate pn ce nu seajunge la directivele ELSE i ENDIF.

    Exemplu:#define test..........#undefine test..........ifndef test ;how the test is undefined..... .; instructions from these lines will executeendif

    Directive similare: #DEFINE, ELSE, ENDIF, IFDEF, #UNDEFINE

    Directive de Date

    4.16 CBLOCK Definind un bloc pentru constantele numite

    Sintax:Cblock []

    [:], [:]......endc

    Descriere:

    Directiva este folosit pentru a da valori constantelor numite. Fiecare termen ce urmeazprimete o valoare mai mare cu unu dect precursorul lui. Dac parametrul este

  • 7/29/2019 23590806-Microcontrolere

    61/172

  • 7/29/2019 23590806-Microcontrolere

    62/172

  • 7/29/2019 23590806-Microcontrolere

    63/172

    Ca un rezultat al procesului translrii unui program scris n limbaj de asamblare obinemfiiere ca:

    Fiier de executare (Program_Name.HEX) Fiier de erori program (Program_Name.ERR) Fiier list (Program_Name.LST)

    Primul fiier conine programul translat ce este citit n microcontroler prin programareare.Coninutul lui nu poate da orice informaie programatorului, aa c nu ne vom mai referi laele n continuare.Al doilea fiier conine posibile erorile ce au fost fcute n procesul scrierii, i ca au fostobservate de translatorul de asamblare n timpul procesului de translare. Erorile pot fidescoperite de asemenea ntr-un fiier "list". Acest fiier este mai potrivit dei cnd

    programul este mare i vederea fiierului "list" dureaz mai mult.Al treilea fiier este cel mai folositor programatorului. n el sunt coninute multe informaii, cainformaii despre instruciunile de poziionare i variabilele din memorie, sau semnalizarea

    erorii.

    Exemplu unui fiier "list" pentru program urmeaz n acest capitol. n captul fiecrei paginise gsesc informaii despre numele fiierului, data cnd a fost translat i numrul paginii.Prima coloan conine o adres din memoria programului unde este plasat o instruciune dinacel rnd. A doua coloan conine o valoare a oricrei variabile definit de una din directive:SET, EQU, VARIABLE, CONSTANT or CBLOCK. A treia coloan este rezervat pentruforma unei instruciuni translate pe care PIC-ul o execut. A patra coloan conineinstruciunile asamblorului i comentariile programatorului. Posibile erori vor apare ntrernduri urmnd o linie n care s-a produs eroarea.

  • 7/29/2019 23590806-Microcontrolere

    64/172

  • 7/29/2019 23590806-Microcontrolere

    65/172

  • 7/29/2019 23590806-Microcontrolere

    66/172

  • 7/29/2019 23590806-Microcontrolere

    67/172

  • 7/29/2019 23590806-Microcontrolere

    68/172

  • 7/29/2019 23590806-Microcontrolere

    69/172

  • 7/29/2019 23590806-Microcontrolere

    70/172

  • 7/29/2019 23590806-Microcontrolere

    71/172

    Opiune pentru utilizatorii care instaleaz o versiune nou peste o versiune dejainstalat de MPLAB

    Start meniu este un grup de pointeri de program, i este selectat prin clic pe opiunea STARTn colul de jos stng al ecranului. Pentru c MPLAB se va porni de aici, trebuie s lsmaceast opiune aa cum este.

    Adugarea MPLAB la start menu

  • 7/29/2019 23590806-Microcontrolere

    72/172

    Locaia care va fi menionat de aici ncolo, are de a face cu o parte a MPLAB n a cruiexplicaie nu este nevoie s intrm. Prin selectarea unui director special, MPLAB va inetoate fiierele n conexiune cu linker-ul ntr-un director separat.

    Determinnd un director pentru fiierele linker-ului

    Orice program Windows are fiierele de sistem n mod uzual memorate ntr-un directorconinnd programul Windows. Dup un numr de instalri diferite. Directorul Windowsdevine supraaglomerat i prea mare. Astfel, unele programe permit ca fiierele lor de sistems fie inute n aceiai directori cu programele. MPLAB este un exemplu de asemenea

    program, i trebuie selectat opiunea de jos.

  • 7/29/2019 23590806-Microcontrolere

    73/172

  • 7/29/2019 23590806-Microcontrolere

    74/172

    Desfurarea instalrii

    Dup ce instalarea este gata, sunt dou ecrane de dialog, unul pentru informaia de ultimmoment privind versiunile programului i coreciile, iar cellalt este un ecran de binevenit.Dac s-au deschis fiierele text (Readme.txt), ele trebuie nchise.

  • 7/29/2019 23590806-Microcontrolere

    75/172

    Informaii de ultim moment privind versiunile programului i coreciile

    Fcnd clic pe Finish, instalarea MPLAB este terminat.

    5.2 Introducere n MPLAB

    Urmnd procedura de instalare, vei obine un ecran al programului nsui. Dup cum vedei,MPLAB arat ca cele mai multe programa Windows. n apropierea zonei de lucru este un"menu" (n partea de sus colorat n albastru cu opiunile File, Editetc.), "toolbar" (o zon cuilustraii de mrimea unor ptrate mici), i linia de stare n partea de jos a ferestrei. Este oregul n Windows de a lua cele mai frecvent folosite opiuni de programe i de a le plasa mai

    jos de menu, de asemenea. Astfel le putem accesa mai uor i s grbim lucrul. Cu alte

    cuvinte, ceea ce avei n n toolbar avei de asemenea n menu.

    Ecranul dup startarea MPLAB

    Scopul acestui capitol este ca s devenii familiar cu mediul de dezvoltare MPLAB i cuelementele de baz ale MPLAB ca:

    Alegerea modului de dezvoltareConceperea unui proiect

  • 7/29/2019 23590806-Microcontrolere

    76/172

  • 7/29/2019 23590806-Microcontrolere

    77/172

    5.4 Conceperea unui proiect

    Pentru a ncepe s scriei un program avei nevoie s creai mai inti un proiect. Fcnd clicpe PROJECT --> NEW PROJECT putei s v denumii proiectul i s-l memorai ntr-undirector pe care-l dorii. n imaginea de mai jos, este creat un proiect numit 'test.pjt' i

    memorat n directorul c:\PIC\PROJEKTS\.

    Acest director este ales pentru c autorii au ales acest director n calculatorul lor. n general,un director cu fiiere este plasat de obicei ntr-un director mai mare a crui nume este asociatnegreit cu coninutul lui.

    Deschiderea unui proiect nou

    Dup denumirea unui proiect, clic pe OK. O nou fereastr apare n imaginea umtoare.

  • 7/29/2019 23590806-Microcontrolere

    78/172

    Ajustnd elementele proiectului

    Fcnd un clic pe "test [.hex]" se activeaz opiunea 'Node properties' n colul din dreapta josa ferestrei. Fcnd clic pe ea obinei urmtoarea fereastr.

  • 7/29/2019 23590806-Microcontrolere

    79/172

  • 7/29/2019 23590806-Microcontrolere

    80/172

    Deschiznd un proiect nou

    Fcnd clic pe OK ne ntoarcem la fereastra de nceput unde observm adugat un fiierasamblor.

    Fiier asamblor adugat

    Fcnd clic pe OK ne ntoarcem la mediul de dezvoltare MPLAB.

    5.5 Conceperea unui nou fiier asamblor(scrierea un program nou)

    Cnd partea "proiect" a lucrului este terminat, trebuie s ncepem s scriem un program. Cualte cuvinte, un nou fiier trebuie deschis, i se va denumi "test.asm". n cazul nostru, fiierultrebuie denumit "test.asm" pentru c n proiecte ce au doar un fiier ( ca al nostru), numele

    proiectului i numele fiierului surs trebuie s fie aceleai.

    Un nou fiier este deschis fcnd clic pe FILE>NEW. Astfel obinem o fereastr text ninteriorul spaiului de lucru MPLAB.

  • 7/29/2019 23590806-Microcontrolere

    81/172

  • 7/29/2019 23590806-Microcontrolere

    82/172

    5.6 Scrierea unui program

    Numai dup ce toate operaiile precedente au fost terminate suntem capabili s ncepem s

    scriem un program. Pentru c un program simplu a fost deja scris n seciunea crii"Programare n Limbaj de Asamblare", vom folosi acelai program aici, de asemenea.

    Programul trebuie s fie scris ntr-o fereastr care este deschis, sau copiat de pe un disc, sauluat din prezentarea Mikroelektronika Internet folosind opiunile copy i paste. Cnd

    programul este copiat n "test.asm" window, putem folosi comanda PROJECT -> BUILDALL (dac nu sunt erori), i o nou fereastr va apare ca n imaginea urmtoare.

  • 7/29/2019 23590806-Microcontrolere

    83/172

    Fereastr cu mesaje dup translarea programului asamblor

    Putem vedea din imagine c obinem fiierul "test.hex" ca rezultat al procesului de translare,pentru care este folosit programul MPASMWIN, i c este doar un mesaj. n toate acesteinformaii, ultima propoziie n fereastr este cea mai important pentru c arat dactranslarea a fost sau nu fcut cu succes. 'Build completed successfully' este un mesajafirmnd c translarea a fost de succces i c nu sunt alt erori.

    n caz c apare o eroare, trebuie s facem dublu clic pe mesajul eroare n fereastra 'BuildResults'. Aceasta v va transfera automat n programul asamblor i n linia unde a fosteroarea.

    5.7 Simulatorul MPSIM

    Simulatorul este o parte a mediului MPLAB care d o mai bun imagine a lucrrilor unuimicrocontroler. Printr-un simulator, putem monitoriza valorile curente ale variabilelor,

    valorile registrului i starea pinilor portului. Este adevrat, simulatorul nu are aceeai valoaren toate programele. Dac un program este simplu ( ca cel dat aici ca exemplu), simulrea nueste foarte important pentru c setarea pinilor portului B la unu logic nu este o sarcindificil. Totui, simulatorul poate fi de mare de mare ajutor la programele mai complicate ceinclud timer-i, condiii diferite unde ceva se ntmpl , i alte cerine similare (n special cuoperaii matematice). Simularea, dup cum indic numele " simuleaz lucrul unuimicrocontroler". n timp ce simulatorul este conceput ca microcontrolerul s executeinstruciunile una cte una, programatorul se mic ntr-un program pas-cu-pas (linie-cu-linie)i urmrete ce se ntmpl cu datele n microcontroler. Cnd scrierea s-a terminat, este unobicei bun ca programatorul s-i verifice mai nti programul su n simulator, i apoi s-lruleze ntr-o situaie real. Din nefericire, a cum se ntmpl cu multe alte obiceiuri bune,

    acesta este mai puin sau mai mult luat n seam. Motivele pentru aceasta sunt n partepersonalitatea, i n parte lipsa unor simulatoare bune.

  • 7/29/2019 23590806-Microcontrolere

    84/172

    Primul lucru pe care trebuie s-l facem este, ca ntr-o situaie real, este de a reseta unmicrocontroler cu comanda DEBUG > RUN > RESET. Aceast comand rezult n liniangroat poziionat la nceputul unui program, i contorul programului este poziionat lazero ceea ce poate fi observat n linia de stare (pc: 0x00).

    nceperea simulrii programului, resetarea microcontrolerului

    Una din principalele caracteristici a simulatorului este abilitatea de a vedea starea regitrilordin microcontroler. Aceti regitri sunt numii regitri de funcie special, sau SFR. Putemobine o fereastr cu regitri SFR fcnd clic pe WINDOW->SPECIAL FUNCTIONREGISTERS, sau pe icon-ul SFR. nafar de regitrii SFR, este util de a avea o avea o priviren interiorul fiierului regitrilor. Fereastra cu fiierul regitrilor poate fi deschis fcnd clic

    pe WINDOW->FILE REGISTERS. Dac sunt variabile n program, este bine de a le vedea deasemenea. Fiecrei variabile i este desemnat o fereastr (Watch Windows) fcnd clic peWINDOW->WATCH WINDOWS.

  • 7/29/2019 23590806-Microcontrolere

    85/172

  • 7/29/2019 23590806-Microcontrolere

    86/172

    Toolbar universal cu scurte explicaii ale icon urilor

    Descriere a icon-urilor toolbar-ului

    Dac toolbar-ul curent nu rspunde datorit diferitor motive la un clic pe acest icon,apare urmtorul. Schimbarea total este repetat aa nct la al patrulea clic vomobine acelai toolbar.

    Icon pentru deschiderea unui proiect. Proiectul deschis n acest fel conine toateajustrile ecranului i ajustarea tuturor elementelor care sunt cruciale pentru proiectulcurent.

    Icon pentru salvarea unui proiect. Proiectul salvat va pstra toate ajustrile ferestrei itoate ajustrile parametrilor. Cnd citim un program din nou, totul se va ntoarce pe

    ecran ca atunci cnd s-a nchis proiectul.Cutarea unei pri de program, sau cuvinte este operaia de care avem nevoie cndcutm printr-un asamblor mare sau alte programe. Folosindu-l, putem gsi repede o

    parte a programului, label, macro, etc.

    Tind o parte a textului. Acesta i urmtoarele trei icon-uri sunt standard n toateprogramele care au de a face cu procesarea fiierelor textuale. Pentru c fiecareprogram este de fapt un fiier text obinuit, aceste operaii sunt folositoare.

    Copiind o parte a textului. Este o diferen ntre acesta i iconul precedent.Cuoperaia de tiere, cnd tiai o parte a textului, dispare din ecran (i din program) i

    este copiat dup aceea. Dar cu operaia copy, textul este copiat i nu tiat, i rmnepe ecran.

  • 7/29/2019 23590806-Microcontrolere

    87/172

    Cnd o parte a textului este copiat, este mutat ntr-o parte a memoriei ce servetepentru transferarea datelor n sistemul operaional Windows. Mai trziu, fcnd clicpe acest icon poate fi lipit-'pasted' n textul unde este cursorul.

    Salvnd un program (fiier asamblor).

    Starteaz execuia programului la vitez maxim.Se recunoate prin apariia unei liniide stare galbene. Cu acest fel de execuie de program, simulatorul execut un

    program la vitez maxim pn ce este ntrerupt de un clic pe iconul cu lumin roiede trafic.

    Oprete execuia programului la vitez maxim. Dup clic pe acest icon, linia destare devine gri din nou, i execuia programului poate continua pas cu pas.

    Pas cu pas execuia programului. Fcnd clic pe acest icon, ncepem executarea uneiinstruciuni din linia urmtoare n legtur cu cea curent.

    Cerere de a sri-skip. Pentru c simulatorul este totui o simulare de software delucru real, este posibil de a sri pur i simplu peste unele cereri ale programului.Aceasta este n special la ndemn cu instruciuni ce ateapt o anumit cerere dupcare programul poate s continue. Acea parte a programului ce urmeaz unei cereieste partea ce este interesant pentru un programator.

    Resetnd un microcontroler. Fcnd clic pe acest icon, contorul programului estepoziionat la nceputul programului i simularea poate ncepe.

    Fcnd clic pe acest icon obinem o fereastr cu un program, dar de aceast dat camemorie de program unde putem veea ce instruciune este gsit i la ce adres.

    Cu ajutorul acestui icon obinem o fereastr cu coninutul memoriei RAM amicrocontrolerului.

    Fcnd clic pe acest icon, apare fereastra cu registrul SFR. Pentru c regitrii SFRsunt folosii n fiecare program, este recomandat ca n simulator aceast fereastr sfie totdeauna activ.

    Dac un program conine variabile ale cror valoare trebuie s le urmrim (ex.contorul), o fereastr are nevoie s fie adgat pentru fiecare din ele, ceea ce se face

    prin folosi