Microcontroler Pic

download Microcontroler Pic

of 49

Transcript of Microcontroler Pic

  • 8/10/2019 Microcontroler Pic

    1/49

    Colegiu Universitar

    Lucrare de absolvire

    Sibiu2005

    Cuprins

    Introducere

    Cap.1 Partea teoretica

    1.1Introducere in microcontrolere

    1.2Bobina:parametrii,caracteristici

    1.3Metode de masura a parametrilor bobimelor

    1.4Erori de masuara a bobinelor

    1.5Afisarea LCD.Principii de functionare

    1.6Metode de programare a Pic-ului

    Cap.2Proiect tehnic

    2.1 scheme bloc

    2.2blocul1(oscillator cu bobina:LM,Fet)

    2.3blocul2(microcontrolerul)

    2.4Programul limbajului de asamblare

    2.4.1.Organigrama

    2.4.2Sursa de alimentare

  • 8/10/2019 Microcontroler Pic

    2/49

    ANEXE :A.1.Schema electronica

    A.2Cablaje

    A.3Lista componenete

    A.4Listarea programului si limbajului de asamblare

    BIBLIOGRAFIE

    Dispozitive si circuite electronice,vol I-Mihu P.Ioan

    Exploatarea paralelismului in

    microprocesoarele avansate, -Lucian Vintan

    Pic'n up the pace -David Benson

    www.microchip.com

    www.electronica.ro

    www.elektronikladen.de

    Cap.1 Introducere n Microcontrolere

    1.1 Istoria microcontrolelorEste anul 1969, si o echipa de ingineri japonezi de la compania BUSICOM

    sosesc n Statele Unite cu cererea ca unele circuite integrate pentru calculatoaresa fie facute folosind proiectele lor. Propunerea a fost facuta catre INTEL, iar

    Marcian Hoff a fost desemnat responsabil cu acest proiect. Pentru ca el era celce avea experienta n lucrul cu un calculator ( PC) PDP8, i-a venit sa sugereze osolutie diferita fundamental n locul constructiei propuse. Aceasta solutie

    presupunea ca functionarea circuitului integrat este determinata de un programmemorat n el. Aceasta a nsemnat ca configuratia ar fi fost mult mai simpla, daraceasta ar fi cerut mult mai multa memorie dect ar fi cerut proiectul propus deinginerii japonezi. Dupa un timp, cu toate ca inginerii au cautat sa caute o solutiemai simpla, ideea lui Marcian a cstigat, si aluat nastere primul microcontroler.n transformarea unei idei ntr-un produs finit, Frederico Faggin a fost de unajutor major pentru INTEL. El s-a transferat la INTEL, si doar n 9 luni a reusitsa scoata un produs din prima sa conceptie. INTEL a obtinut drepturile de avinde acest bloc integral n 1971. n primul rnd ei au cumparat licenta de la

    http://www.electronica.ro/http://www.electronica.ro/http://www.elektronikladen.de/http://www.elektronikladen.de/http://www.elektronikladen.de/http://www.electronica.ro/
  • 8/10/2019 Microcontroler Pic

    3/49

    compania BUSICOM care nu au avut idee ce comoara avusesera. n timpulacelui an a aparut pe piata un microprocesor numit 4004. Acela a fost primulmicroprocesor de 4 biti cu viteza 6000 operatii pe secunda. Nu mult dupa aceea,compania americana CTC a cerut de la INTEL si de la Texas Instruments sa facaun microprocesor pe 8 biti pentru folosinta n terminale. Cu toate ca CTC a

    renuntat la aceasta idee pna la sfrsit, INTEL si Texas Instruments au continuatsa lucreze la microprocesor si n aprilie 1972 a aparut pe piata primulmicroprocesor de 8 biti sub numele de 8008. Putea sa adreseze 64Kb dememorie si avea 45 de instructiuni si viteza de 300.000 de operatii pe secunda.Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astazi.INEL au continuat dezvoltarile lor pna n aprilie 1974 si au lansat pe piatamicroprocesorul de 8 biti sub numele de 8080 ce putea adresa 64Kb de memoriesi avea 75 de instructiuni, iar pretul ncepuse de la 360$.

    ntr-o alta companie americana Motorola, si-au dat seama repede ce se

    ntmpla, asa ca au lansat pe piata un microprocesor de 8 biti 6800. Costructorsef era Chuck Peddle si pe lnga microprocesorul propriu-zis, Motorola a fostprima companie care sa faca alte periferice ca 6820 si 6850. La acel timp multecompanii au recunoscut marea importanta a microprocesoarelor si au nceput

    propriile lor dezvoltari. Chuck Peddle paraseste Motorola pentru a se muta laMOS Technology si continua sa lucreze intensiv la dezvoltareamicroprocesoarelor.

    La expozitia WESCON din Statele Unite din 1975 a avut loc uneveniment critic n istoria microprocesoarelor. MOS Technology a anuntat ca

    produce microprocesoarele 6501 si 6502 la 25$ bucata pe care cumparatorii leputeau cumpara imediat. Aceasta a fost att de senzational nct au crezut ca esteun fel de nselaciune, gndind ca competitorii vindeau 8080 si 6800 la 179$. Caun raspuns la competitorii lor att INTEL ct si Motorola au scazut preturile lorn prima zi a expozitiei pna la 69.95$ pe microprocesor. Motorola intenteazarepede proces contra lui MOS Technology si contra lui Chuck Peddle pentrucopierea protejatului 6800. MOS Technology nceteaza de a mai produce 6501dar continua sa produca 6502. 6502 este un microcontroler pe 8 biti cu 56 deinstructiuni si o capabilitate de adresare directa de 64Kb de memorie. Datoritacostului scazut, 6502 devine foarte popular, asa ca este instalat n computere ca:KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra simulte altele. Curnd apar ctiva producatori de 6502 (Rockwell, Sznertek, GTE,

    NCR, Ricoh si Comodore preiau MOS Technology) ce era n momentulprosperitatii sale vndut la o rata de 15 milioane de microprocesoare pe an!

    Altii totusi nu au cedat. Federico Faggin paraseste INTEL, si si pornestepropria sa companie Zilog Inc.

    n 1976 Zilog anunta Z80. n timpul crearii acestui microprocesor, Fagginface o decizie cruciala. stiind ca un mare numar de programe fusesera dezvoltate

    pentru 8080, Faggin si da seama ca multi vor ramne fideli acelui

    microprocesor din cauza marii cheltuieli care ar rezula n urma refacerii tuturorprogramelor. Astfel el decide ca un nou microprocesor trebuie sa fie compatibil

  • 8/10/2019 Microcontroler Pic

    4/49

    cu 8080, sau ca trebuie sa fie capabil sa execute toate programele care dejafusese scrise pentru 8080. nafara acestor caracteristici, multe altele noi au fostadaugate, asa ca Z80 a fost un microprocesor foarte puternic la vremea lui. Se

    putea adresa direct la 64Kb de memorie, avea 176 instructiuni, o singurasursa,mult mai mare viteza de lucru etc. Z80 a fost un succes mare si toata lumea

    a facut conversia de 8080 la Z80. Se poate spune ca Z80 a fost fara nici ondoiala comercial, cel mai de succes microcontroler de 8 biti a acelui timp.nafara de Zilog, alti noi producatori apar de asemenea ca :Mostek, NEC,SHARP si SGS. Z80 a fost inima a multor computere ca :Spectrum, Partner,TRS703, Z-3 si Galaxi aici acasa.

    n 1976, INTEL iese pe piata cu o versiune mbunatatita de microprocesorpe 8 biti numit 8085.Totusi, Z80 era cu mult mai bun nct INTEL a apierdutbatalia. Chiar daca nca cteva microprocesoare au aparut pe piata(6809,2650,SC/MP etc.), totul fusese de fapt deja hotart. Nu mai erau de facut

    mbunatatiri importante ca sa-i faca pe producatori sa se converteasca spre cevanou, asa ca 6502 si Z80 mpreuna cu 6800 au ramas ca cei mai reprezentativi aimicroprocesoarelor de 8 biti a acelui timp.1.2 Deosebirea dintre Microprocesoare si

    Microcontrolere

    Microcontrolerul difera de un microprocesor n multe feluri. n primul rndsi cel mai important este functionalitatea sa. Pentru a fi folosit, unuimicroprocesor trebuie sa i se adauge alte componente ca memorie, sau

    componente pentru primirea si trimiterea de date. Pe scurt, aceasta nseamna camicroprocesorul este inima computerului. Pe de alta parte, microcontrolerul esteproiectat sa fie toate acestea ntr-unul singur. Nu sunt necesare alte componenteexterne pentru aplicarea sa pentru ca toate perifericele necesare sunt deja inclusen el.

    Astfel, economisim timpul si spatiul necesare pentru construirea deaparate. Un microcontroler este un "calculator 414o147e pe un chip". Cuvantul"micro" sugereaza marimea redusa a dispozitivului iar "controler" ne spune cadispozitivul poate fi folosit pentru a controla obicte, procese sau evenimente.

    Microcontrolerele pot fi gasite in componenta oricarui tip de aparat. Oriceaparat care masoara, stocheaza, comanda, calculeaza sau afiseazainformatii este o potentiala gazda pentru un microcontroler.De exemplu oriceautomobil fabricat astazi este echipat cu cel putin un microcontroler carecomanda motorul masinii si adesea chiar cu mai multe pentru comandasistemelor aditionale din automobil. In calculatoare de birou (PC) se pot gasiimicrocontrolere in tastatura, modemuri, imprimante si alte periferice. Inechipamentele de testare fac posibila adaugarea unor facilitati ca de exemplumemorarea rezultatelor masurarii, afisarea mesajelor si formelor deunda. Produsele de larg consum care includ microcontrolere sunt camerele

    video, video recorderele, compact-disk (CD) playere si altele. Un microcontrolereste similar unui microprocesor. Ambele contin o unitate centrala de prelucrare

  • 8/10/2019 Microcontroler Pic

    5/49

    sau UCP (cenral processing unit). CPU executa instructiuni care indeplinescoperatiile de baza logice, matematice si de curgere a informatiei.

    Pentru a construi un calculator complet, microprocesorul necesitamemorie pentru pastrarea datelor si programelor, interfete de intrare-iesire (I/O)

    pentru conectarea dispozitivelor externe cum ar fi tastatura sau monitorul. Spre

    diferenta de microprocesor, microcontrolerul este un calculator pe un chipdeorece el contine si memorie si interfete de intrare-iesire pe langa CPU.Deoarece memoria si interfetele care incap peun chip sunt limitate,microcontrolerele tind sa fie utilizate in sisteme mai mici care necesita doar unmicrocontroler si cateva elemente aditionale1.3 Blocurile de baza a microcontrolerului

    1.3.1Unitatea de memorieMemoria este o parte a microcontrolerului a carei functie este de a

    nmagazina date.

    Cel mai usor mod de a explica este de a-l descrie ca un dulap mare cumulte sertare. Daca presupunem ca am marcat sertarele ntr-un asemenea felnct sa nu fie confundate, oricare din continuturile lor vor fi atunci usoraccesibile. Este suficient sa se stie desemnarea sertarului si astfel continuturilelui ne vor fi cunoscute n mod sigur.

    Componentele de memorie sunt exact asa. Pentru o anumita intrareobtinem continuturile unei anumite locatii de memorie adresate siaceasta este totul. Doua noi concepte ne sunt aduse :adresarea si locatia dememorie. Memoria consta din toate locatiile de memorie, si adresarea nu estealtceva dect selectarea uneia din ele. Aceasta nseamna ca noi trebuie saselectam locatia de memorie la un capat, si la celalalt capat trebuie sa asteptamcontinuturile acelei locatii. n afara de citirea dintr-o locatie de memorie,memoria trebuie de asemenea sa permita scrierea n ea. Aceasta se faceasigurarea unei linii aditionale numita linie de control. Vom desemna aceasta

    linie ca R/W (citeste /scrie). Linia de control este folosita n urmatorul fel : dacar/w=1, se face citirea, si daca opusul este adevarat atunci se face scrierea n

  • 8/10/2019 Microcontroler Pic

    6/49

    locatia de memorie. Memoria este primul element, dar avem nevoie si de altelepentru ca microcontrolerul nostru sa functioneze.

    1.3.2 Unitatea centrala de procesareSa adaugam alte 3 locatii de memorie pentru un bloc specific ce va avea

    o capabilitate incorporata de nmultire, mpartire, extragere si sa-i mutam

    continuturile dintr-o locatie de memorie n alta. Partea pe care tocmai amadaugat-o este numita "unitatea de procesare centrala" (CPU). Locatiile ei dememorie sunt numite registri.

    Registrii sunt deci locatii de memorie a caror rol este de a ajuta prinexecutarea a variate operatii matematice sau a altor operatii cu date oriunde sevor fi gasit datele. Sa privim la situtia curenta. Avem doua entitati independente(memoria si CPU) ce sunt interconectate, sI astfel orice schimb de informatiieste ascuns, ca si functionalitatea sa. Daca, de exemplu, dorim sa adaugamcontinuturile a doua locatii de memorie si ntoarcem rezultatul napoi n

    memorie, vom avea nevoie de o conexiune ntre menmorie si CPU. Mai simpluformulat, trebuie sa avem o anumita "cale" prin care datele circula de la un blocla altul.

    1.3.3Bus-ul de dateCalea este numita "bus"-magistrala. Fizic, el reprezinta un grup de 8,

    16, sau mai multe fire. Sunt doua tipuri de bus-uri : bus de adresa si bus de date.Primul consta din attea linii ct este cantitatea de memorie ce dorim sa oadresam, iar celalalt este att de lat ct sunt datele, n cazul nostru 8 biti sau liniade conectare. Primul serveste la transmiterea adreselor de la CPU la memorie,

    iar cel de al doilea la conectarea tuturor blocurilor din interiorulmicrocontrolerului.

  • 8/10/2019 Microcontroler Pic

    7/49

    n ceea ce priveste functionalitatea, situatia s-a mbunatatit, dar o noua

    problema a aparut de asemenea: avem o unitate ce este capabila sa lucrezesingura, dar ce nu are nici un contact cu lumea de afara, saucu noi ! Pentru a nlatura aceasta deficienta, sa adaugam un bloc ce continecteva locatii de memorie a caror singur capat este conectat la busul de date, iarcelalat are conexiune cu liniile de iesire la microcontroler ce pot fi vazute cuochiul liber ca pini la componenta electronica.

    1.3.4Unitatea de intrare-iesireAceste locatii ce tocmai le-am adaugat sunt numite "porti".Sunt diferite

    tipuri de porti :intrare, iesire sau porti pe doua-cai. Cnd se lucreaza cu porti,

    mai nti de toate este necesar sa se aleaga cu ce pot urmeaza sa se lucreze, siapoi sa se trimita date la, sau sa se ia date de la port.

    Cnd se lucreaza cu el portul se comporta ca o locatie de memorie. Cevaeste pur si simplu scris n sau citit din el, si este posibil de a remarca usoraceasta la pinii microcontrolerului.

    1.3.5 Comutatia serialaCu aceasta am adaugat la unitatea deja existenta posibilitatea comunicarii

    cu lumea de afara. Totusi, acest mod de comunicare are neajunsurile lui. Unuldin neajunsurile de baza este numarul de linii ce trebuie sa fie folosite pentru a

    transfera datele. Ce s-ar ntmpla daca acestea ar trebui transferate la distanta dectiva kilometri? Numarul de linii si numarul de kilometri nu promite costurieficiente pentru proiect. Nu ne ramne dect sa reducem numarul de linii ntr-

  • 8/10/2019 Microcontroler Pic

    8/49

    un asa fel nct sa nu afectam functionalitatea. Sa presupunem ca lucram doar cu3 linii, si ca o linie este folosita pentru trimiterea de date, alta pentru receptie si atreia este folosita ca o linie de referinta att pentru partea de intrare ct si pentru

    partea de iesire. Pentru ca aceasta sa functioneze, trebuie sa stabilim regulile deschimb ale datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea

    definit n avans ca sa nu fie nici o netelegere ntre partile ce comunica una cualta. De exemplu, daca un om vorbeste n franceza, si altul vorbeste n engleza,este putin probabil ca ei se vor ntelege repede si eficient unul cu altul. Sa

    presupunem ca avem urmatorul protocol. Unitatea logica "1" este setata pe liniade transmisie pna ce incepe transferul. Odata ce ncepe transferul, cobormlinia de transmisie la "0" logic pentru o perioada de timp (pe care o vomdesemna ca T), asa ca partea receptoare va sti ca sunt date de primit, asa ca vaactiva mecanismul ei de receptie. Sa ne ntoarcem acum la partea de transmisiesi sa ncepem sa punem zero-uri si unu-uri pe linia de transmisie n ordinea de la

    un bit a celei mai de jos valori la un bit a celei mai de sus valori. Sa lasam cafiecare bit sa ramna pe linie pentru o perioada de timp egala cu T, si la sfrst,sau dupa al 8-lea bit, sa aducem unitatea logica "1" napoi pe linie ce vamarca sfrsitul transmisiei unei date. Protocolul ce tocmai l-am descris estenumit n literatura profesionala NRZ (Non-Return to Zero).

    Pentru ca aven linii separate de receptie si de transmitere, este posibil sareceptionam si sa transmitem date (informatii) n acelasi timp. Blocul ce permiteacest mod de comunicare este numit blocul de comunicare seriala. Spredeosebire de transmisia paralela, datele sunt mutate aici bit cu bit, sau ntr-oserie de biti, de unde vine si numele de comunicatie seriala. Dupa receptia dedate trebuie sa le citim din locatia de transmisie si sa le nmagazinam nmemorie n mod opus transmiterii unde procesul este invers. Datele circula dinmemorie prin bus catre locatia de trimitere, si de acolo catre unitatea de receptieconform protocolului.

    1.3.6 Unitatea de timerAcum ca avem comunicatia seriala, putem receptiona, trimite si procesa

    date.

  • 8/10/2019 Microcontroler Pic

    9/49

    1.3.7 Watchdog-ulnca un lucru ce necesita atentia noastra este functionarea fara defecte a

    microcontrolerului n timpul functionarii. Sa presupunem ca urmare a uneianumite interferente (ce adesea se ntmpla n industrie) microcontrolerul nostruse opreste din executarea programului, sau si mai rau, ncepe sa functionezeincorect.

    Binenteles, cnd aceasta se ntmpla cu un computer, l resetam pur sisimplu si va continua sa lucreze. Totusi, nu exista buton de resetare pecare sa apasam n cazul microcontrolerului care sa rezolve astfel problemanoastra. Pentru a depasi acest obstacol, avem nevoie de a introduce nca un blocnumit watchdog-cinele de paza. Acest bloc este de fapt un alt contor liber unde

    programul nostru are nevoie sa scrie un zero ori de cte ori se executa corect. ncaz ca programul se "ntepeneste", nu se va mai scrie zero, iar contorul se vareseta singur pna la obtinerea valorii sale maxime. Aceasta va duce la rularea

    programului din nou, si corect de aceasta data pe toata durata. Acesta este unelement important al fiecarui program ce trebuie sa fie fiabil fara supraveghereaomului.

    1.3.8 Convertorul Analog-DigitalPentru ca semnalele de la periferice sunt substantial diferite de cele pe

    care le poate ntelege (zero si unu), ele trebuie convertite ntr-un mod care sa fienteles de microcontroler. Aceasta sarcina este ndeplinita de un bloc pentruconversia analog-digitala sau de un convertor AD. Acest bloc este responsabil

    pentru convertirea unei informatii despre o anumita valoare analoga ntr-unnumar binar si pentru a o urmari pe tot parcursul la un bloc CPU asa ca bloculCPU sa o poata procesa.

    Astfel microcontrolerul este acum terminat, si tot ce mai ramne de facuteste de a-l pune ntr-o componenta electronica unde va accesa blocurile

    interioare prin pinii acestei componente. Imaginea de mai jos arata cum arata unmicrocontroler n interior.

  • 8/10/2019 Microcontroler Pic

    10/49

    Cofiguratia fizica a interiorului unui microcontrolerLiniile subtiri ce merg din interior catre partile microcontrlerului

    reprezinta fire conectnd blocurile interioare cu pinii capsuleimicrocontrolerului. Schema urmatoare reprezinta sectiunea centrala amicrocontrolerului.

    Pentru o aplicatie reala, un microcontroler singur nu este de ajuns. nafarade microcontroler, avem nevoie de un program pe care sa-l execute, si altecteva elemente ce constituie o interfata logica catre elementele de stabilizare(ce se va discuta n capitolele urmatoare).

    1.3.9 ProgramulScrierea programului este un domeniu special de lucru al

    microcontolerului si este denumit "programare". Sa ncercam sa scriem un mic

  • 8/10/2019 Microcontroler Pic

    11/49

    program ce l vom crea singuri si pe care oricine va fi n stare sa-l nteleaga.STARTREGISTER1=MEMORY LOCATION_AREGISTER2=MEMORY LOCATION_BPORTA=REGISTER1 + REGISTER2

    END

    Programul adauga continuturile a doua locatii de memorie, si vede totalullor la portul A. Prima linie a programului este pentru mutarea continuturilorlocatiei de memorie "A" ntr-unul din registri unitatii centrale de

    procesare. Pentru ca avem nevoie si de celelalte date de asemenea, le vom mutade asemenea n celalalt registru al unitatii centrale de procesare. Urmatoareainstructiune instruieste unitatea centrala de procesare sa adauge continuturilecelor doi registri sa sa trimita un rezultat obtinut la portul A, nct suma acesteiadaugari sa fie vizibila pentru toata lumea de afara. Pentru o problema mai

    complexa, programul care sa lucreaze la rezolvarea ei va fi mai mare. Programarea poate fi facuta n ctava limbaje ca Assembler, C si Basic

    care sunt cele mai folosite limbaje. Assembler apartine limbajelor de nivelscazut ce sunt programate lent, dar folosesc cel mai mic spatiu n memorie si dacele mai bune rezultate cnd viteza de executie a programului se are n vedere.Pentru ca este cel mai folosit limbaj n programarea microcontrolerelor va fidiscutat ntr-un capitol ulterior. Programele n limbajul C sunt mai usor de scris,mai usor de nteles, dar sunt mai lente n executare dect programele nAssembler. Basic este cel mai utor de nvatat, si instructiunile sale sunt cele mai

    aproape de modul de gndire a omului, dar ca si limbajul de programare C estede asemenea mai lent dect Assembler-ul. n orice caz, nainte de a va hotar nprivinta unuia din aceste limbaje trebuie sa studiati cu atentie cerintele privindviteza de executie, marimea memoriei si timpul disponibil pentru asamblarea sa.

    Dupa ce este scris programul, trebuie sa instalam microcontrolerul ntr-unaparat si sa-l lasam sa lucreze. Pentru a face aceasta trebuie sa adaugam ctevacomponente externe necesare pentru functionarea sa. Mai nti trebuie sa damviata microcontrolerului prin conectarea sa la o sursa (tensiune necesara pentruoperarea tuturor instrumentelor electronice) si un oscilator a carui rol este

    similar inimii din corpul uman. Bazat pe ceasul sau microcontrolerul executainstructiunile programului. ndata ce este alimentat microcontrolerul va executaun scurt control asupra sa, se va uita la nceputul programului si va ncepe sa-lexecute. Cum va lucra aparatul depinde de multi parametri, cel mai importantfiind priceperea dezvoltatorului de hardware, si de expertiza programatorului nobtinerea maximului din aparat cu programul sau.

    Microcontrolerul PIC16F84

    PIC16F84 apartine unei clase de microcontrolere de 8 biti cu arhitecturaRISC. Structura lui generala este aratata n schita urmatoare reprezentnd

  • 8/10/2019 Microcontroler Pic

    12/49

    blocurile de baza.Memoria program (FLASH)-pentru nmagazinarea unui program scris.

    Pentru ca memoria ce este facuta n tehnologia FLASH poate fi programata sistearsa mai mult dect odata, aceasta face microcontrolerul potrivit pentrudezvoltarea de componenta.

    EEPROM-memorie de date ce trebuie sa fie salvate cnd nu mai estealimentare. Este n mod uzual folosita pentru nmagazinarea de date importantece nu trebuie pierdute daca sursa de alimentare se ntrerupe dintr-o data. Deexemplu, o astfel de data este o temperatura prestabilita n regulatoarele detemperatura. Daca n timpul ntreruperii alimentarii aceasta data se pierde, vatrebui sa facem ajustarea nca o data la revenirea alimentarii. Asfel componentanoastra pierde n privinta auto-mentinerii.

    RAM-memorie de date folosita de un program n timpul executarii sale. nRAM sunt nmagazinate toate rezultatele intermediare sau datele temporare ce

    nu sunt cruciale la ntreruperea sursei de alimentare.PORTUL A si PORTUL B sunt conexiuni fizice ntre microcontroler sinlumea de afara. Portul A are 5 pini, iar portul B are 8 pini.

    TIMER-ul LIBER este un registru de 8 biti n interiorulmicrocontrolerului ce lucreaza independent de program. La fiecare al patruleaimpuls de ceas al oscilatorului si ncrementeaza valoarea lui pna ce atingemaximul (255), si apoi ncepe sa numere tot din nou de la zero. Dupa cum stimtimpul exact dintre fiecare doua incrementari ale continutului timer-ului, poate fifolosit pentru masurarea timpului ce este foarte util la unele componente.

    UNITATEA DE PROCESARE CENTRAL are rolul unui elemnet de

    conectivitate ntre celelalte blocuri ale microcontrolerului. Coordoneaza lucrulaltor blocuri si executa programul utilizatorului.

  • 8/10/2019 Microcontroler Pic

    13/49

    CISC, RISCS-a spus deja ca PIC1684 are o arhitectura RISC. Acest termen este

    adeseori gasit n literatura despre computere, si are nevoie sa fie explicat aicimai n detaliu. Arhitectura Harvard este un concept mai nou dect von-

    Neumann`s. S-a nascut din nevoia de marire a vitezei microcontrolerului. n

    arhitectura Harvard, bus-ul de date bus-ul de adrese sunt separate. Astfel unmare debit de date este posibil prin unitatea de procesare centrala, si binenteles,o viteza mai mare de lucru. Separnd un program de memoria de date face

    posibil ca mai departe instructiunile sa nu trebuiasca sa fie cuvinte de 8 biti.PIC16F84 foloseste 14 biti pentru instructiuni ceea ce permite ca toateinstructiunile sa fie instructiuni de un cuvnt. Este de asemenea tipic pentruarhitectura Harvard sa aiba mai putine instructiuni dect von-Newmann si saaiba instructiuni executate uzual intr-un ciclu.

    Microcontrolerele cu arhitectura Harvard sunt de asemenea numite"microcontrolere RISC". RISC nseamna Reduced Instruction Set Computer.Microcontrolerele cu arhitectura von-Newmann sunt numite "microcontrolereCISC". Titlul CISC nseamna Complex Instruction Set Computer.

    Pentru ca PIC16F84 este un microcontroler RISC, aceasta nseamna caare un set redus de instructiuni, mai precis 35 de instructiuni (de ex.microcontrolerele INTEL si Motorola au peste 100 de instructiuni). Toate acesteinstructiuni sunt executate ntr-un ciclu cu exceptia instructiunilor jump si

    branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la rezultatede 2:1 n compresia cod si 4:1 n viteza n comparatie cu alte microcontrolere de8 biti din clasa sa.

    Aplicatii :PIC16F84 se potriveste perfect n multe folosinte, de la industriile auto si

    aplicatiile de control casnice la instrumentele industriale, senzori la distanta,mnere electrice de usi si dispozitivele de securitate. Este de asemenea ideal

    pentru cardurile smart ca si pentru aparatele alimentate de baterie din cauzaconsumului lui mic.

    Pic16F84, un microcontroller de 8 biti cu un set restrins de vre-o 34 deinstructiuni, cu arhitectura de tip RISC (una, maxim doua instructiuni pe tact )impreuna cu un programator si un compilator ( si un simulator ) devine o jucarie

    extrem de interesanta pentru un electronist obisnuit cu proiectarea CMOS sauTTL. Fiind de tip flash permite reprogramarea de un numar in(finit) de ori (pina

  • 8/10/2019 Microcontroler Pic

    14/49

    la un moment dat cind il alimentezi pe dos...), nu necesita scule de dezvoltareinafara unui protoboard de calitate si multa rabdare la elaborarea programului.Cu 13 pini disponibili pentru interfatare care pot fi in mod secvential intrari sauiesiri, din care una de tip open drain, 1K de spatiu program si 64 octeti deeeprom, 8 bit timer , 8 bit prescaler asignat la timer sau la watchdog, intreruperi

    si cu mai bine de 1000 de site-uri in care se prezinta programe pentru acestprocesor (de la roboti, muzicute, frecventmetre, capacimetre, compilatoare de Csau basic, la cum sa-ti faci propria cartela de telefon reinscriptibila...) este oscula care pe mine m-a entuziasmat ca in prima tinerete. Memoria EEPROMface mai usoara aplicarea microcontrolerelor la aparate unde se cerenmagazinarea permanenta a diferitor parametri (coduri pentru transmitatoare,viteza motorului, frecventele receptorului, etc.). Costul scazut , consumul scazut,mnuirea usoara si flexibilitatea fac PIC16F84 aplicabil chiar si n domenii undemicrocontrolerele nu au fost prevazute nainte (exemple:functii de timer,

    nlocuirea interfetei n sistemele mari, aplicatiile coprocesor, etc.)Programabilitatea sistemului acestui cip (mpreuna cu folosirea a doar doi pini ntransferul de date) face posibila flexibilitatea produsului, dupa ce asamblarea sitestarea au fost terminate. Aceasta capabilitate poate fi folosita pentru a crea

    productie pe linie de asamblare, de a nmagazina date de calibrare disponibiledoar dupa testarea finala, sau poate fi folosit pentru a mbunatati programele la

    produse finite.Ciclul de clock / instructiuneClock-ul sau ceasul este starter-ul principal al microcontrolerului, si este

    obtinut dintr-o componenta de memorie externa numita "oscilator". Daca ar fisa comparam un microcontroler cu un ceas de timp, "clock-ul" nostru ar fi unticait pe care l-am auzi de la ceasul de timp. n acest caz, oscilatorul ar putea ficomparat cu arcul ce este rasucit astfel ca ceasul de timp sa mearga. Deasemenea, forta folosita pentru a ntoarce ceasul poate fi comparata cu o sursaelectrica.

    Clock-ul de la oscilator intra ntr-un microcontroler prin pinul OSC1 undecircuitul intern al unui microcontroler divide clock-ul n 4 clock-uri egaleQ1,Q2,Q3 si Q4 ce nu se suprapun. Aceste 4 clock-uri constituie un ciclu de osingura instructiune (numit de asemenea ciclu masina) n timpul careia oinstructiune este executata.

    Executarea instructiunii ncepe prin apelarea unei instructiuni care esteurmatoarea n linie. Instructiunea este apelata din memoria program la fiecareQ1 si este scrisa n registrul de instructiuni la Q4. Decodarea si executareainstructiunii sunt facute ntre urmatoarele cicluri Q1 si Q4. n urmatoareadiagrama putem vedea relatia dintre ciclul instructiunii si clock-ul oscilatorului(OSC1) ca si aceea a clock-urilor interne Q1-Q4. Contorul de program(PC)retine informatia despre adresa urmatoarei instructiuni.

  • 8/10/2019 Microcontroler Pic

    15/49

    PipeliningCiclul de instructiuni consta din ciclurile Q1, Q2, Q3 si Q4. Ciclurile de

    instructiuni de apelare si executare sunt conectate ntr-un asa fel nct pentru aface o apelare, este necesar un ciclu cu o instructiune, si este nevoie de nca una

    pentru decodare si executare. Totusi, datorita pipeline-ului sau liniei directe,fiecare instructiune este efectiv executata ntr-un singur ciclu. Daca instructiuneacauzeaza o schimbare n contorul programului, si PC-ul nu directioneaza spreurmatoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau deapelare), 2 cicluri sunt necesare pentru executarea unei instructiuni. Aceasta este

    pentru ca instructiunea trebuie procesata din nou, dar de data aceasta din parteaadresei corecte. Ciclul ncepe cu clock-ul Q1, prin scrierea ntr-un registru (IR).Decodarea si executarea ncepe cu clock-urile Q2, Q3 si Q4.

    TYCOciteste instructiunea MOVLW 55h (nu are importanta pentru noi ceinstructiune a fost executata, ce explica de ce nu este un dreptunghi n partea de

    jos).TCYIexecuta instructiunea MOVLW 55h si citeste MOVWF PORTB.TCY2executa MOVWF PORT si citeste CALL SUB_1.TCY3executa o apelare a unui subprogram CALL SUB_1, si citesteinstructiunea BSF PORTA, BIT3.Pentru ca instructiunea aceasta nu este aceeade care avem nevoie, sau nu este prima instructiune a unui subprogram SUB_1 acarui executie este urmatoarea n ordine, instructiunea trebuie citita dinnou. Acesta este un bun exemplu a unei instructiuni avnd nevoie de mai mult

  • 8/10/2019 Microcontroler Pic

    16/49

    de un ciclu.TCY4 ciclul instructiunii este total folosit pentru citirea primei instructiunidintr-un subprogram la adresa SUB_1.TCY5executa prima instructiune dintr-un subprogram SUB_1 si citesteurmatoarea.

    Semnificatia pinilorPIC16F84are un numar total de 18 pini. Cel mai adesea se gaseste ntr-o

    capsula de tip DIP18 dar se poate gasi de asemenea si ntr-o capsula SMDcare este mai mica ca cea DIP. DIP este prescurtarea de la Dual In Package.SMD este prescurtarea de la Surface Mount Devices sugernd ca gaurile pentru

    pini unde sa intre acestia , nu sunt necesare n lipirea acestui tip de componenta.

    Pinii microcontrolerului PIC16F84 au urmatoarea semnificatie:Pin nr.1RA1 Al doilea pin la portul A. Nu are functie aditionala.Pin nr.2RA2 Al treilea pin la portul A. Nu are functi aditionala.

    Pin nr.3RA3 Al patrulea pin la portul A. TOCK1 care functioneaza ca timer segaseste de asemenea la acest pinPin nr.4MCLR Reseteaza intrarea si tensiunea de programare Vpp amicrocontrolerului.Pin nr.5VSS Alimentare, masa.Pin nr.6RBO Pin de zero la portul B. Intrarea ntrerupta este o functieaditionala.Pin nr.7 RB1 Primul pin la portul B. Nu are functie aditionala.Pin nr.8 RB2 Al doilea pin la portul B. Nu are functie aditionala.

    Pin nr.9RB3 Al treilea pin la portul B. Nu are functie aditionala.Pin nr.10RB4 Al patrulea pin la portul B.Nu are functie aditionala.Pin nr.11RB5 Al cincilea pin la portul B. Nu are functie aditionala.Pin nr.12RB6 Al saselea pin la portul B. Linia de 'Clock' n mod programare.Pin nr.13RB7 Al saptelea pin la portul B. Linia 'Data' n mod programare.Pin nr.14Vdd Polul pozitiv al sursei.Pin nr.15OSC2 Pin desemnat pentru conectarea la un oscilatorPin nr.16OSC1 Pin desemnat pentru conectarea la un oscilatorPin nr.17RA2 Al doilea pin la portul A. Nu are functie aditionala.

    Pin nr.18RA1 Primul pin la portul A. Nu are functie aditionala.

  • 8/10/2019 Microcontroler Pic

    17/49

    Blocurile de baza din pic 16f84

    Generator-oscilator de ceasCircuitul oscilator este folosit pentru a da microcontrolerului un ceas.

    Ceasul este necesar pentru ca microcontrolerul sa execute programul sau

    instructiunile din program.

    Tipuri de oscilatoare

    PIC16F84 poate lucra cu patru configuratii diferite de oscilator. Pentruca configuratiile cu oscilator cu cristal si rezistor-condensator (RC) suntcele utilizate cel mai frecvent, doar pe ele le vom mentiona aici. Tipul demicrocontroler cu oscilator cu cristal este desemnat ca XT, iarmicrocontrolerul cu perechea rezistor-condensator are desemnarea RC.

    Aceasta este important pentru ca trebuie sa numiti tipul de oscilator cndcumparati un microcontroler.

    Oscilatorul XT

    Oscilatorul cu cristal se afla intr-ocarcasa metalica cu doi pini pe careeste nscrisa frecventa la carecristalul oscileaza. Mai este necesar

    cte un condensator ceramic de30pF cu celalalt capat la masa de a ficonectati la fiecare pin.

    Oscilatorul si condensatorii pot fincapsulati mpreuna ntr-o carcasacu trei pini. Un asemenea element senumeste rezonator ceramic si estereprezentat n scheme ca cel de maios. Pinii centrali ai elementului sunt

    masa, iar pinii terminali suntconectati la pinii OSC1 si OSC2 aimicrocontrolerului. Cnd se

    proiecteaza un aparat, regula este saplasati oscilatorul ct mai aproapede microcontroler, pentru a eliminaorice interferenta pe liniile pe caremicrocontrolerul primeste tactul deceas.

    Oscilatorul RC

    n aplicatiile unde nu este nevoie de o mare precizie de timp, oscilatorul

  • 8/10/2019 Microcontroler Pic

    18/49

    RC permite economii aditionale la cumparare. Fecventa de rezonanta aoscilatorului RC depinde de valoarea tensiunii de alimentare, rezistorul R,condensatorul C si temperatura de lucru. Trebuie de mentionat ca frecventa derezonanta este de asemenea influentata de variatiile normale ale parametrilor de

    proces, de toleranta externa a componentelor R si C, etc.

    Diagrama de mai sus arata cum este conectat oscilatorul RC la PIC16F84.La valoarea rezistorului mai mica 2.2k, oscilatorul poate deveni instabil, sauoscilatia se poate chiar opri. La valori mari a lui R (ex.1M) oscilatorul devinefoarte sensibil la zgomot si umezeala. Se recomanda ca valoarea rezistorului Rsa fie ntre 3 si 100k. Chiar daca oscilatorul va lucra fara un condensator extern(C=0pF), trebuie totusi folosit un condensator de peste 20pF pentru zgomot sistabilitate. Indiferent de ce oscilator este folosit, pentru a obtine un ceas la caresa functioneze microcontrolerul, ceasul trebuie divizat la 4. Un ceas aloscilatorului divizat cu 4 se poate obtine la pinul OSC2/CLKOUT, si poate fifolosit pentru testarea sau sincronizarea altor circuite logice.

    Dupa alimentare, oscilatorul ncepe sa oscileze. Oscilatia la nceput are operioada si o amplitudine instabile, dar dupa un timp devin stabilizate.

  • 8/10/2019 Microcontroler Pic

    19/49

    Pentru a preveni ca un asemenea ceas inexact sa influenteze performantelemicrocontrolerului, trebuie sa tinem microcontrolerul n starea reset pe duratastabilizarii ceasului oscilatorului. Diagrama de mai sus arata o forma tipica desemnal pe care microcontrolerul o primeste de la oscilatorul cu cuart dupaalimentare

    ResetulEste folosit pentru a pune microcontrolerul ntr-o conditie 'cunoscuta'. Aceastanseamna practic ca microcontrolerul poate sa se comporte incorect n uneleconditii nedorite. Pentru a continua sa functioneze corect trebuie resetat,nsemnnd ca toti registrii vor fi pusi ntr-o stare de start. Resetul nu este folositnumai cnd microcontrolerul nu se comporta cum vrem noi, dar poate deasemenea sa fie folosit cnd se ncearca un montaj, ca o ntrerupere ntr-un

    program de executie sau cnd se pregateste un microcontroler de a citi un

    program.

    Microcontrolerul PIC16F84are cteva surse de reset:

    a) Reset la alimentare, POR (Power-On Reset)b) Reset n timpul lucrului obisnuit prin aducerea unui zero logic lapinul MCLR al microcontrolerului.c) Reset n timpul regimului SLEEPd) Reset la depasirea timerului watchdog (WDT)e) Reset n timpul depasirii WDT n timpul regimului SLEEP.

    Cele mai importante resurse de reset sunt a) si b). Prima are loc de fiecaredata cnd este alimentat microcontrolerul si serveste la aducerea toturorregistrilor la starea initiala a pozitiei de start. A doua este pentru a aduce un zerologic la pinul MCLR n timpul operatiei normale a microcontrolerului. Este desfolosita n dezvoltarea de programe.

    n timpul unui reset, locatiile de memorie RAM nu sunt resetate. Ele suntnecunoscute la alimentare si nu sunt schimbate la nici un reset. Spre deosebirede acestea, registrii SFR sunt resetati la o stare initiala a pozitiei de start. Unul

    din din cele mai importante efecte ale resetului este setarea unui contor deprogram (PC) la zero (0000h), ceea ce permite programului sa nceapa

  • 8/10/2019 Microcontroler Pic

    20/49

    executarea de la prima instructiune scrisa.

    Resetul la scaderea tensiunii de alimentare dincolo de limita

    permisibila (Brown-out Reset)

    Impulsul pentru resetare n timpul cresterii tensiunii este generat demicrocontrolerul nsusi cnd detecteaza o crestere n tensiunea Vdd (ntr-undomeniu de la 1.2V la 1.8V). Acest impuls dureaza 72 ms ceea ce este un timpsuficient pentru oscilator ca sa se stabilizeze. Aceste 72 ms sunt asigurate de untimer intern PWRT care are oscilatorul lui RC. Microcontrolerul este n modulreset ct timp PWRT este activ. Totusi, cnd montajul functioneaza, problemeapar cnd sursa nu scade la zero ci cnd scade mai jos de limita ce garanteaza

    functionarea corecta a microcontrolerului. Acesta este un caz real din practica,n special n mediile industriale unde perturbatiile si instabilitatile sursei dealimentare sunt ceva foarte curent. Pentru a rezolva aceasta problema trebuie sane asiguram ca microcontrolerul este ntr-o stare de reset de fiecare data cndtensiunea sursei scade sub limita admisa.

    Daca, conform cu specificatiile electrice, circuitul intern de resetare amicrocontrolerului nu poate satisface aceste cerinte, se pot folosi componenteelectronice speciale ce sunt capabile sa genereze semnalul de reset dorit. n afarade aceasta functie, ele pot functiona pentru supravegherea tensiunii dealimentare. Daca tensiunea scade mai jos de nivelul specifcat, un zero logic vaapare la pinul MCLR ce tine microcontrolerul n starea de reset pna cetensiunea nu este n limitele ce garanteaza functionarea corecta.

    Unitatea de Procesare Centrala

  • 8/10/2019 Microcontroler Pic

    21/49

    Unitatea de procesare centrala (CPU) este creierul microcontrolerului.Aceasta parte este responsabila cu gasirea si aducerea instructiunii corecte cetrebuie executata, cu decodarea acelei instructiuni, si n final cu executarea ei.

    Unitatea de procesare centrala conecteaza toate partile microcontroleruluintr-un ntreg. Desigur, functia ei cea mai importanta este sa decodezeinstructiunile de program. Cnd programatorul scrie un program, instructiunileau o forma clara ca MOVLW 0x20. Totusi, pentru ca microcontrolerul santeleaga aceasta, aceasta forma de 'scrisoare' a unei instructiuni trebuie tradusantr-o serie de zero-uri si unu-uri ce se numeste 'opcode'. Aceasta tranzitie de lao scrisoare la o forma binara este facuta de translatori ca translatorul assembler(cunoscut ca si assembler sau asamblor). Instructiunea astfel adusa din memoria

    programului trebuie sa fie decodata de unitatea de procesare centrala. Putemapoi selecta din tabela tuturor instructiunilor un set de actiuni ce executa osarcina desemnata definita de instructiune. Pentru ca instructiunile pot sa continan ele asignari ce cer diferite transferuri de date dintr-o memorie n alta, dinmemorie la porturi, sau alte calcule, CPU trebuie sa fie conectata cu toate partilemicrocontrolerului. Aceasta este posibil printr-un bus de date si un bus de

    adrese.

    Unitatea de Logica Aritmetica (ALU)

    Unitatea de logica aritmetica este responsabila de executarea operatiilor caadunarea, scaderea, mutarea (la stnga sau la dreapta ntr-un registru) si deoperatiile logice. Mutarea datelor ntr-un registru se mai numeste 'shifting'-transferare. PIC16F84 contine o unitate logica aritmetica de 8 biti si registri delucru de 8 biti.

  • 8/10/2019 Microcontroler Pic

    22/49

    n instructiunile cu doi operanzi, n mod obisnuit un operand este nregistrul de lucru (registrul W), iar celalalt este unul din registri sau o constanta.Prin operand ntelegem continutul asupra caruia se fac unele oparatii,iar un registru este oricare din registrii GPR sau SFR. GPR este o prescurtare dela 'General Purposes Registers'-Registri cu Scopuri Generale, iar SFR dela 'Special Function Registers'-Registri cu Functii Speciale. n instructiunilecu un operand, un operand este fie registrul W fie unul din registri. Pe lngaoperatiile aritmetice si logice, ALU controleaza bitii de stare (biti gasiti nregistrul STATUS).Efectuarea unor instructiuni afecteaza bitii de stare, de caredepinde rezultatul nsusi. Depinznd de ce instructiune este executata, ALU

    poate afecta valorile bitilor Carry (C), Digit Carry (DC), si Zero (Z) n registrulSTATUS.

  • 8/10/2019 Microcontroler Pic

    23/49

    Registru STATUS

    . Daca registrul STATUS este o destinatie pentru instructiunile ce afecteaza bitii Z,DC or C, atunci scrierea n acesti trei biti nu este posibila.

    bit 0C(Carry) TransferBit care este afectat de operatiile de adunare, scadere si transfer.1= transferul produs din bitul rezultat cel mai nalt0= transferul nu s-a produsBitul C este afectat de instructiunile ADDWF, ADDLW, SUBLW, SUBWF.

    bit 1DC(Digit Carry) DC TransferBit afectat de operatiile de adunare, scadere si transfer. Spre deosebire de bitul

    C, acest bit reprezinta transferul din al patrulea loc rezultat. Este setat de adunarecnd se ntmpla un transport de la bitul 3 la bitul 4, sau de scadere cnd sentmpla mprumut de la bitul 4 la bitul 3, sau de transfer n ambele directii.

  • 8/10/2019 Microcontroler Pic

    24/49

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

    bit 2Z(Zero bit) Indicarea unui rezultat zero.

    Acest bit este setat cnd rezultatul unei operatii aritmetice sau logice executateeste zero.1= rezultatul egaleaza zero0= rezultatul nu egaleaza zero

    bit 3PD(Power-down bit)Bit ce este setat cnd microcontrolerul este alimentat atunci cnd ncepe safunctioneze, dupa fiecare reset obisnuit si dupa executarea instructiuniiCLRWDT. Instructiunea SLEEP l reseteaza cnd microcontrolerul intra n

    regimul consum/uzaj redus. Setarea lui repetata este posibila prin reset sau prinpornirea sau oprirea sursei. Starea poate fi triggerata de asemenea de un semnalla pinul RB0/INT, schimbare la portul RB, terminarea scrierii datelor interne laEEPROM, si printr-un watchdog de asemenea.1= dupa ce sursa a fost pornita0= executarea instructiunii SLEEP

    bit 4TOTime-out ; depasirea watchdog-ului.Bitul este setat dupa pornirea sursei si executarea instructiunilor CLRWDT siSLEEP. Bitul este resetatcnd watchdog-ul ajunge la sfrsit semnalnd ca cevanu este n ordine.1= depasirea nu s-a produs0= depasirea s-a produs

    bit5,6RP1:RP0(Biti de Selectare a Bancului de Registri)Acesti doi biti sunt partea superioara a adresei la adresarea directa. Pentru cainstructiunile ce adreseaza memoria direct au doar sapte biti, ei au nevoie doarde nca un bit pentru a adresa cei 256 bytes adica cti are PIC16F84. Bitul RP1nu este folosit, dar este lasat pentru expansiuni viitoare ale acestuimicrocntroler.01= primul banc00= bancul zero

    bit 7IRP(Bit de Selectare a Bancului de Registri)Bit al carui rol este de a fi al optulea bit la adresarea indirecta a RAM-uluiintern.1= bancul 2 si 30= bancul 0 si 1 (de la 00h la FFh)

    Registrul STATUS contine starea aritmetica ALU (C, DC, Z), starea

  • 8/10/2019 Microcontroler Pic

    25/49

    RESET (TO, PD) si bitii pentru selectarea bancului de memorie (IRP, RP1,RP0). Considernd ca selectia bancului de memorie este controlata prin acestregistru, el trebuie sa fie prezent n fiecare banc. Bancul de memorie se vadiscuta mai n detaliu n capitolul Organizarea memoriei. Registrul STATUS

    poate fi o destinatie pentru orice instructiune, cu oricare alt registru

    RegistrulOPTION

    bit 0..2PS0, PS1, PS2(Bit Selectie Rata Prescaler)Acesti trei biti definesc bitul de selectie a ratei prescalerului. Ce este un

    prescaler si cum pot afecta acesti biti functionarea unui microcontroler va fiexplicat n sectiunea depre TMRO.

    bit 3PSA(Bit de Asignare Prescaler)Bit ce asigneaza prescalerul ntre TMRO si watchdog.1= prescalerul este signat watchdogului0= prescalerul este asignat unui timer free-run (functioneaza-liber) TMRO

    bit 4T0SE(Bit Selectie a Frontului Sursei TMR0)Daca este permis de a se triggera TMRO prin impulsurile de la pinulRA4/T0CKI, acest bit determina daca aceasta va fi la descresterea sau lacresterea frontului unui semnal.1= front crescator0= front descrescator

    bit 5TOCS(Bit Selectie Sursa Ceas TMR0)Acest pin permite timerului free-run sa incrementeze starea lui fie de la

    oscilatorul intern la fiecare a ceasului oscilatorului, fie prin impulsuri externela pinul RA4/T0CKI.1= impulsuri externe

  • 8/10/2019 Microcontroler Pic

    26/49

    0= ceas intern 1/4

    bit 6INTEDG(Bit de Selectie a Frontului)Daca ntreruperea este activata este posibil ca acest bit sa determine frontul lacare o ntrerupere va fi activata la pinul RB0/INT.

    1= front crescator0= front descrescator

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

    Porturi

    Portul se refera la un grup de pini ai unui microcontroler ce pot fiaccesati simultan, sau la care putem seta combinatia dorita de zero-uri si unu-uri,sau de unde putem citi o stare existenta. Fizic, portul este un registru ninteriorul unui microcontroler ce este conectat cu fire la pinii microcontrolerului.Porturile reprezinta conexiunea fizica a unitatii de Procesare Centrala cu lumeaexterioara. Microcontrolerul le foloseste pentru a monitoriza sau controla altecomponente sau aparate. Datorita functionalitatii, unii pini au rol dublu

    ca PA4/TOCKI de exemplu, care este simultan al patrulea bit la portul A si ointrare externa pentru contorul free-run. Selectia uneia din aceste doua functiiale pinului se face n unul din registrii configurationali. O ilustratie a acesteiaeste al cincilea bit T0CS n registrul OPTION. Selectnd una din functiicealalta este dezactivata.

  • 8/10/2019 Microcontroler Pic

    27/49

    Toti pinii portului pot fi definti ca intrare sau iesire, conform cu nevoileunui montaj ce este n dezvoltare. Pentru a defini un pin ca pin de intrare sau ca

    pin de iesire, trebuie scrisa combinatia corecta de zero-uri si unu-uri n registrulTRIS. Daca n locul potrivit este scris "1" logic n registrul TRIS, acel pin este

    pin de intrare, iar daca este valabil contrariul, este un pin de iesire. Fiecare portare registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iar portul B areTRISB la adresa 86h.

    PORT B

    PORTB are 8 pini legati la el. Registrul adecvat pentru directia dateloreste TRISB la adresa 86h. Setarea unui bit n registrul TRISB defineste pinul

    portului corespunzator ca pin de intrare, si stergerea unui bit n registrul TRISB,defineste pinul portului corespunzator ca pin de iesire. Fiecare pin la PORTB areun rezistor slab intern pull-up (tragere) (rezistor care defineste o linie la unulogic) care poate fi activat prin resetarea celui de-al saptelea bit RBPU n

    registrul OPTION. Acesti registri 'pull-up' se nchid automat cnd pinul portuluieste configurat ca o iesire. Cnd porneste microcontrolerul, 'pull-up'-urile suntdezactivate.

    Patru pini ai portului PORTB, RB7:RB4 pot cauza o ntrerupere care sentmpla cnd starea lor se schimba de la unu logic la zero logic si invers.

    Numai pinii configurati ca intrare pot cauza aceasta ntrerupere sa se ntmple(daca fiecare pin RB7:RB4 este configurat ca o iesire, nu va fi generata ontrerupere la schimbarea starii). Aceasta optiune de ntrerupere cu rezistorii

    pull-up fac mai usoara rezolvarea problemelor din practica ca de exemplu otastatura matriciala. Daca rndurile tastaturii sunt conectate la acesti pini, fiecareapasare a unei clape va cauza o ntrerupere. Un microcontroler va determina care

  • 8/10/2019 Microcontroler Pic

    28/49

    clapa este apasata n timp ce se proceseaza o ntrerupere. Nu se recomanda saapelati la portul B n timp ce se proceseaza ntreruperea.

    Exemplul de mai sus arata cum pinii 0, 1, 2, si 3 sunt declarati ca intrare, si pinii4, 5, 6 si 7 ca iesire.

    PORTA

    PORTA are 5 pini legati la el. Registrul corespunzator pentru directiadatelor este TRISA la adresa 85h. Ca si la portul B, setarea unui bit n registrulTRISA defineste de asemenea pinul portului corespunzator ca un pin de intrare,si stergerea unui bit n registrul TRISA defineste pinul portului corespuzator cao iesire.Al cincilea pin al portului A are functie duala. La acel pin se afla de asemenea ointrare externa pentru timerul TMRO. Una din aceste doua optiuni este aleasa

    prin setarea sau resetarea bitului TOCS (TMR0 Clock Source Select bit-bit deSelectie a Sursei Ceasului TMRO). Acest pin permite timerului TMRO sa-sicreasca starea fie de la oscilatorul intern fie prin impulsuri externe la pinul

    RA4/T0CKI.

    Exemplul arata cum pinii 0, 1, 2, 3, si 4 sunt declarati ca intrare iar 5, 6 si 7 capini de iesire

    2.5 Organizatia memoriei

    PIC16F84 are doua blocuri separate de memorie, unul pentru date si celalaltpentru programe. Memoria EEPROM si registrii GPR n memoria RAMconstituie un bloc, si memoria FLASH constituie un bloc de programe.

    Memoria program

    Memoria program a fost realizata n tehnologia FLASH ceea ce faceposibil de a programa un microcontroler de mai multe ori nainte de a fi instalat

  • 8/10/2019 Microcontroler Pic

    29/49

    ntr-un montaj, si chiar dupa instalarea sa daca se ntmpla unele schimbari nprogram sau parametri de proces. Marimea memoriei program este de 1024locatii cu latime de 14 biti unde locatiile zero si patru sunt rezervate pentru resetsi pentru vectorul ntrerupere.

    Memoria de date

    Memoria de date consta din memoriile EEPROM si RAM. MemoriaEEPROM consta din 64 de locatii de opt biti a caror continut nu este pierdut ntimpul opririi sursei de alimentare. EEPROM-ul ne este direct adresabil, dar esteaccesat indirect prin registrii EEADR si EEDATA. Pentru ca memoriaEEPROM este folosita curent la nmagazinarea unor parametri importanti (deexemplu, o temperatura data n regulatoarele de temperatura), exista o procedurastricta de scriere n EEPROM ce trebuie urmata pentru a preveni scriereaaccidentala. Memoria RAM pentru date ocupa un spatiu ntr-o harta a memoriei

    de la locatia 0x00 la 0x4F ceea ce nseamna 68 de locatii. Locatiile memorieiRAM sunt de asemenea denumite registri GPR care este o abreviere GeneralPurpose Registers-Registri cu Scop General. Registrii GPR pot fi accesatiindiferent de ce banc este selectat la un moment.

    Registri SFR

    Registri ce ocupa primele 12 locatii n bancurile 0 si 1 sunt ai functieispecializate asignata cu unele blocuri ale microcontrolerului. Acestia sunt numitiSpecial Function Registers-Registri ai Functiei Speciale.

  • 8/10/2019 Microcontroler Pic

    30/49

    Bancuri de Memorie

    nafara de aceasta diviziune n 'lungime' a registrilor SFR si GPR, hartamemoriei este de asemenea mpartita n 'latime' (vezi harta precedenta) n douazone numite 'bancuri. Selectarea unuia din bancuri se face de bitii RPO si RP1 nregistrul STATUS-stare.

    Exemplu:

    bcf STATUS, RP0Instructiunea BCF sterge bitul RPO (RP0=0) n registrul STATUS si astfel

  • 8/10/2019 Microcontroler Pic

    31/49

    seteaza bancul 0.

    bsf STATUS, RP0

    Instructiunea BSF seteaza bitul RPO (RP0=1) n registrul STATUS si astfel

    seteaza bancul1.

    Uzual, grupurile de instructiuni care sunt adesea n uz, sunt conectate ntr-osingura unitate ce poate fi usor apelata ntr-un program, si a carei nume are osemnificatie clara, asa-numitul Macros. Cu ajutorul lor, selectia dintre doua

    bancuri devine mai clara si programul mult mai elegibil.

    BANK0 macroBcf STATUS, RP0 ;Select memory

    bank 0Endm

    BANK1 macroBsf STATUS, RP0 ;Select memory

    bank 1

    Contorul de Program

    Contorul de program (PC) este un registru de 13 biti ce contine adresainstructiunii ce se executa. Prin incrementarea sau schimbarea sa (ex. n caz desalturi) microcontrolerul executa instructiunile de program pas-cu-pas.

    Stiva

    PIC16F84 are o stiva de 13 biti cu 8 nivele, sau cu alte cuvinte, un grup de 8locatii de memorie de 13 biti latime cu functii speciale. Rolul sau de baza este de

    a pastra valoarea contorului de program dupa un salt din programul principal lao adresa a unui subprogram. Pentru ca un program sa stie cum sa se ntoarca la

    punctul de unde a pornit, trebuie sa napoieze valoarea contorului programuluidin stiva. Cnd se muta dintr-un program ntr-un subprogram, contorul

    programului este mpins n stiva (un exemplu de acesta este instructiuneaCALL). Cnd se executa instructiuni ca RETURN, RETLW sau RETFIE ce aufost executate la sfrsitul unui subprogram, contorul programului a fost luatdintr-o stiva asa ca programul sa poata continua de unde a fost oprit nainte de afi ntrerupt. Aceste operatii de plasare ntr-o si luaredintr-o stiva de contor de

    program sunt numite PUSH si POP, si sunt numite conform cu instructiunilesimilare ale unor microcontrolere mai mari.

  • 8/10/2019 Microcontroler Pic

    32/49

    Programarea n Sistem

    Pentrtu a programa o memorie de program, microcontrolerul trebuie sa fie setatpentru un mod de lucru special prin aducerea lui pinului MCLR la 13.5V, iarsursa de tensiune Vdd trebuie sa fie stabilizata ntre 4.5V si 5.5V. Memoria

    program poate fi programata serial folosind doi pini 'data/clock' ce trebuie sa fiemai nti separati de liniile montajului, asa ca sa nu apara erori n timpul

    programarii.

    Moduri de adresare

    Locatiile de memorie RAM pot fi accesate direct sau indirect.

    Direct Addressing

    Adresarea Directa se face printr-o adresa de 9 biti. Aceasta adresa este obtinutaprin conectarea celui de-al saptelea bit a adresei directe a unei instructiuni cu doibiti (RP1, RP0) din registrul STATUS dupa cum se arata n figura urmatoarea.Orice acces la registrii SFR pot fi un exemplu de adresare directa.

    Bsf STATUS, RP0 ;Banklmovlw 0xFF ;w=0xFFmovwf TRISA ;address of TRISA register is taken from

    ;instruction movwf

    Adresarea Directa

  • 8/10/2019 Microcontroler Pic

    33/49

    Adresarea Indirecta

    Adresarea indirecta spre deosebire de cea directa nu ia o adresa dintr-oinstructiune ci o creeaza cu ajutorul bitului IRP a registrilor STATUS siFSR. Locatia adresata este accesata prin registrul INDF care de fapt tine o

    adresa indicata de un FSR. Cu alte cuvinte, orice instructiune care folosesteINDF ca registrul ei n realitate acceseaza datele indicate de un registru FSR. Saspunem, de exemplu, ca un registru cu scop general (GPR) la adresa 0Fh contineo valoarea 20. Prin scrierea unei valori 0Fh n registrul FSR vom obtine unregistru indicator la adresa 0Fh, iar prin citirea din registrul INDF, vom obtinevaloarea 20, ceea ce nseamna ca am citit din primul registru valoarea lui faraaccesarea lui directa (dar prin FSR si INDF). Se pare ca acest tip de adresare nuare nici un avantaj fata de adresarea directa, dar exista unele nevoi timpul

    programarii ce se pot rezolva mai simplu doar prin adresarea indirecta.

    Un asemenea exemplu poate trimite un set de date prin comunicatia seriala,lucrnd cu bufere si indicatoare (ce vor fi discutate n continuare ntr-un capitolcu exemple), sau sa stearga o parte a memoriei RAM (16 locatii) ca n urmatorulexemplu.

  • 8/10/2019 Microcontroler Pic

    34/49

    Citind datele din registrul INDF cnd continutul registrului FSR este egal cuzero ntoarce valoarea zero, si scrie n el rezultatul n operatia NOP (nooperation-fara operatie).

    Intreruperi

    ntreruperele sunt un mecanism a unui microcontroler ce i permit sa raspunda la

    unele evenimente la momentul cnd se ntmpla, indiferent de ce face atuncimicrocontrolerul. Aceasta este o parte foarte importanta, pentru ca permiteconexiunea microcontrolerului cu lumea de afara. n general, fiecare ntrerupereschimba debitul programului, l ntrerupe si dupa executarea unui subprogram(rutine de ntrerupere) continua din acelasi punct.

    Registrul de control a unei ntreruperi se numeste INTCON si se gaseste laadresa 0Bh. Rolul lui este de a permite sau interzice cererile de ntreruperi, si n

    caz ca nu sunt permise, nregistreaza cererile de ntrerupere singulare prin bitiilui.

  • 8/10/2019 Microcontroler Pic

    35/49

    Registru INTCON

    bit 0RBIF(RB Port Change Interrupt Flag bit-bit Stegulet de ntrerupere aSchimbarii Portului RB) Bit ce informeaza despre schimbarile de la pinii 4, 5, 6si 7 ai portului B.1=cel putin un pin si-a schimbat starea

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

    bit 1INTF(INT External Interrupt Flag bit-bit Stegulet de ntrerupere ExternaINT) A avut loc o ntrerupere externa.1=a avut loc o ntrerupere0=nu a avut loc o ntrerupereDaca s-a detectat un front crescator sau descrescator la pinul RB0/INT, (ce estedefinit cu bitul INTEDG n registrul OPTION), bitul INTF este setat. Bitultrebuie sa fie sters n subprogramul ntrerupere pentru a detecta urmatoarea

    ntrerupere.bit 2T0IF(TMR0 Overflow Interrupt Flag bit-bit Stegulet Depasire ntrerupereTMRO) Depasirea contorului TMRO.1=contorul si-a schimbat starea de la FFh la 00h.0=depasirea nu a avut locBitul trebuie sa fie sters n program pentru ca o ntrerupere sa fie detectata.

    bit 3RBIE(RB port change Interrupt Enable bit-bit Permite ntrerupereaschimbarii portului RB) Permite sa aiba loc ntreruperi la schimbarea starii

    pinilor 4, 5, 6, si 7 ai portului B.1=permite ntreruperi la schimbarea starii0=ntreruperi interzise la schimbarea stariiDaca RBIE si RBIF au fost simultan setate, va avea loc o ntrerupere.

    bit 4INTE(INT External Interrupt Enable bit-bit Permite ntrerupere externaINT) Bit ce permite ntreruperea externa de la pinul RB0/INT.1=ntrerupere externa permisa0=ntrerupere externa interzisa

    Daca INTE si INTF au fost setate simultan, va avea loc o ntrerupere.

  • 8/10/2019 Microcontroler Pic

    36/49

    bit 5T0IE(TMR0 Overflow Interrupt Enable bit-bit Permite Depasirentrerupere TMRO) Bit ce permite ntreruperile n timpul depasirii contoruluiTMRO.1=ntrerupere permisa0=ntrerupere interzisa

    Daca T0IE si T0IF au fost simultan setate, va avea loc ntreruperea.

    Bit 6EEIE(EEPROM Write Complete Interrupt Enable bit-bit Permitentrerupere Completa a Scrierii EEPROM) Bit ce permite o ntrerupere lasfrsitul unei rutine de scriere n EEPROM1= ntrerupere permisa0= ntrerupere interzisaDaca EEIE si EEIF (ce este n registrul EECON1) au fost simulatan setate, vaavea loc o ntrerupere.

    Bit 7GIE(Global Interrupt Enable bit-bit Permite ntrerupere Globala) Bit cepermite sau interzice toate ntreruperile.1=toate ntreruperile sunt permise0=toate ntreruperile sunt interzise

    PIC16F84are patru surse de ntrerupere:

    1. Terminarea scrierii datelor n EEPROM2. ntrerupere TMR0 cauzata de depasirea timerului3. ntrerupere n timpul schimbarii la pinii RB4, RB5, RB6 si RB7 ai portului B.4. ntrerupere Externa de la pinul RB0/INT al microcontrolerului

    n general, fiecare sursa de ntrerupere are doi biti legati la ea. Unul permitentreruperea, iar celalalt detecteaza cnd au loc ntreruperi. Exista un bit comunnumit GIE ce poate fi folosit pentru a interzice sau permite toate ntreruperilesimultan. Acest bit este foarte folositor cnd se scrie un program pentru ca

    permite ca toate ntreruperile sa fie interzise pentru o perioada de timp, asa caexecutia unei parti importante a programului sa nu fie ntrerupta. Cndinstructiunea ce reseteaza bitul GIE a fost executata (GIE=0, toate ntreruperileinterzise), fiecare ntrerupere ce ramne nerezolvata trebuie ignorata.ntreruperile ce ramn nerezolvate si ce au fost ignorate, sunt procesate cnd

    bitul GIE (GIE=1, toate ntreruperile sunt permise) va fi sters. Cnd i s-araspuns ntreruperii, bitul GIE a fost sters asa ca orice ntreruperi aditionale vorfi interzise, adresa de ntoarcere a fost trimisa n stiva iar adresa 0004h a fostscrisa n contorul programului - numai dupa aceasta ncepe raspunsul la ontrerupere! Dupa ce este procesata ntreruperea, bitul a carui setare a cauzat o

    ntrerupere trebuie sters, sau rutina de ntrerupere va fi procesata automat totmereu n timpul ntoarcerii la programul principal.

  • 8/10/2019 Microcontroler Pic

    37/49

    Pastrnd continutul registrilor importanti

    Doar valoarea de ntoarcere a contorului programului este nmagazinata ntr-ostiva n timpul unei ntreruperi (prin valoare de ntoarcere a contorului

    programului ntelegem adresa instructiunii ce trebuie executata, dar nu a fost

    executata pentru ca a avut loc ntreruperea). Pastrnd doar valoarea contoruluiprogramului adesea nu este suficient. Unii registri ce sunt n uz n programulprincipal pot fi de asemenea n uz n rutina de ntrerupere. Daca ei nu suntretinuti, programul principal va obtine valori complet diferite n acei registri ntimpul ntoarcerii dintr-o rutina de ntrerupere, ceea ce va cauza erori n

    program. Un exemplu de asemenea caz este continutul registrului de lucru W.Daca presupunem ca programul principal a folosit registrul de lucru W pentruunele din operatiile sale, si ca a pastrat n el o valoare ce este importanta pentruurmatoarea instructiune, atunci o ntrerupere ce se va ntmpla nainte de aceainstructiune va schimba valoarea registrului de lucru W ce va influenta direct

    programul principal.

    Procedura de nregistrare de registri importanti nainte de a merge la o rutina dentrerupere se numeste PUSH, n timp ce procedura ce aduce valorile nregistratenapoi, se numeste POP. PUSH si POP sunt instructiuni ale altormicrocontrolere (Intel), dar sunt att de larg acceptate ca o ntreaga operatie estenumita dupa ele. PIC16F84 nu are instructiuni ca PUSH si POP, si eletrebuie sa fie programate.

  • 8/10/2019 Microcontroler Pic

    38/49

    Datorita simplitatii si flosirii frecvente, aceste parti ale programului pot fi facuteca macro-uri. Conceptul unui Macro este explicat n "Limbaj de asamblare

    program". n urmatorul exemplu, continutul registrilor W si STATUS suntmemorati n variabilele W_TEMP si STATUS_TEMP nainte de rutina dentrerupere. La nceputul rutinei PUSH trebuie sa verificam bancul selectat n

    prezent pentru ca W_TEMP and STATUS_TEMP nu se gasesc n bancul 0.Pentru schimbul de date ntre acesti registri, instructiunea SWAPF se folosesten loc de MOVF pentru ca nu afecteaza starea bitilor de stare STATUS.

    Exemplul este un program asamblor pentru urmatorii pasi :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. Restaureaza registrul STATUS6. Restaureaza registrul W

    Daca mai sunt si alte variabile sau registri ce trebuie stocati, ele trebuie atunci safie pastrati dupa stocarea registrului STATUS (pasul 3), si adusi napoi nainteca registrul STATUS sa fie restaurat (pasul 5).

  • 8/10/2019 Microcontroler Pic

    39/49

    Acelasi exemplu se poate realiza utiliznd macro-uri, facnd astfel progamulmai eligibil. Maco-urile ce sunt deja definite pot fi folosite pentru scrierea de noimacro-uri. Macro-urile BANK1 si BANK0 ce sunt explicate n capitolul"Organizarea memoriei" sunt folosite cu macro-urile 'push' si 'pop'.

    ntrerupere externa la pinul RB0/INT al microcontrolerului

    ntreruperea externa la pinul RB0/INT este triggerata de frontul crescator (dacabitul INTEDG=1 n registrul OPTION), sau de frontul descrescator (daca

    INTEDG=0). Cnd apare semnalul corect la pinul INT, bitul INTF este setat laregistrul INTCON. Bitul INTF (INTCON) trebuie resetat n rutina dentrerupere, asa ca ntreruperea sa nu aiba loc din nou n timpul ntoarcerii la

    programul principal. Acesta este un pas important al programului pe careprogramatorul nu trebuie sa-l uite, sau programul va merge constant n rutina dentrerupere. ntreruperea poate fi nchisa prin resetarea bitului de control INTE(INTCON).

    Intreruperea n timpul depasirii contorului TMRO

    Depasirea contorului TMRO (de la FFh la 00h) va seta bitul T0IF(INTCON). Aceasta este o ntrerupere foarte importanta pentru ca multeprobleme reale se por rezolva folosind aceasta ntrerupere. Unul din exempleeste masurarea timpului. Daca stim ct timp are nevoie contorul pentru acompleta un ciclu de la 00h to FFh, atunci numarul de ntreruperi nmultit cuacea durata de timp va da timpul total scurs. n rutina de ntrerupere unelevariabile vor fi incrementate n memoria RAM, valoarea acelei variabilenmultite cu timpul de care are nevoie contorul pentru a contoriza ntr-un cicluntreg, va da timpul total scurs. ntreruperea poate fi pornita/oprita prin

    setarea/resetarea bitului T0IE (INTCON).ntrerupere pe timpul unei schimbari la pinii 4, 5, 6 si 7 ai portului B

  • 8/10/2019 Microcontroler Pic

    40/49

    Schimbarea semnalului de intrare la PORTB seteaza bitul RBIF(INTCON). Patru pini RB7, RB6, RB5 si RB4 ai portului B, pot triggera ontrerupere ce are loc cnd starea la ei se schimba de la unu la zero logic, sauviceversa. Pentru ca pinii sa fie sensibili la aceasta schimbare, trebuie definiti caintrare. Daca oricare din ei este definit ca iesire, ntreruperea nu va fi generata la

    schimbarea starii. Daca ei sunt definiti ca intrare, starea lor curenta estecomparata cu vechea valoare ce a fost stocata la ultima citire de la portul B.ntreruperea poate fi pornita/oprita prin setarea/resetarea bitului RBIE nregistrul INTCON.

    ntreruperea la terminarea subrutinei write n EEPROM

    Aceasta ntrerupere este doar de natura practica. Petru ca scrierea ntr-o locatieEEPROM dureaza cam 10ms (care este o durata lunga n termeniimicrocontrolerului), nu este rentabil de a astepta pna la capat scrierea. Astfel

    mecanismul de ntrerupere este adaugat ceea ce permite microcontrolerului sacontinue executarea programului principal, n timp ce scrierea n EEPROM estefacuta n plan secundar. Cnd scrierea este terminata, ntreruperea informeazamicrocontrolerul ca scrierea s-a terminat. Bitul EEIF, prin care se face aceastainformare, se gaseste n registrul EECON1. Producerea unei ntreruperi poate fiinterzisa prin resetarea bitului EEIE n registrul INTCON.

    Initializarea ntreruperii

    Pentru a folosi un mecanism de ntrerupere a unui microcontroler, trebuie facuteunele sarcini pregatitoare. Aceste proceduri sunt pe scurt numite "initializare".Prin initializare definim la ce va raspunde microcontrolerul, si ce va ignora.Daca nu setam bitul ce permite o anumita ntrerupere, programul nu va executaun subprogram ntrerupere. Prin aceasta putem obtine controlul asupra

    producerii ntreruperii, ceeace este foarte folositor.

    Exemplul de mai sus arata initializarea unei ntreruperi externe la pinul R80 amicrocontrolerului. Unde se vede un setata, nseamna ca ntreruperea este

    permisa. Producerea altor ntreruperi nu este permisa, si toate ntreruperilempreuna sunt interzise pna ce bitul GIE este tinut n unu.

    Urmatorul exemplu arata o cale tipica de a dirija ntreruperile. PIC16F84 are aredoar o locatie unde adresa unui subprogram ntrerupere este memorat. Aceastanseamna ca mai nti trebuie sa detectam ce ntrerupere este la ndemna (dacamai mult de o sursa de ntreruperi este disponibila), si apoi putem executa acea

    parte a programului ce se refera la acea ntrerupere.

  • 8/10/2019 Microcontroler Pic

    41/49

    2.7 Timer-ul liber

    Timerele-temporizatoarele sunt de obicei cele mai complicate parti ale unuimicrocontroler, asa ca este necesar sa rezervam mai mult timp pentru a leexplica. Odata cu aplicarea lor este posibil sa se creeze relatii ntre o dimensiune

    reala ca "timp" si o variabila ce reprezinta starea timer-ului ntr-unmicrocontroler. Fizic, timer-ul este un registru a carui valoare creste continuupna la 255, si apoi porneste de la capat: 0, 1, 2, 3, 4...255....0,1, 2, 3......etc.

  • 8/10/2019 Microcontroler Pic

    42/49

    Aceasta incrementare se face n planul secundar la tot ceea ce face unmicrocontroler. Depinde de programator "sa gaseasca o cale" de cum sa profitede aceasta caracteristica pentru nevoile lui. Una din cai este sa creasca ovariabila la fiecare depasire a timer-ului. Daca stim ct timp are nevoie timer-ulsa faca o runda completa, atunci nmultind valoarea variabilei cu acel timpobtinem timpul total scurs.

    PIC16F84 are un timer de 8 biti. Numarul de biti determina pna la ce valoare

    contorizeaza timer-ul ncepnd sa contorizeze de la zero din nou. n cazul unuitimer de 8 biti, acel numar este 256. O schema simplificata a relatiei dintre untimer si un prescaler-divizor este reprezentata n diagrama anterioara.Prescalerul este numele acelei parti din microcontroler ce divide ceasuloscilatorului nainte de a ajunge la logica ce creste starea timer-ului. Numarulce divide un ceas este definit prin trei biti n registrul OPTION. Cel mai maredivizor este 256. Aceasta nseamna de fapt ca doar la al fiecare 256-lea ceas,valoarea timer-ului va creste cu unu. Aceasta ne da posibilitatea de a masura

    perioade de timp mai lungi.

  • 8/10/2019 Microcontroler Pic

    43/49

    Dupa fiecare numaratoare pna la 255, timer-ul si reseteaza valoarea la zero sincepe cu un nou ciclu de contorizare pna la 255. n timpul fiecarei tranzitii de

    la 255 la zero, bitul TOIF n registrul INTCOM este setat. Daca se permitntreruperi, de aceasta se poate profita n generarea si n procesarea rutinei dentrerupere. Depinde de programator sa reseteze bitul TOIF n rutine dentrerupere, asa ca noua ntrerupere, sau noua depasire sa fie detectate. nafarade ceasul oscilator intern, starea timer-ului poate de asemenea sa creasca princeasul extern la pinul RA4/TOCKI. Alegerea uneia din aceste doua optiuni seface n registrul OPTION prin bitul TOCS. Daca a fost aleasa aceasta optiune deceas extern, va fi posibil sa se defineasca frontul unui semnal (crescator saudescrescator), la care timer-ul sa-si creasca valoarea.

  • 8/10/2019 Microcontroler Pic

    44/49

    n practica, unul din exemplele practice ce este rezolvat prin ceas extern si undetimer-ul contorizeaza rotatiile complete ale unui ax a unei masini de productie,ca bobinatorul de transformator de exemplu. Sa rotim patru suruburi de metal peaxul unui bobinator. Aceste patru suruburi vor reprezenta convexitatea metalica.Sa plasam acum un senzor inductiv la o distanta de 5 mm de capatul unui surub.

    Senzorul inductiv va genera semnalul cazator de fiecare data cnd capulsurubului este paralel cu capul senzorului. Fiecare semnal va reprezenta o

    patrime dintr-o rotatie, si suma tuturor rotatiilor se va gasi n timer-ul TMRO.Programul poate usor citi aceste date din timer printr-un bus de date.

    Urmatorul exemplu ilustreaza cum sa se initializeze timer-ul la fronturiledescrescatoare ale semnalului din sursa externa cu un prescaler 1:4. Timer-ullucreaza n mod "polig-mpingere".

    Acelasi exemplu poate fi realizat printr-o ntrerupere n modul urmator:

    Prescalerul poate fi asignat fie de timer-ul TMRO fie de

  • 8/10/2019 Microcontroler Pic

    45/49

    watchdog. Watchdogul este un mecanism pe care microcontrolerul l foloseste sase apere mpotriva blocarii programelor. Ca orice alt circuit electric, la fel si cumicrocontrolerul se pot ntmpla defectari, sau unele stricaciuni. Din nefericiremicrocontrolerul are de asemenea un program unde se pot ntmpla probleme.Cnd se ntmpla aceasta, microcontrolerul se va opri din functionare si va

    ramne n acea stare pna ce cineva l reseteaza. Din cauza aceasta, a fostintrodus mecanismul watchdog. Dupa o anumita perioada de timp, watchdogulreseteaza microcontrolerul (de fapt microcontrolerul se reseteaza singur).Watchdogul luceaza pe baza unui principiu simplu: dac[ se ntmpla depasireatimer-ului, microcontrolerul este resetat, si ncepe executarea programului mereudin nou. Astfel, se va ntmpla un reset att n cazul unei functionari corecte ctsi incorecte. Urmatorul pas este prevenirea resetului n cazul unei functionaricorecte, ce se face prin scrierea unui zero n registrul WDT (instructiuneaCLRWDT) de fiecare data cnd se apropie de depasire. Astfel programul va

    preveni un reset ct timp este executat corect. Dendata ce s-a blocat, nu se vascrie zero, va avea loc depasirea timer-ului WDT si un reset ce va ducemicrocontrolerul napoi la functionarea corecta din nou.

    Prescalerul este acordat cu timer-ul TMRO, sau cu timer-ul watchdogului prinbitul PSA n registrul OPTION. stergnd bitul PSA, prescalerul va fi acordat cutimer-ul TMRO. Cnd prescalerul este acordat cu timer-ul TMRO, toateinstructiunile de scriere n registrul TMRO (CLRF TMR0, MOVWF TMR0,BSF TMR0,...) vor sterge prescalerul. Cnd prescalerul este asignat unui timerwatchdog, numai instructiunea CLRWDT va sterge prescalerul si timer-ulwatchdog n acelasi timp. Schimbarea prescalerului este completa sub controlul

    programatorului, si poate fi schimbat n timp ce se ruleaza programul.

    Registrul control OPTION

    Bit 0..2PS0, PS1, PS2(Prescaler Rate Select bit-bit Selectare Rata Prescaler)Subiectul prescaler, si cum afecteaza acesti biti lucrul unui microcontroler va fiabordat n sectiunea despre TMRO.

  • 8/10/2019 Microcontroler Pic

    46/49

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

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

    Daca triggerul TMRO a fost activat cu impulsuri de la pinul RA4/T0CKI, acestbit va determina daca va fi la frontul crescator sau descrescator al semnalului.1=front descrescator0=front crescator

    bit 5T0CS(TMR0 Clock Source Select bit-bit Selectare Sursa Ceas TMRO)Acest pin permite unui timer free-run sa-si incrementeze valoarea fie de la

    oscilatorul intern, de exemplu din ceasul oscilatorului, sau prin impulsuriexterne la pinul RA4/T0CKI.1=impulsuri externe external impulses0=1/4 ceas intern

    bit 6INTEDG(Interrupt Edge Select bit-bit Selectare Front ntreruperi)Daca a fost permisa producerea de ntreruperi, acest bit va determina la ce frontva avea loc ntreruperea la pinul RB0/INT.1=front crescator0=front descrescator

    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' deschisi0=rezistorii 'pull-up' nchisi

    Memorie de date EEPROM

    PIC16F84 are 64 de bytes de locatii de memorie EEPROM la adresele de la 00h

    la 63h unde se poate scrie sau de unde se poate citi. Cea mai importantacaracteristica a acestei memorii este ca nu pierde continutul n timpul nchiderisursei de alimentare. Aceasta nseamna practic ca ceea ce a fost scris n ea varamne chiar si cnd microcontrolerul este nchis. Datele pot fi retinute nEEPROM fara sursa de alimentare pna la 40 de ani. (dupa cum declara

    producatorul lui PICD16F84), si se pot executa 10000 de cicluri de scriere.

    n practica, memoria EEPROM este folosita pentru stocarea unor dateimportante sau a unor parametri de proces.

    Un asemenea parametru este o temperatura data, asignata cnd se seteaza unregulator de temperatura la un proces. Daca nu s-a retinut, va fi nevoie sa seajusteze temperatura data dupa fiecare ntrerupere a alimentarii. Pentru ca

  • 8/10/2019 Microcontroler Pic

    47/49

    aceasta este foarte nepractic (chiar periculos), producatorii de microntrolere aunceput sa instaleze un tip mai mic de memorie EEPROM.

    Memoria EEPROM este plasata ntr-un loc special al memoriei si poate fiaccesata prin registri speciali.Acesti registri sunt:

    . EEDATAla adresa 08h, care retine datele de citit sau cele de scris.

    . EEADRla adresa 09h, ce contine o adresa a locatiei EEPROM ce esteaccesata..EECON1la adresa 88h, ce contine biti de control..EECON2la adresa 89h. Acest registru nu exista fizic si serveste la protejareaEEPROM-ului de scrieri accidentale.

    Registrul EECON1 la adresa 88h este un registru de control cu 5 biti

    implementati.Bitii 5, 6 si 7 nu sunt folositi, si prin citire sunt totdeauna zero. Interpretareabitilor registrului EECON1 urmeaza.

    RegistrulEECON1

    bit 0 RD(Read Control bit-bit Control Citire)Setarea acestui bit initializeaza transferul de date definit n EEADR la registrulEEDATA. Pentru ca timpul nu este esential n citirea datelor ca la scriere, dateledin EEDATA pot fi deja folosite n urmatoarea instructiune.1=initializeaza citirea0=nu initializeaza citirea

    bit 1WR(Write Control bit-bit Control Scriere)Setarea acestui bit initializeaza scrierea datelor din registrul EEDATA la adresaspecifcata prin registrul EEADR.1=initializeaza scrierea0=nu initializeaza scrierea

    bit 2WREN(EEPROM Write Enable bit-bit Permite Scrierea EEPROM)Permite scrierea n EEPROMDaca acest bit nu a fost setat, microcontrolerul nu va permite scrierea n

    EEPROM.1=scriere permisa

  • 8/10/2019 Microcontroler Pic

    48/49

    0=scriere interzisa

    bit 3WRERR(Write EEPROM Error Flag-Stegulet Eroare Scriere EEPROM )Eroare n timpul scrierii n EEPROMAcest bit a fost setat doar n caz ca scrierea n EEPROM a fost intrerupta de un

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

    bit 4EEIF(EEPROM Write Operation Interrupt Flag bit-bit Steguletntrerupere Operatie Scriere EEPROM) Bit folosit pentru a informa ca scriereadatelor s-a terminat.Cnd s-a terminat scrierea, acest bit va fi setat automat. Programtorul trebuie sastearga bitul EEIF n programul sau pentru a detecta noua terminare a scrierii.

    1=scrierea terminata0=scrierea nca neterminata, sau nca nu a nceput

    Citirea din memoria EEPROM

    Setarea bitului RD initializeaza transferul de date de la adresa gasita n EEADRla registrul EEDATA. Ca si la citirea datelor nu avem nevoie de att de multtimp ca la scriere, datele luate din registrul EEDATA pot deja fi folosite maideparte n urmatoarea instructiune.

    O mostra a partii programului ce citeste datele n EEPROM, ar putea arata camai jos:

    Dupa ultima instructiune de program, continutul de la o adresa EEPROM zeropoate fi gasit n registrul w.

    Scrierea n memoria EEPROM

    Pentru a scrie datele n locatia EEPROM, programatorul trebuie mainti sa scrie adresa n registrul EEADR si datele n registrul EEDATA. Numaiatunci este folositor de a seta bitul WR ce pune totul n miscare. Bitul WR va firesetat, si bitul EEIF setat urmnd o scriere ce poate fi folosita n procesareantreruperilor. Valorile 55h si AAh sunt prima si a doua cheie care interzic ca

    scrierea accidentala n EEPROM sa se ntmple. Aceste doua valori sunt scrisen EECON2 care serveste doar pentru acel scop, de a primi aceste doua valori si

  • 8/10/2019 Microcontroler Pic

    49/49

    de a preveni orice scriere accidentala n memoria EEPROM. Liniile de programmarcate ca 1, 2, 3 si 4 trebuie sa fie executate n acea ordine n intervale egale detimp. De aceea este foarte important, sa nchideti ntreruperile ce ar puteaschimba timpul necesar pentru executare instructiunilor. Dupa scriere,ntreruperile, pot fi permise din nou.

    Exemplu unei parti a programului ce scrie datele 0xEE n prima locatie nmemoria EEPROM ar putea arata ca mai jos: