TEHNIČKO VELEUČILIŠTE U ZAGREBU ELEKTROTEHNIČKI ODJEL
Mikrokontrolerski sustavi
Goran Malčić, dipl.ing. mr. sc. Velimir Rajković, dipl.ing.
SADRŽAJ
1
Uvod................................................................................................................ 5
2
Podjela računala ............................................................................................ 6 2.1
''Off line'' računala ............................................................................................... 6
2.2
''On line'' računala................................................................................................ 6
3
Osnovni sklopovski elementi za ''on line'' način rada .............................. 10 3.1
Senzori i izvršni organi.......................................................................................10
3.2
Analogna obrada signala ...................................................................................11
3.3
Multipleksori........................................................................................................11
3.4
Sample & Hold sklop (S&H)................................................................................12
3.5
Analogno digitalni pretvarač..............................................................................13
3.6
Digitalno analogni pretvarač ..............................................................................20
3.7
Međusklop (Interface) .........................................................................................21
3.8
Paritetni sklop .....................................................................................................24
3.9
Povezivanje računala sa procesima ..................................................................24
3.10
Računalo..............................................................................................................25
3.10.1 3.10.2 3.10.3 3.10.4 3.10.5 3.10.6 3.10.7 3.10.8 3.10.9 3.10.10 3.10.11 3.10.12
4
Mikroprocesor ...............................................................................................25 Mikrokontroler ...............................................................................................25 Arhitektura računala ......................................................................................27 Razlika između mikroprocesora i mikrokontrolera .........................................29 Memorijska jedinica.......................................................................................30 Adresno polje mikroračunala .........................................................................30 CPU (Central Processing Unit) ......................................................................31 Sabirnica .......................................................................................................32 U/I jedinica ....................................................................................................33 Serijska komunikacija....................................................................................33 Slobodni brojač .............................................................................................34 Sigurnosni brojač (Watchdog timer) ..............................................................34
Mikrokontroler PIC 16F84............................................................................ 35 4.1
Osnovne karakteristike mikrokontrolera PIC 16F84 .........................................35
4.1.1 4.1.2 4.1.3 4.1.4
Karakteristike mikrokontrolera .......................................................................35 Karakteristike ulazno/izlaznih sklopova .........................................................35 Specijalne karakteristike mikrokontrolera ......................................................35 Karakteristike CMOS Flash/EEPROM tehnologije.........................................36
4.2
Kratak opis mikrokontrolera ..............................................................................36
4.3
Raspored nožica .................................................................................................37 1
4.4
Generatori takta ..................................................................................................37
4.5
Takt / instrukcijski ciklus....................................................................................39
4.6
Obrada instrukcija ..............................................................................................39
4.7
Reset....................................................................................................................40
4.7.1 4.8
Ulazno / izlazni sklopovi .....................................................................................41
4.8.1 4.8.2 4.9
EECON1 registar ..........................................................................................49
Slobodni brojač TMR0 ........................................................................................49
4.12.1
5
INTCON registar ...........................................................................................47
Podatkovna EEPROM memorija ........................................................................48
4.11.1 4.12
Programski brojač (Program Counter) ...........................................................43 Stog (Stack) ..................................................................................................44 Status registar ...............................................................................................44 Direktno adresiranje ......................................................................................45 Indirektno adresiranje....................................................................................45 Relativno adresiranje.....................................................................................45
Prekidi (Interrupts)..............................................................................................46
4.10.1 4.11
PORTA i TRISA ............................................................................................41 PORTB i TRISB ............................................................................................41
Organizacija memorije........................................................................................42
4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.10
Reset kod pada napona napajanja (Reset on Brown-Out).............................40
OPTION registar ...........................................................................................50
Set instrukcija .............................................................................................. 52 5.1
Prijenos podataka ...............................................................................................52
5.2
Aritmetika i logika ...............................................................................................52
5.3
Bit operacije ........................................................................................................52
5.4
Upravljanje tokom programa..............................................................................52
5.5
Opis pojedinih instrukcija ..................................................................................54
6
Razvojni alati za PIC 16F84 ......................................................................... 69 6.1
Asembler .............................................................................................................69
6.1.1
7
Elementi programskog jezika asembler .........................................................69
MPLAB IDE v6.60 ......................................................................................... 71 7.1
MPLAB IDE ..........................................................................................................71
7.2
Zahtjevi sustava ..................................................................................................71
7.3
Izrada jednostavnog projekta.............................................................................71
7.3.1 7.3.2 7.3.3
Uvod .............................................................................................................71 Pisanje izvornog koda ...................................................................................71 Izrada projekta ..............................................................................................73 2
7.3.4 7.3.5 7.3.6
8
Izgradnja projekta..........................................................................................77 Pokretanje simulatora....................................................................................78 Provjera rada aplikacije .................................................................................79
Programiranje mikrokontrolera PIC 16F877 .............................................. 90 8.1
Uvod.....................................................................................................................90
8.2
Instalacija sustava pri programiranju programskim paketom IC-PROG .........90
8.3
Programiranje mikrokontrolera programskim paketom IC-PROG...................91
9
Opis razvojnog sustava............................................................................... 96 9.1
Napajanje.............................................................................................................96
9.2
Led diode.............................................................................................................96
9.3
Tipkala .................................................................................................................97
9.4
LCD zaslon (display)...........................................................................................98
9.5
Sedamsegmentni zaslon ....................................................................................99
9.6
Analogno-digitalni pretvarač (A/D converter) .................................................100
9.7
RS-232 komunikacija ........................................................................................101
9.8
Digitalni termometar - DS1820 .........................................................................102
9.9
Pull-up/pull-down otpornici na portovima.......................................................103
9.10
Direktan pristup portovima ..............................................................................105
10
Primjeri ....................................................................................................... 106
10.1
Uvod...................................................................................................................106
10.2
Makro naredbe ..................................................................................................106
10.3
Potprogrami ......................................................................................................107
10.4
Primjeri ..............................................................................................................108
10.4.1 10.4.2 10.4.3 10.4.4 10.4.5 10.4.6 10.4.7 10.4.8 10.4.9 10.4.10 10.4.11 10.4.12 10.4.13 10.4.14 10.4.15 10.4.16
Program za aktiviranje porta B ....................................................................108 Način upisivanja konstanti ...........................................................................109 Naredbe uvjeta............................................................................................109 Zbrajanje i oduzimanje, indirektno adresiranje.............................................109 Usporedba (komparacija) ............................................................................110 Inkrementiranje i dektrementiranje ..............................................................111 Inicijalizacija Porta A i Porta E.....................................................................112 EEPROM - čitanje podataka sa memorije ...................................................113 EEPROM - upis podatka u memoriju...........................................................113 FLASH programska memorija - čitanje podataka ........................................113 FLASH programska memorija - upisivanje podataka ...................................114 Zbrajanje dva 16 bitna broja ........................................................................115 Oduzimanje dva 16 bitna broja....................................................................115 Sortiranje sa indirektnim pristupom .............................................................115 Interupt........................................................................................................116 Preskaler - rad sa TMR0 .............................................................................117
3
10.4.17 10.4.18 10.4.19 10.4.20 10.4.21 10.4.22 10.4.23 10.4.24
Dvosmjerna vrtnja motora ...........................................................................119 Dioda ..........................................................................................................119 LED diode na portu B ..................................................................................122 Usporedba - indirektnim adresiranjem .........................................................123 Protok..........................................................................................................124 Regulacija temperature ...............................................................................125 Pretvorbe ....................................................................................................126 Servo motor.................................................................................................130
11
Popis pojmova i kratica:............................................................................ 133
12
Popis korištene literature:......................................................................... 136
4
1
Uvod
Primjenom mikroprocesorskih i mikrokontrolerskih struktura u elektroničkim uređajima postiže se sve više i više hardverska sličnost, dok specifičnost funkcija uređaja određuje programska podrška. Pomoću sveprisutnih mikrokontrolera i mikroprocesora povećana je pouzdanost i preciznost upravljanja pojedinim sustavom. Sustav oplemenjen mikrokontrolerom može u potpunosti zamijeniti čovjeka, smanjuje dimenzije uređaja i potrošnju energije. Zbog jednostavnosti i širokog spektra uporabe proširili su krug ljudi koji se bave elektronikom. U ovom udžbeniku je obrađen veći dio predavanja i vježbi iz kolegija Elektronička računala i računalna oprema koji se održava na Elektrotehničkom odjelu Tehničkog veleučilišta u Zagrebu. Koristit će studentima s Informatičkog odjela TVZ-a, Studija računarstva na kolegijima sličnog sadržaja, kao i svima koji ulaze u svijet upravljanja pomoću mikrokontrolera. Uz opći prikaz mikrokontrolerskih i mikroprocesorskih struktura objašnjen je i princip rada sa mikrokontrolerom PIC 16F84 tvrtke Microchip koja je jedna od vodećih u proizvodnji mikrokontrolera. U drugom dijelu je opisana izrada izvornog kôda i njegovo implementiranje u projekt, editiranje i ispravljanje pogrešaka, kao i simuliranje njegovog rada na računalu uz mnogo primjera sa vježbi. Za sve to korišten je programski paket MPLAB IDE tvrke Microchip koji je danas jedan od ponajboljih u tom području i što je još važnije svima dostupan (freeware).
5
2
Podjela računala
Na slici 2.1. prikazano je djelovanje čovjeka s obzirom na okolinu, tj. djelovanje s obzirom na informacije koje dobija od svojih osjetila. Na sličnom principu koristimo računala u procesnoj tehnici.
Sl.2.1. Načelo djelovanja čovjeka Računalo u procesnoj tehnici može poslužiti samo za njegov nadzor ili za automatsko upravljanje cjelokupnim procesom. Koji od ovih načina će se primijeniti ovisi o načinu unosa podataka u računalo te njihove obrade i načinu upotrebe dobivenih rezultata za upravljanje procesom. Dakle, treba razlikovati nadzor nad procesom (očitavanje relevantnih parametara) i upravljanje s njim (podešavanje parametara) bilo izravno (automatski) ili neizravno. Prema načinu unosa podataka u računalo te njihove uporabe za upravljanje tijekom procesa razlikuju se: Off - line sustavi On- line sustavi Nadzor – pojam vezan uz one sustave u kojem prevladavaju otvorene petlje Upravljanje – pojam vezan uz one sustave u kojima prevladavaju zatvorene petlje (automatizirani sustavi)
2.1
''Off line'' računala
Off-line prijenos podataka odvija se u dvije faze. U prvoj se podaci iz izvora zapisuju na neki prijenosni medij (disketa, priručna memorija, optički mediji i drugo), pa se tek potom sa tih medija prenosi ili upisuje u računalo. Vrijeme između skupljanja podataka i unosa je po potrebi, za sat ili dva, tjedan, mjesec, godinu dana ili nikad. Naravno ovakav sustav nepogodan je za brz i izravan nadzor nad procesima.
2.2
''On line'' računala
Računala koja rade ″on line″ (slika 2.2) unose podatke automatski kada su generirani. Podatke generiraju razni senzori koji su električnim vodičima spojeni na računalo. Vrijeme potrebno da se ti podaci prebace u računalo mjeri se uglavnom u milisekundama. Za takve sustave kažemo da rade u realnom vremenu, zbog toga što je vrijeme potrebno za obradu podataka definirano
Sl. 2.2. On-line sustav
6
Osnovni razlog uporabe on-line sustava jest brzina rada i velike mogućnosti obrade podataka kojom raspolaže digitalno računalo. Dakle nadzor sustava gdje se procesi vrlo brzo mijenjaju gotovo je nemoguć bez primjene digitalnog računala. Osim toga u realnom vremenu mogu se pratiti i predvidjeti tendencije koje se u procesu mogu pojaviti. Na taj način lako je intervenirati i izbjeći alarmantne situacije. Za razliku od navedenog, kod off-line obrade koja bi trajala dugo dobiveni rezultati bili bi gotovo nekorisni. Kvaliteta intervencije u sustavu ovisiti će o kvaliteti algoritma koji su razvijeni za upravljanje procesom i zatim uneseni u obliku programske potpore u računalo. Kod vrlo složenih sustava može se dogoditi da tim programom nisu obuhvaćene baš sve moguće situacije do kojih u životu i radu može doći. Ne može se baš sve predvidjeti. Iz navedenog razloga ponekad se on-line sustav izbjegava, a stanje procesa samo se prikazuje voditelju (osobi) koji odlučuje što treba učiniti. No može se dogoditi da voditelj donese neadekvatan zaključak unatoč kvalitetnim informacijama koje mu se predočuju. Da bi se to izbjeglo sve se više uvode ekspertni sustavi, odnosno digitalna računala s programskom potporom koja se služe bazom znanja koncipiranom od tima vrhunskih stručnjaka za proces koji se nadzire. Takav sustav koji može i ne mora biti on-line pomaže voditelju da u kritičnim situacijama donese najbolju odluku. Osnovno načelo rada ekspertnog sustava prikazano je na slici 2.3.
Sl. 2.3. Načelna shema ekspertnog sustava Dakle, neki se procesi ne mogu nadzirati bez on-line sustava nadzora s digitalnim računalom, jer nikakvo drugo sredstvo nema takvu brzinu rada i moć kao računalo koje može na brze novonastale promjene u procesu smjesta reagirati. Elementi inteligentnog ponašanja vrlo su značajno svojstvo ovih sustava. Pod tim se misli na prilagodljivost i snalaženje sustava (računala) u promijenjenoj situaciji u odnosu na programski prepoznatljivu i definiranu, a to znači da sustav mora prepoznati promjenu van definiranih okvira, prilagoditi se i donijeti više ili manje adekvatno rješenje da bi se sustav ponašao unutar definiranih granica. Znači u takvim situacijama ne traži se idealno rješenje već prvo prihvatljivo. Kao primjer navest ćemo nekoliko kontrolora procesa: 1.) SCADA (Supervisory Control And Data Acquisition) razvojni sustavi su tijekom prošlih nekoliko godina tehnološki brzo napredovali i pratili razvoj ostalih segmenata informatičke industrije. Napredak tehnologija SCADA sustava je vidljiv u nekoliko segmenata. Najznačajniji napredak je napravljen na polju tehnologija veznih uz internet. Današnji SCADA razvojni sustavi omogućavaju povezivanje SCADA sustava s web serverom što omogućava nadzor i upravljanje sustava s udaljenih lokacija korištenjem interneta i web preglednika. Veliki problem SCADA sustava je bio u povezivanju računala s mjernom i upravljačkom opremom zbog nestandardnih programskih sučelja takve opreme prema SCADA sustavima što je rezultiralo ograničavanjem mogućnosti odabira opreme, odnosno SCADA razvojog sustava. Uvođenjem standardnog programskog sučelja mjerne i upravljačke opreme – OPC (OLE for Process Control), baziranog na Microsoft OLE (Object Linking and Embedding) tehnologiji za komunikaciju između programskih modula u Windows okolini, omogućena je upotreba šireg spektra mjerne i upravljačke opreme i SCADA sustava uz pojednostavljen rad. Daljnji napredak je vidljiv u proširenju postojećih mogućnosti i povećavanju pouzdanosti.
7
2.) FPGA (field-programmable gate array) je poluvodička naprava koja sadrži programabilne logičke komponente i programabilne međuspojeve. Programabilne logičke komponente mogu biti programirane da poboljšaju funkcionalnost osnovnih logičkih operacija (kao što su AND, OR, XOR, NOT) ili složenijih kombinacijskih sklopova kao što su dekoderi i jednostavne matematičke operacije. Večina FPGA sadrži i memorijske elemente najčešće flip-flop (bistabilne multivibratore) ili više blokova memorije. Hijerarhija programabilnih međuveza dopušta logičkim blokovima u FPGA-u da budu međusobno povezani ako je to potrebno i sa sistemskim projektantom, nešto kao one-chip programabilni model. Ti logički blokovi kao i međuveze mogu biti programirani i poslije tehnološke proizvodnje preko projektanta tako da FPGA može obavljati logičke operacije koje se u tom trenutku od njega zahtjevaju. 3.) ASIC (application-specific integrated circuit) je integrirani sklop projektiran za za opću upotrebu (npr. čip dizajniran isključivo za mobilni telefon bio je ASIC). Kako je tehnologija iz godine u godinu napredovala maksimalna složenost ASIC-a je također rasla (od 5000 logičkih vrata do nekoliko milijuna). Moderni ASIC-i često uključuju 32-bitni procesor, memorijske blokove uključujući ROM, RAM, EEPROM, Flash itd. Dizajneri ASIC-a koriste se HDL-om (hardware description language) kao što su Verilog ili VHDL kako bi opisali funkcionalnost ASIC-a. 4.) PLC Prvi programibilni logički kontroleri (PLC) razvijali su inženjeri General Motors-a 1968., kada su pokušali pronaći alternativnu zamjenu za složene relejne kontrolne sustave. Novi kontrolni sustav morao je zadovoljiti slijedeće zahtjeve: • Jednostavno programiranje, • Programske izmjene bez sistemskih intervencija (bez mijenjanja ožičenja), • Manje, jeftinije i pouzdanije komponente od relejnih kontrolnih sustava, • Jednostavno i jeftino održavanje Postupnim razvojem došlo se do sustava koji je omogućio jednostavnije povezivanje binarnih signala. Uvjeti pod kojim su ovi signali trebali biti povezani, bili su određeni u kontrolnom programu. S novim sustavima bilo je po prvi puta moguće iscrtati signale na ekranu, te ih pohraniti u vidu datoteke u elektronsku memoriju. Po definiciji Programibilni logički kontroleri su: Prema DIN EN61131-1 (1994.) programabilni logički upravljač (kontroler) jest digitalni elektronički sustav za uporabu u industrijskom okolišu s programabilnom memorijom za internu pohranu u primjeni orijentiranih upravljačkih naredbi kod implementiranja specifičnih funkcija kao što su npr. logičko upravljanje, slijedno upravljanje, funkcije odbrojavanja, funkcije brojenja i aritmetičke funkcije, Osnovna namjena PLCa je upravljanje, putem digitalnih ili analognih ulaznih i izlaznih signala, različitim vrstama strojeva ili procesa. Glavni djelovi PLC-a su: • mikroprocesor s dodatnim električkim sklopovima, • sklop za opskrbu električnom energijom procesora koji pretvori upravljački istosmjerni napon od 24V u takozvani logički napon (5V), • kvarc za davanje takta procesoru, • prekidač za uključivanje i isključivanje rada procesora, • memorija (sistemska, radna, programska). Preko sabirnog priključka spaja se centralna jedinica (mikroprocesor) s ulazno - izlaznim elementima (modulima - karticama). Ulazni modul treba osigurati: • priključke na koje se priključuju senzori, • prilagodbu napona, • zaštitu centralne jedinice od napona, • zaštitu centralne jedinice od smetnji, • sigurno razlikovanje signala 1/0.
8
Izlazni modul također posreduje između centralne jedinice i automata. Njegove zadaće su: • povezivanje s izvršnim elementima, • prilagodba napona, • zaštita centralne jedinice, • pojačanje snage, • zaštita od kratkog spoja. Karakteristike programabilnog logičkog kontrolera: • omogućava direktan priključak binarnih senzora i aktuatora, • odgovara zahtjevima industrijskog okoliša u odnosu na otpornost na povišenu temperaturu, vibracije i elektro-magnetska zračenja, • operacijski sustav je razvijen za optimalnu obradu Boolove logike • operacijski sustav potpomognut programskim i dijagnostičkim alatima dopušta direktan pristup na binarne ulaze i izlaze kao i na interne binarne i digitalne memorije (flag, registre, brojače, tajmere), • operacijski sustav omogućava komunikaciju sa računalom.
Centralna procesorska jedinica
Izlazne stezaljke
p
Ulazne stezaljke
Komunikacijsko sučelje prema uređaju za programiranje ili operatorskom panelu (HMI) te mrežna komunikacija
MEMORIJA Program Podaci Optoizolacija
Optoizolacija
Mrežni modul napajanja
Sl. 2.4. Blok shema PLC-a
9
3
Osnovni sklopovski elementi za ''on line'' način rada
Shematski prikaz sustava koji radi u ″on line″ načinu rada prikazan je slikom 3.1. Proces je sredina koja se mjeri te upravlja računalom. Računalo služi za obradu podataka prikupljenih iz procesa. Središnji dio služi za povezivanje procesa i računala, koji ćemo sada razmotriti.
Sl. 3.1. Shematski prikaz on-line sustava
3.1
Senzori i izvršni organi
Senzori mjere razne fizikalne veličine (temperatura, pritisak, vlažnost, protok, kut zakreta, brzina, itd.) te ih pretvaraju u odgovarajuće električne veličine (napon, struja, frekvencija, faza itd.). Mjeriti se mogu različite pojave kao što je vodostaj rijeke, brzina toka iste, temperatura kotla termoelektrane, rastezanje željeza pri zagrijavanju, itd. Senzori se još i nazivaju mjerni pretvornici. Osobitosti o kojima treba voditi računa pri korištenju senzora je točnost, sposobnost približavanja pravoj vrijednosti fizikalne veličine, a koja se ogleda u sljedećim parametrima: • Statička greška - odstupanje između pokazane i stvarne vrijednosti fizikalne veličine kada se ova ne mijenja. Obično se daje u postocima prema najvećoj vrijednosti koja se može mjeriti. • Dinamička greška - koliko senzor "kasni" za promjenama fizičke veličine. Svaki senzor posjeduje dinamičku grešku. Ova greška nestaje kad se fizikalna veličina prestane mijenjati. • Greška ponovljivosti - je najveće odstupanje od srednje vrijednosti pri ponovljenom mjerenju nepromijenjene fizikalne veličine. • Mrtvo vrijeme - predstavlja vrijeme potrebno da se promjene fizikalne veličine počnu iskazivati i na izlazu iz senzora. • Mrtva zona - je najveća promjena fizikalne veličine do koje se na izlazu iz senzora još uvijek ne očitavaju promijene. Od senzora se u osnovi traži da ne djeluju na svojstva ili ponašanje sredine u kojoj se nalaze. U on-line sustavima se nalazi mnogo analognih veličina stoga signal treba filtrirati, ispraviti (linearizirati) i kondicionirati da bi se analogni signal mogao digitalizirati u A/D pretvorniku. Postoje dva načina rada. Prvi je da se mjerene veličine prikazuju čovjeku te on odlučuje kako će reagirati i drugi način je kada računalo samo djeluje u procesu. To znači da računalo iz samog procesa preko senzora uzima željene informacije te od dobivenih mjernih veličina pomoću određenih algoritama donosi zaključke, a nakon tih zaključaka djeluje na sustav preko izvršnih organa. Izvršni organi mogu biti prekidač, elektromotor koji upravlja ventilom, regulator izgaranja na ložištu itd. Senzori i izvršni organi za svaki sustav su specifični.Više o tome smo rekli kod on-line sustava na str. 7.
10
3.2
Analogna obrada signala
Električni signali koji dolaze iz senzora imaju različite oblike. S druge strane za analogno-digitalni pretvarač signali su standardnh veličina (0 - 5 VDC, 0 - 10 VDC, –10 do +10 VDC, 0 - 20 mA, 4 - 20 mA), standardizirani. Da bi se to postiglo potrebna je elektronička obrada signala. Signal je potrebno propustiti kroz elektronički sklop koji će mu dati oblik i veličinu, no ne smije se oštetiti informacija koju taj signal nosi. Signal je potrebno linearizirati, pojačati i filtrirati. Da bi signal doveli u željeno analogno područje često koristimo pojačala s povećanjem većim od 1, ali i s povećanjem manjim od 1. Zadatak pojačala je da promjeni vrijednost analognih veličina i prenese ih u novo područje naponskih vrijednosti, a da ne pokvari njihovu analognu informaciju (normiranje). Često se koriste i razni filtri kojima je zadatak odstraniti šum. Karakteristika signala se može poboljšavati i na digitalan način, tako da se senzoru doda mikroračunalo koje posebnim algoritmima oblikuje signal pa tek tada prenosi u ″glavno″ računalo.
3.3
Multipleksori
Da bi se upravljalo procesom potrebno je puno različitih senzora, rijetko kada nam je dovoljan samo jedan. Mjerena veličina svakog senzora bit će prvo podvrgnuta analognoj obradi. Zatim svaka mjerna veličina bi mogla imati svoj A/D pretvarač i svoj interface. Takvo rješenje bi bilo preskupo u sustavima gdje se koristi nekoliko desetaka pa i nekoliko stotina senzora, pa se upotrebljava samo jedan A/D pretvarač i interface. Kod takvog rješenja mora postojati multipleksor (slika 3.2b). Multipleksor (engl. Multiplexer) ili selektor (engl. Data selector) je sklop kojim se podatak sa jednog od više ulaza usmjerava (prenosi) na izlaz. S kojeg ulaza će se odabrati podatak i prenjeti na izlaz ovisi o stanju posebnih ulaza za odabiranje (slika 3.2a). Broj ulaza za podatke N ovisi o broju ulaza za odabiranje M.
N = 2M
D0
DN −1
S0 − S M −1 Sl. 3.2a. Opći prikaz djelovanja multipleksora
Na slici 3.2b. prikazana je logička shema multipleksora s četiri ulaza. Kada je potrebno odabrati jedan od četiri ulazna podatka tada multipleksor treba imati dva ulaza za odabiranje podataka. Podaci sa ulaza dovode se na sklopove ″I″. Koji sklop ″I″ će prenjeti podatak s ulaza na izlaz, preko sklopa ″ILI″ ovisi o kombinaciji na ulazima za odabiranje podataka S0 i S1 . To se može prikazati i tablicom stanja slika 3.2b.
11
S1
S0
D0 D1 Y
D2 D3 Sl. 3.2b. Logička shema i tablica stanja multipleksora Naravno postaje upitno kojim redom će se signali obrađivati. Samo po sebi se nalaže rješenje redom kojim dolaze no to se rijetko primjenjuje. Brzina promjene pojedinih mjernih veličina je različita pa tako i njihova gustoća uzimanja uzoraka ne može biti ista. Tako se npr. temperatura prostorije ne može promijeniti u vremenu manjem od desetak sekundi, dok se promjena tlaka u parogeneratoru mora mjeriti u milisekudama pa čak i češće (frekvencija uzorkovanja). Stoga se uzorci signala uzimaju prema potrebi obrade mikroračunala. Znači mikroračunalo bira redoslijed obrade podataka prema programu koji izvodi, šaljući adresu ulaznog podatka multipleksoru.
3.4
Sample & Hold sklop (S&H)
Sample & Hold sklop ima zadaću da u trenutku uzorkovanja očita vrijednost analognog signala na ulazu te da ga zadrži sve do sljedećeg uzorkovanja. Na neki način djeluje kao memorija za pamćenje analogne vrijednosti između uzorkovanja kako se na ulazu u A/D sklop ne bi mijenjala vrijednost tijekom pretvorbe. Stvarni Sample & Hold sklop uz sklopku i kondenzator, sadrži i serijski otpor sklopke i vodiča ali i unutarnji otpor izvora signala R1, te paralelni otppor R2 (slika 3.3.). Vremenska konstanta R1C mora biti puno manja od vremena T0N, kada je sklopka S zatvorena, a vremenska konstanta R2C mora biti puno veća od intervala uzorkovanja TS. R1C << T0N, R2C >> TS T0N - sklopka zatvorena TS - interval uzorkovanja
Sl. 3.3. Stvarna shema Sample&Hold sklopa
12
Sl. 3.4. Shema S&H sklopa
Sl. 3.5. Signal pri S&H obradi Kašnjenje koje nastaje pri povratku iz stanja zadržavanja u stanje praćenja ograničava frekvenciju uzimanja uzoraka.
3.5
Analogno digitalni pretvarač
Digitalni sustavi koji služe za mjerenje, regulaciju ili automatizaciju na svome će ulazu i izlazu u pravilu imati analognu veličinu. Najveći je broj procesa u prirodi analogan, a to vrijedi i za mnoge veličine u tehničkim sustavima. Da bi računalo moglo obrađivati te signale potrebno ih je kodirati, diskretizirati po vremenu i amplitudi, tek tada kada su pretvoreni u binarne brojeve mogu se unositi u računalo. Zbog toga je potrebno imati uređaje za automatsko pretvaranje između tih dvaju načina prikaza veličina. Proces kvantizacije predstavljat će mjerni proces u kojemu se konstatira koliko standardnih mjernih jedinica sadrži mjerna veličina. Idealna karakteristika A/D pretvorbe prikazana je na slici 3.6. kao i blok shema A/D pretvarača. Pretvorba analogne veličine u digitalnu (i obratno) inherentno je diskontinuirani proces. Proces pretvorbe sastoji se u tome da se ulaznoj veličini koja se nalazi u nekom određenom naponskom intervalu pridruži određeni broj n. U idealnom slučaju naponski su intervali (ili koraci) jednake širine U K i ponekad se nazivaju kanalima. Jedna je od osnovnih karakteristika A/D i D/A pretvorbe broj koraka odnosno kanala koji određuju rezoluciju.
13
Rezolucija ili razlučivanje je širina kanala kao postotak maksimalnog ulaznog napona ili jednostavno njihov omjer. Ako je nM maksimalni broj koji odgovara maksimalnom ulaznom naponu UM, onda je širina koraka jednaka UM/nM, pa se rezolucija svodi na 1/nM. Budući da je broj n izražen k binarno sa k bita, maksimalni je broj 2 – 1, pa je uobičajeno da se rezolucija jednostavno izražava kao broj bita što ih ima ulazni ili izlazni podatak.
ua - ulazni napon n - broj bita nM - maksimalni broj bita UM - maksimalni ulazni napon UK - naponski interval (korak) Sl. 3.6. Idealna karakteristika A/D pretvarača i blok shema Analogno-digitalni pretvarač ne pretvara u digitalnu vrijednost cjelokupni analogni signal, već samo njegove uzorke u vremenu (slika 3.7.).
Sl. 3.7. Uzorkovanje analognog signala u vremenu 14
Da ne bi signal previše izobličili A/D pretvorbom potrebno je dobro provesti diskretizaciju. To znači da koraci kojima se uzima signal kod diskretizacije moraju biti gusti po vremenu da se ne izgubi ni jedan harmonik ulaznog signala, a po amplitudi treba imati dovoljnu veliku razlučivost da bi razlikovala male promjene amplitude. A/D pretvorba je povremeno mjerenje vrijednosti signala ako se promatra kao proces. Kako je signal promjenjiv moramo u određenom trenutku uzeti uzorak (sample) signala i tu vrijednost privremeno pohraniti (hold). S & H izvodimo jer mjerenje nije moguće izvesti trenutno već ima određeno trajanje. Shannonov teorem govori da se pri uzimanju uzoraka iz nekog kontinuiranog signala uzorci moraju uzimati barem dvostruko većom frekvencijom nego što je frekvencija najvišeg harmonika koji se uzima u obzir pri razmatranju. Imamo dvije osnovne vrste A/D pretvarača: a) A/D pretvarači s vremenskim ekvivalentom b) A/D pretvarači sa sukcesivnom aproksimacijom c) Sigma-delta A/D pretvarači a) A/D pretvarači s vremenskim ekvivalentom
A/D pretvarač s vremenskim ekvivalentom naziva se još i Wilkinson-ov A/D pretvarač.
ua
up
Sl. 3.8. Wilkinson-ov A/D pretvarač A/D pretvarač koji ulazni analogni napon pretvara najprije u odgovarajući vremenski interval prikazan je na slici 3.8. Ulazna analogna veličina ua nalazi se na jednom od ulaza naponskog komparatora K. Na drugom ulazu je napon 0, pa je izlaz komparatora na niskoj razini. Proces pretvorbe započinje impulsom START koji postavlja bistabil u 1. Time se otvara ulaz u brojilo i brojilo počinje brojati impulse iz generatora impulsa. Istovremeno je pobuđen i generator pilastog napona koji je spojen na drugi izlaz komparatora. Rad sklopa može se pratiti pomoću dijagrama na slici 3.9. Kada pilasti napon naraste do vrijednosti ulaznog napona, izlaz iz komparatora odlazi na visoku razinu i vraća bistabil u stanje 0. Time završava pretvorba napona u vrijeme. Za vrijeme T dok je ″I″ sklop otvoren impulsi iz generatora pokreću brojilo, a nakon završetka pretvorbe stanje brojila pokazuje traženu digitalnu veličinu u koju je pretvoren ulazni napon.Treba napomenuti da točnost pretvorbe ovisi o stabilnosti frekvencije generatora impulsa i o linearnosti i stabilnosti pilastog napona.
15
Sl.3.9. Princip rada Wilkinson-ovog A/D pretvarača
b) A/D pretvarači sa sukcesivnom aproksimacijom
Pretvarač radi tako da se produženi ulazni napon iz produživača uspoređuje s naponom u obliku stepenica (slika 3.12.). Pri tome prva stepenica ima veličinu Umax/2, druga Umax/4, treća Umax/8, itd. Gdje je Umax najveći ulazni napon koji se može pretvarati. Zbog takvog načina rada taj tip A/D pretvarača zove se i A/D pretvarač sa sukcesivnom aproksimacijom. Ako je stepeničasti napon, koji predstavlja sumu svih stepenica, manji od produženog ulaznog napona, onda do tada generirane stepenice ostaju. Kada stepenasti napon postane veći, briše se doprinos stepenice koja se pojavila posljednja i izazvala prekoračenje ulaznog napona. Tako na kraju usporedbe ostaju samo one stepenice čija je suma približno jednaka veličini ulaznog napona, odnosno neznatno niža od njega. Generiranjem svake naponske stepenice upravlja jedan bistabil, propuštajući kroz zajednički otpornik struju proporcionalnu težinskoj vrijednosti toga bistabila u binarnom brojevnom sustavu. Tako bistabil najmanje težinske vrijednosti B0 upravlja strujom I0 stvarajući najmanju stepenicu napona, sljedeći po redu bistabil B1, upravlja strujom 2I0 stvarajući tako dvostruko veću stepenicu, itd. Bistabili se postavljaju u stanje 1 nizom uzastopnih impulsa. Prvi od tih impulsa postavi u stanje prvi bistabil najveće težinske vrijednosti, koji ukljući odgovarajuću struju, i napravi najveću stepenicu Umax/2. Zatim se uključuje sljedeći bistabil po težinskoj vrijednosti, koji stvori stepenicu Umax/4, itd.Kada suma stepeničastog napona prekorači veličinu ulaznog napona, uspoređivač pošalje signal o prekoračenju.Taj signal postavi u nulu bistabil koji je generirao posljednju stepenicu, zbog toga prestane teći ona struja kojom upravlja taj bistabil pa nestane i njegova stepenica. Kada se tako izredaju svi bistabili i njihove stepenice, pretvorba je završena, a stanje bistabila u obliku binarnog podatka predočavaju na digitalni način veličinu ulaznog napona.
16
Sl. 3.12. A/D pretvarač sa sukcesivnom aproksimacijom
Sl. 3.13. Graf signala sukcesivnog A/D pretvarača
17
c) Sigma-delta A/D pretvarači
Sl.3.13.a Blok shema Sigma-delta A/D pretvarača
Na gornjoj slici ulazni naponski signal VIN je doveden na integrator, čiji izlaz se preko komparatora uspoređuje s referentnom naponskom nulom pretvarača. D-bistabil kontrolira preklopnik s kojim uključujemo/isključujemo referentni napon na ulazu u integrator. Kako ulazni napon raste ili pada, komparator uključuje ili isključuje referentni napon, koji se oduzima od ulaznog signala, s težnjom da zadrži nulu na izlazu integratora. Brojač C1 konstantno broji impulse dobivene iz generatora takta, dok brojač C2 samo broji impulse kada je preklopnik zatvoren. Pretpostavimo da je kapacitet brojača C1 1000. Nakon svakog perioda od 1000 impulsa, broj u brojaču C2 je proporcionalan srednjoj vrijednosti ulaznog signala. Sigma-delta modulacijska tehnika je vrlo uspješno u upotrebi u analogno-digitalnoj pretvorbi (ADC) nešto više od 20 godina. Iako sigma-delta postoji od polovice prošlog stoljeća, tek skorašnje prednosti VLSI tehnologija je omogućila uporabu da proteče generiran bit sa 1 bitnim ADC-om. Posljedica visoke rezolucije sigma-delte tehnologije je brzina – sklopovlje treba funkcionirati sa većim brojem uzoraka, mnogo većim od pojasne širine maksimalnog signala, te zahtjeva veliku složenost digitalnih strujnih krugova. Zbog ovih ograničenja, ovi pretvarači tradicionalno prikazuju visoku rezoluciju, vrlo niskog frekvencijskog zahtjeva, i u zadnje vrijeme govor, zvuk i umjerene brzine (100 kHz i 1 MHz). Digitalno filtriranje prikazuje rezultate u dugoj prikrivenosti između početka ciklusa uzorka i prvog ispravnog digitalnog izlaza. Značajno zaostajanje između digitalnog izlaza i njegovog trenutnog pratećeg uzorkovanja. Ove karakteristike sprječavaju korištenje ovih pretvarača u složenim sistemima – nakon prebacivanja iz jednog kanala u drugi zahtjeva se mnogo vremenskih ciklusa za postavljanje digitalnog filtriranja.
18
Razlike u odnosu na alternativne tehnologije: • Većina strujnih krugova u sigma-delta pretvaračima je digitalna. To upućuje da se izvođenje neće značajnije promjeniti s vremenom i temperaturom. Također, izvedivo je postavljanje pretvarača u jedan integrirani sklop sa dodanim strujnim krugom, kao što su D/A pretvarač, DSP (Procesor Digitalnog Signala), mikrokontroler. Konačno, njena izvedba nije skupa i cijena je stalno u padu. • Oni su sami po sebi monotoni, odnosno promjena digitalnog izlaza je uvijek ista tj. padu ili rastu digitalnog ulaza. To je izrazito značajno u zatvorenim kružnim kontrolnim sustavima, gdje nedostaje interpretacija smjera promjena mjerene varijable, gdje može uzrokovati nestabilni sustav. • Oni su sami po sebi linearni, te predočavaju manju diferencijalnu nelinearnost. • Ne zahtjevaju dodatni Sample & Hold strujni krug, tijekom velike ulazne brzine uzorkovanja i male točnosti A/D pretvorbe. • Zahtjevi za analogne protupreklapajuće (anti-aliasing) filtere su minimalni, u većini slučajeva je dovoljan jednostavni jednopolni RC filter. Za razliku od ostalih gdje su zahtjevi osrednji, za visoke rezolutne zahtjeve koriste se druge vrlo sofisticirane (ne preuzorkovane) tehnologije, drugačije dizajnirane, veće i skuplje. • Razina smetnje, koji određuje SNR (Signal-To-Noise Ration – omjer snage signala i smetnje), je neovisana o razini ulaznog signala. • Do tada je stanje digitalnog filtriranja dio nakon A/D pretvaranja, smetnje ubačene kroz pretvarački proces se mogu vrlo uspješno kontrolirati. Ustvari, filter može biti podešen do minimalne razine smetnje sa vrlo specifičnim karakteristikama (npr. 50 Hz). • Prije svega, oni sami po sebi čine ove uređaje jeftine i pristupačne. U višekanalnoj primjeni, arhitekture jedan pretvarač po kanalu, često će biti efikasniji, ali i skuplji od jednog pretvarača za multipleksirane ulaze.
19
3.6
Digitalno analogni pretvarač
Digitalni signal ima mnoge svoje prednosti, ali je ipak analogni signal u mnogo slučajeva pogodniji. Na primjer, u regulacijskoj tehnici zbog izvršnog sklopa analogne prirode potrebno je digitalne signale pretvoriti u analogne.
2n−1
U iz
20
Sl. 3.14. D/A pretvarač D/A pretvarač nam je potreban da bi digitalni signal dobiven iz računala pretvorili u odgovarajući analogni signal najčešće napon ili struju. On nam je potreban za prikaz podataka na CRT monitoru. D/A pretvarač radi tako da svaki bit binarnog podatka upravlja određenim iznosom električne struje proporcionalnog težinskoj vrijednosti tog bit-a. Tako bit najmanje težinske vrijednosti B0 upravlja strujnim iznosom I0, B1 upravlja strujom 2I0, B2 strujom 3I0, itd. Sve struje teku u istu točku te je konačan iznos određen binarnim brojem zbroj svih struja. Propuštanjem te struje kroz otpornik dobije se napon. Šiljci prijelaznog napona vezani su uz kontinuiranost veličine (slika 3.15.).
n 1000 0111
Šiljak prijelaznog napona
stvarni očitani
t Sl. 3.15. Graf signala
20
3.7
Međusklop (Interface)
Međusklop (eng. interface) služi za povezivanje računala sa vanjskim uređajima. Vanjski sklopovi imaju drugačiji način rada koji je neovisan o načinu rada digitalnog računala. Zadatak međusklopova je da ta dva različita načina rada uskladi tako da čine cjelinu. Pošto su vanjski sklopovi jako različiti, međusklopovi trebaju biti sastavljeni od standardnih elektroničkih dijelova. Mikroračunala imaju posebne LSI-komponente za prijenos podataka između mikroprocesora i vanjskih jedinica, koje se programski prilagođavaju specifičnim vanjskim jedinicama. To omogućava fleksibilnost i jednostavnost međusklopova. Treba spomenuti da postoje standardni LSI-sklopovi za ulazno – izlazni prijenos. Ti LSI-sklopovi se rade za standardne vanjske jedinice kao što su disketna jedinica, tipkovnica, itd. Neposredni ulazno – izlazni prijenos se vrši paralelno, znači da se svi bit-ovi jedne riječi prenose od jednom (to su međusklopovi u užem smislu). Uređaji za povezivanje udaljenih jedinica s računalom koriste serijsku vezu jer paralelna nije praktična zbog broja vodiča, znači prenosi se bit po bit. Najprije treba paralelne podatke pretvoriti u serijske te se na prijemnom mjestu opet pretvaraju u paralelne. Svi potrebni sklopovi za povezivanje na daljinu se također zovu interface, mada bi bilo prikladnije reći interface u širem smislu, jer oni sadrže interface u užem smislu, paralelno/serijsku i serijsko/paralelnu pretvorbu. Uređaji koji koriste serijsku komunikaciju koriste dvije vrste kabela i to: DCE (Data Communications Equipment) i DTE (Data Terminal Equipment). DCE koriste modemi, printeri i sl. dok se DTE koristi za vezu između PC korisnika. U/I kanali su priključci ili ulazno/izlazni sklopovi koji omogućuju povezivanje računala sa različitim vanjskim uređajima ili s uređajima unutar kučišta sustava.
Sl. 3.16. Sučelje DTE-DCE i komunikacijski kanal Dva su osnovna tipa prijenosa podataka putem U/I kanala: a) parelelni b) serijski
a) Paralelni prijenos podataka ukazuje na istovremeni prijenos bitova preko više komunikacijskih vodova. Sklopovi su standardni i direktno su povezani sa sve tri sabirnice. Sklop ima svoj registar (privremenu memoriju) koja ima svoju adresu pa mikroprocesor lako na njega prenese podatke. Nečelo paralelnog prijenosa prikazan je na slici 3.17.
21
Sl. 3.17. Načelna shema osam bitnog paralelnog prijenosa Prikazani sustav paralelnog prijenosa podataka razvila je tvrtka CENTRONICS, pa se često tako i naziva. Kako bitovi prolaze istovremeno, prijenos je brži od serijskog prijenosa, ali je neprikladan za udaljene veze zbog velikog broja vodiča u spojnom kabelu. Efikasna duljina je 10 m.
Sl. 3.18. Shema jedinice za paralelni prijenos b) Serijski prijenos podataka. Za razliku od paralenog prijenosa, kod serijskog se podaci šalju po jednoj žici. Da bi se podaci sa sabirnice mogli redosljedno poslati preko serijskog sučelja, u sklopu sučelja obavezno su ugrađeni registri posmaka koji omogućavaju pretvorbu paralelnog prihvata u serijsko odašiljanje i obratno.
Sl. 3.19. Načelo rada serijskog prijenosa podataka 22
Sl. 3.20. UART Najčešći tip prijenosnog puta u procesima je RS-232C. Postoje i RS-422 (baziran na strujnoj petlji od 4 do 20mA). RS-232C baziran je na naponskom prijenosu, ali na izlazu i ulazu su različiti naponi. Na izlazu se napon kreće od -15 do +15V, na izlazu od -3 do +3V. Brzine prijenosa su do 20Kb/s. RS422 podržava vodove do kilometra i veće brzine prijenosa (do 100Kb/s). Postoje dva tipa prijenosa s obzirom na vremensku usklađenost prijenosa: • Sinkroni • Asinkroni Asinkroni način prijenosa podataka najčešće se upotrebljava pri malim brzinama prijenosa tj. kada se prenosi relativno malo bitova u sekundi, jer su tada prihvatljive veće međusobne razlike taktnih signala, odašiljača i prijemnika. Za veće brzine prijenosa upotrebljava se sinkroni prijenos koji mogu prenositi nekoliko puta više bitova u sekundi. Pri asinkronom načinu prijenosa odašiljač i prijemnik imaju odvojene izvore taktnih signala pa je potrebno relativno velika usklađenost, odnosno točnost tih signala. Pri sinkronom prijenosu to nije problem jer isti taktni signali određuju mjesto svakog bita koji se prenosi i u odašiljaču i u prijemniku. Inače je način rada pri sinkronom serijskom prijenosu sličan radu pri asinkronom prijenosu. Postoji odašiljač koji paralelne podatke pretvara u serijske, i prijemnik što dolazeće impulse prihvaća i formira podatak spreman za daljnji paralelni prijenos. Kod asinkronog prijenosa podataka nema informacije o taktu uključenog u samoj poruci, već se koristi česta resinkronizacija koristeći se start i stop bitovima. Prijenos podataka počinje start bitom, a završava stop bitom. Osim start i stop bita može se slati i paritetni bit, koji štiti od jednostruke pogreške. Također ne može detektirati koji je bit krivo poslan, a ne može detektirati ni višestruke pogreške.
Sl. 3.21. Primjer RS-232 signala
23
3.8
Paritetni sklop
Paritetni sklop koristi se kao generator i ispitivač pariteta pri prijenosu digitalnih signala. Za siguran prijenos kodiranih podataka u digitalnim sustavima vrlo često se koristi metoda pariteta. Svakoj binarnoj kombinaciji, kojom se pokazuje podatak, dodaje se tzv. paritetni bit kako bi ukupan broj jedinica bio uvijek paran (metoda parnog broja jedinica) ili neparan (metoda neparnog broja jedinica). Na mjestu odakle se odašilje digitalni signal paritetni sklop djeluje kao generator paritetnog bita. Sklop ispituje broj jedinica u podatku i generira paritetni bit. Ako 4-bitni podatak ima parni broj jedinica generator pariteta na izlazu daje stanje 0, ako podatak sadrži neparan broj jedinica, generator pariteta daje na izlazu stanje 1. Time se postiže da je ukupan broj jedinica podataka i paritetnog bita uvijek paran (slika 3.22.).
Sl. 3.22. Primjena paritetnog sklopa
3.9
Povezivanje računala sa procesima
Da bi se računala mogla primjeniti u vezi sa različitim procesima, karakteristične mjerne veličine (parametri procesa) moraju se unositi u računalo koje te podatke obrađuje, izvodeći karakteristične programe, specifične samo za taj proces. Izvođenje tih programa omogućuje da se pomoću računala nadzire odvijanje procesa, da se mjere izvorne ili izvedene veličine tog procesa ili da se procesom upravlja pomoću računala. Najprije treba razraditi odgovarajuće upravljačke, mjerne ili nadzorne algoritme kojima se na adekvatan (primjeren) način rješava postavljeni zadatak. Taj algoritam se zatim ubacuje u računalo pomoću programa napravljenih upotrebom nekog programskog jezika. Tokom rada na procesu ti se programi izvode u računalu, omogućavajući upravljanje procesom, mjerenje ili nadzor procesa. Da bi računalo moglo raditi sa procesom, potrebni su i u samom procesu odgovarajući sklopovi, karakteristični upravo za taj proces. To mogu biti različiti sklopovi. Oni povezuju proces sa elektroničkim i računalnim sustavom i mogu se podjeliti u dvije osnovne kategorije: Senzore (mjerne pretvarače, osjetila) i izvršne organe. Senzori izražavaju različite parametre procesa, najčešće u obliku električnih analognih signala (veličina napona ili struje). Izvršni organi služe za djelovanje na proces, ako se obradom ulaznih podataka ustanovi da to treba učiniti. Parametri procesa koji će se upotrijebiti za rad ovise o vrsti procesa i mogu biti različite fizikalne veličine kao što su tlak, protok, temperatura, radioaktivno zračenje itd. Budući da ima puno različitih parametara koji se mogu mjeriti, s većom ili manjom točnošću, postoji i veliki broj različitih senzora. Većina tih senzora izražava parametre (mjerne veličine) procesa u analognom obliku, odnosno u obliku veličine napona ili struje, zato ih prvo treba pretvoriti u digitalni oblik koji je pogodan za unos u računalo. Postoji dakako mogućnost, iako manja, da senzori izražavaju neke parametre procesa direktno u digitalnom obliku. Takve veličine nije potrebno pretvoriti u digitalni oblik, nego se mogu bez pretvorbe unositi u računalo. 24
3.10
Računalo
Računalo je ''mozak'' jednog ″on line″ sustava. Ono omogućava brzu reakciju i korekciju u sustavu. Tako na primjer, na temelju prikupljenih meteoroloških podataka računalo danas izračunava vremensku prognozu za sutra, za to bi ljudima koristeći meteorološke algoritme trebalo možda mjesec dana i tada bi ti podaci bili nevažni. Koristeći računalo ti podaci mogu biti obrađeni u vrlo kratkom vremenu pa ta vremenska prognoza postaje upotrebljiva. Računala tako mogu biti korištena u različite svrhe, a to im omogućuje programibilnost. Program koji je unesen u računalo prilagođava računalo određenom sustavu. Gotovo za svaki sustav računalo je sklopovski isto, moguće su male modifikacije.
3.10.1
Mikroprocesor
Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske instrukcije i na osnovu njih obrađuje podatke. Naziv ''mikro'' koristi se zbog malih dimenzija. Današnji mikroprocesori sadrže preko stotinu milijuna tranzistora ukomponiranih na silicijskoj pločici upakiranoj u kućište. Prvi mikroprocesor proizvela je tvrtka Intel 1971. godine. To je bio 4-bitni mikroprocesor s brzinom od 6000 operacija u sekundi, zvao se 4004. Nakon tog uviđa se velika prednost mikroprocesora, te se počinju naglo razvijati. Prvi jači mikroprocesor bio je Intelov 8008 i Motorolin 6800 koji su bili 8-bitni procesori. Razvoj mikroprocesora se do danas nije zaustavio, no osnova njihovog rada je u principu ista. Uz mikroprocesor se može pridodati i matematički koprocesor koji procesoru potpomaže u računskim operacijama. Koprocesor radi paralelno s mikroprocesorom i može preko njemu usmjerenih instrukcija izvršiti vrlo moćne operacije s pokretnim zarezom. Svi noviji procesori imaju integriran koprocesor u kućište s mikroprocesorom. Značajke mikroprocesora: • velika prilagodljivost (univerzalnost) • niska cijena • male dimenzije • velika pouzdanost
3.10.2
Mikrokontroler
Mikrokontroler je elektronički uređaj koji, slično kao i računalo, ima zadaću da zamjeni čovjeka u kontroli dijela proizvodnog procesa ili gotovo cijelog proizvodnog procesa. Iz svakodnevne prakse pri uporabi računala opće namijene tip PC-a već je poznato da je standardni ulaz tipkovnica i miš (eventualno upravljačka palica), dok je standardni izlaz monitor ili pisač. Teško je definirati što će biti standardni ulaz i izlaz mikrokontroleru. Razlog tome je što su mikrokontroleri uglavnom dizajnirani za specifične zadaće vrlo raznolike od slučaja do slučaja. Primjera ima mnogo, od jednostavne regulacije osvjetljenja, alarmnih sustav, pa dao upravljanja robotima u industrijskim pogonima. Ulazi mogu biti vrlo jednostavne izvedbe kao na primjer prekidač u sklopu plovka za nadzor najvećeg ili najnižeg nivoa tekućine u spremniku. Mikrokontroler tada ima za obradu samo dva stanja koje opisuje jedan bit. Složenije je praćenje ako treba pratiti stvarnu razinu nivoa tekućine u spremniku. Tada treba definirati koliko će se nivoa pratiti i tu će se upotrijebiti nekakav potenciometarski sklop koji će mikrokontroleru predati određenu analognu vrijednost koju će ovaj potom pomoću A/D pretvornika obraditi i isporučiti odredištu. Ako je pak povezan s fotoćelijom za brojanje predmeta po načelu prekidanja svjetlosnog snopa radi se o izravnom brojanju impulsa tijekom rada neovisno o vremenu. Dakle, ulazi mogu biti analogne i digitalne prirode i u suštini podatke će isporučivati nekakav mjerni pretvornik (senzor).
25
Izlazi iz mikrokontrolera također mogu biti analogne i digitalne prirode. Analogni izlazi, bilo naponski ili strujni, mogu se elektromehaničkim sklopovima pretvoriti u neku korisnu radnju kao promjena položaja nekog predmeta, povećanje brzine vrtnje motora i slično. Najjednostavniji primjer je lampica upozorenja koja upozorava čovjeka na promjenu ili neispravnost. Složeniji izlaz biti će kada se želi pratiti veličina promjene bilo kao analogni ili digitalni prikaz. Naravno, ulaz i izlaz mikrokontrolera nije isključivo vezan na komunikaciju sa strojem. Uglavnom kontroler ima neki vid komunikacije prema korisniku, na primjer s lampicama ili s digitalnim pokazivačem. No nisu rijetki slučajevi da se za komunikaciju s čovjekom koristi računalo tipa PC. Iz navedenog može se zaključiti da se mikrokontroleri prema načinu izrade i komunikacije s okolišem mogu svrstati u jednu od dvije osnovne kategorije: • Mikrokontroler kao samostalna upravljačka jedinica • Mikrokontroler kao osobita kartica u jednom od utora PC računala U suštini mikrokontroler radi na načelu vrlo bliskom računalu. On je uistinu malo računalo, a složenost mu ovisi o složenosti zadaće koju ima nadzirati.
Sl. 3.23. Pojednostavljeni model mikroprocesora
26
-
Aritmetičko-logička jedinica (izvršna jedinica) ALU izvršava osnovne aritmetičke i logičke operacije (+, -, posmak, komplementiranje, logičke operacije I i ILI)
-
Akumulator A služi za privremeno pohranjivanje jednog od operanada (podataka nad kojima se obavlja aritmetička ili logička operacija). Rezultat operacije se najčešće ponovo pohranjuje u akumulator. Akumulator sudjeluje i u prijenosu podataka između procesora i ostalih komponenti računala, odnosno vanjskog svijeta.
-
Programsko brojilo PC (engl. Program Counter) je registar koji sadrži adresu sljedeće instrukcije koja će se izvesti. Upravljačka jedinica ga automatski inkrementira.
-
Instrukcijski registar IR je registar u kojem je zapisan operacijski kod čije je izvršavanje u tijeku. Operacijski kod je binarni kod kojim je pojedina instrukcija prikazana i zapisana u memoriji računala.
-
DC (engl. Data Counter) je registar u kojem je zapisana adresa memorijske lokacije na kojoj se nalazi operand, pa se taj registar naziva brojilo podataka.
-
Privremeni registar WR (Work Registar) je povezan s jednim od ulaza u aritmetičko-logičku jedinicu i služi za privremeno pohranjivanje jednog od podataka koji sudjeluju u aritmetičkoj ili logičkoj operaciji. Ovaj privremeni registar nije element programskog modela mikroprocesora.
-
Interna sabirnica – skup linija za prijenos podataka koje su izvedene na samom mikroprocesorskom čipu. Omogućava prijenos podataka između pojedinih registara, aritmetičko-logičke jedinice i upravljačke jedinice. Interna sabirnica je preko međuregistara, odnosno sabirničkog sučelja povezana s vanjskom sabirnicom.
-
Upravljačka jedinica – sastoji se od sklopova za dekodiranje instrukcije i upravljačkih sklopova. Upravljački sklopovi u skladu s operacijskim kodom instrukcije koja se izvršava generiraju niz upravljačkih signala. Ti signali upravljaju prijenosom podataka između registara i aritmetičko-logičke jedinice, aktiviraju promjenama vrijednosti programskog brojila, omogućavaju prijenose podataka između procesora i memorije i sl. Sve operacije unutar mikroprocesora sinkroniziraju se signalom vremenskog vođenja (takt). Događaji u mikroprocesoru odvijaju se u točno utvrđenim diskretnim vremenskom trenucima.
Registre u procesoru dijelimo na: a) registri opće namjene (služe za privremenu pohranu podataka koji se obrađuju, odnosno operanada, međurezultata, rezultata, pohranjuju kazala koja upućuju na pojedine memorijske lokacije) b) namjenski registri (programsko brojilo [program counter], kazalo stoga [stack pointer], registar stanja programa [program status word, statusni registar]) c) namjenski registri kojima korisnik ne može pristupiti (IR – registar instrukcija, privremeni registar)
3.10.3
Arhitektura računala
Postoje dvije dominantne arhitekture procesora, a to su: • CISC (engl. Complex Instruction Set Computer) • RISC (engl. Reduced Instruction Set Computer) CISC arhitektura (slika 3.25.) je starija arhitektura od RISC, osmislio ju je Von Neumann 1945. godine. Sustavno je opisao osnovnu građu i djelovanje računala, a na njegovom se modelu temelje i današnja računala (slika 3.24.).
27
Sl. 3.24. Van Neumannov model računala Da bi popravili performanse CISC arhitektura pokušava smanjiti broj instrukcija koje program mora pozivati. Da bi to napravili moraju imati velik broj mikro instrukcija koje pokrivaju velik raspon zadataka. Jedna mikroinstrukcija, kad se dekodira u procesoru može postati nekoliko zadataka (tasks) koje procesor mora izvršiti. Kao posljedica, instrukcije su varijabilne duljine i često zahtjevaju više od jednog takta za njihovo izvršavanje. Kao što vidimo na slici 3.25. CISC arhitektura koristi samo jednu sabirnicu koja služi kao podatkovna i kao adresna sabirnica.
Sl. 3.25. Pojednostavljena shema CISC arhitekture ili Von Neumann-ove arhitekture Najznačajnije karakteristike CISC mikroprocesora: • proširenje instrukcije • kompleksne strojne instrukcije • dekodiranje instrukcija • razni načini adresiranja memorije • relativno malo registara • viši radni takt RISC arhitektura (slika 3.26.) računala nastala je na Sveučilištu Harvard. RISC arhitektura pokušava poboljšati performanse reduciranjem broja taktova potrebnih za izvršavanjem zadatka. Imaju mali set pojednostavljenih instrukcija, izvršavajući cijeli mikro kôd odjednom. Ovo znači da zadatak treba više instrukcija koje su jednake duljine i obično trebaju jedan takt za izvršavanje. Zbog ovoga, RISC sustavi su sposobni procesirati više instrukcija paralelno (pipelining). Procesor radi više instrukcija odjednom, počevši drugu instrukciju prije završetka prve. Ovo značajno povećava propusnost i čini RISC bržim od CISC-a. Vidimo na slici 3.26. da ova koncepcija koristi dvije sabirnice. Time se postiže veći protok informacija. Odvajanjem sabirnica omogućava se da instrukcije mogu biti veće od 8 bit-a. PIC16F84 koristi 14 bit-a za instrukcije što dozvoljava da sve instrukcije budu od jedne riječi i svaka instrukcija se izvršava u jednom ciklusu osim instrukcija skoka i grananja.
28
Sl. 3.26. Pojednostavljena shema RISC arhitekture ili Harvard-ske arhitekture Najznačajnije karakteristike RISC mikroprocesora: • smanjen instrukcijski set • manje kompleksne, jednostavne instrukcije • nije potrebna kontrolna jedinica za dekodiranje instrukcija • maksimalno četiri načina adresiranja memorije • puno registara • manji radni takt
3.10.4
Razlika između mikroprocesora i mikrokontrolera
MEMORIJA
PODATKOVNA SABIRNICA
Sa rastom snage mikroprocesora rasla je i njegova primjenjivost. Zato se na čip veličine mikroprocesora stavlja cijelo računalo – mikrokontroler. Mikrokontroleri su uglavnom dizajnirani za specifične zadatke vrlo raznolike od slučaja do slučaja. U suštini mikrokontroler je malo računalo, a složenost mu ovisi o složenosti zadaće koju mora obavljati. Od namjene mikrokontrolera ovisiti će broj U/I portova, odnosno broj digitalnih i analognih ulaza/izlaza.
Sl. 3.27. Shema mikrokontrolera s njegovim osnovnim elementima
29
Svim mikrokontrolerima su zajednička sljedeća svojstva: • Relativno mali radni takt (reda 10 MHz) • Mali broj jednostavnih instrukcija (red veličine oko 100) • Radna memorija (RAM - reda KB) • Stalna memorija s programskim kodom (u EPROM izvedbi) • Brojači različitih namjena kao sat, brojač impulsa, BCD brojač... • Brojač za nadzor ispravnog rada – WDT (Watch Dog Timer) • Ulazno/izlazni portovi za prihvat i slanje podataka • A/D i D/A pretvornici razlučivosti prema namjeni (uobičajeni 8-bit) • Širok raspon napona napajanja (2V – 6V)
3.10.5
Memorijska jedinica
Dio mikrokontrolera koji je zadužen za čuvanje podataka. Memorija mora biti u mogućnosti da čita i zapisuje podatke. Zato postoji linija Č/P, ako je Č/P = 1 onda se vrši čitanje u suprotnom vršimo upis.
Sl. 3.28. Model memorijske jedinice
3.10.6
Adresno polje mikroračunala
• Adresno polje – sve moguće lokacije koje neka procesorska jedinica može adresirati (ne moraju biti iskorištene baš sve adrese) • Sa prvi bajt može se adresirati 256 lokacija, dok se sa dva bajta može adresirati i do 64 K lokacija • Moćno mikroračunalo mora imati različite načine adresiranja Adresiranje memorije vršimo na više načina: • neposredno – naredba sadrži sam podatak s kojim se radi. Podatak može biti 8 ili 16 bitni. Za dohvat 2 bajta podatka dovoljna su tri zahvata u memoriju. To je vrlo brz način adresiranja.
30
• direktno (izravno) – prvi bajt je operacijski kod koji govori koja se operacija radi sa podatkom, a drugi i treći bajt naredbe pokazuju lokaciju memorije gdje se nalazi podatak koji se želi obraditi. Ovakvim načinom adresiranja može se doduše adresirati bilo koja lokacija u adresnom polju, ali za dobivanje samo adrese operanda potrebna su dva zahvata u memoriju, to je vrlo spor način adresiranja. • indirektno (posredno) – drugi i treći bajt naredbe pokazuju adresu lokacije(pointera) gdje se nalazi adresa podatka koji se obrađuje. To je vrlo neekonomično adresiranje, jer za dohvat podatka treba puno zahvata u memoriju. Prednost je da se stvarna adresa operanda može programski mjenjati, mjenjanjem sadržaja pointera tijekom izvođenja programa bez potrebe mijenjanja glavnog programa. • segmentno – zasniva se na činjenici da se programi većinom vrte u jednom dijelu (segmentu) memorije. MMU (jedinica za upravljanje memorijom) - zadatak Memory Management Unit je da podjeli memoriju na više segmenata. Tako podijeljena memorija se adresira segmentno.
3.10.7
CPU (Central Processing Unit)
Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske naredbe i na osnovu njih obrađuje podatke. Naziv ''mikro’’ koristi se zbog malih dimenzija. Sadrži do nekoliko milijuna tranzistora ukomponiranih na silicijskoj pločici upakiranoj u plastično kućište. Vrijeme izvođenja instrukcija je reda mikrosekunde, a broj instrukcija i veličina binarnog podatka osnovni su parametri koji definiraju kvalitetu mikroprocesora. Mikroprocesori koji se u računalnim sustavima opće namjene koriste dizajnirani su za rad s podacima duljine 4, 8, 16, 32 i 64 bit-a.
Sl. 3.29. Primjer centralne procesorske jedinice sa tri registra Na slici 3.29. prikazan je primjer centralne procesorske jedinice sa tri registra, registri su dakle memorijske lokacije čija je uloga da pomognu pri obavljanju raznih matematičkih operacija ili bilo kojih drugih operacija sa podacima gdje god da se oni nalazili. Imamo dvije nezavisne cjeline (memoriju i CPU) koje nisu međusobno povezane , čime je spriječena bilo kakva razmijena podataka. Ako naprimjer želimo zbrojiti sadržaj dvije lokacije iz memorije i njihov rezultat ponovo vratiti u memoriju potrebna nam je veza između memorije i CPU, tj. moramo imati neki ″put″ preko kojeg podaci idu iz jednog bloka u drugi, a ti ″putevi″ se zovu sabirnice.
31
3.10.8
Sabirnica
Prijenos podataka između sklopova unutar mikroprocesora i unutar računala vrlo je značajan dio posla, a obavlja se preko SABIRNICA (BUS), višežilnim prenosnim putevima između pojedinih sklopova. Broj vodova sabirnice ovisi o broju bit-a koji opisuju podatke koje je potrebno prenjeti. U suštini prijenos podataka je paralelan. Dakle postoje dva osnovna sustava sabirnica: 1.) Unutrašnje sabirnice - veze unutar mikroprocesora. 2.) Vanjske sabirnice - veze u računalu izvan mikroprocesora. Međusobno su odvojene međusklopovima jer se često promet na njima ne odvija istom brzinom. Razmjena podataka u mikroprocesoru obavlja se višestruko brže nego između sklopova računala, te ih je stoga potrebno odvojiti. O prijenosu podataka između unutrašnje i vanjske sabirnice brinu se posebni upravljači (controller). Unutarnja i vanjska komunikacija odvija se preko tri odvojene sabirnice: 1.) Podatkovne sabirnice – dvosmjerna 2.) Adresne sabirnice – jednosmjerna 3.) Upravljačke sabirnice – jednosmjerna Naravno, komunikacija posredstvom triju sabirnica ubrzava sustav. Podatku, koji je na sabirnici podataka, preko adresne sabirnice određuje se mjesto na koje će se uputiti, a upravljačka sabirnica će prijenos odobriti.
MEMORIJSKA LOKACIJA 0 MEMORIJSKA LOKACIJA 1 MEMORIJSKA LOKACIJA 2
REGISTAR 1 REGISTAR 2 REGISTAR 3
MEMORIJA
PODACI
ADRESE
MEMORIJSKA LOKACIJA n
Kontrolne linije
Č/P
CPU
Sl. 3.30. Primjer komunikacije memorije i centralne procesorske jedinice pomoću sabirnica Na slici 3.30. prikazana je komunikacija centralne procesorske jedinice sa memorijom. Memorija se sastoji od 16 memorijskih lokacija koja sa centalnom procesorskom jedinicom komunicira preko podatkovne sabirnice (koja je dvosmjerna). Podatkovna sabirnica sastoji se od onoliko linija koliko memorije želimo adresirati, a služi za prijenos adrese od CPU do memorije, dok adresna sabirnica (koja je jednosmjerna) povezuje sve blokove unutar mikrokontrolera.
32
3.10.9
U/I jedinica
Ove memorijske lokacije se nazivaju portovi. Portovi mogu biti ulazni, izlazni ili dvosmjerni. Kod rada s portovima potrebno je prvo odabrati port s kojim se radi.
ULAZNI REGISTAR
IZLAZNI REGISTAR
PODACI
PODACI
PODACI
U/I jedinica Sl. 3.31. Primjer U/I jedinice
3.10.10 Serijska komunikacija Ovime smo mikrokontroleru omogućili povezivanje na daljinu. Paralelni prijenos nije pogodan za velike udaljenosti zbog većeg broja vodiča. Da bi prijenos funkcionirao treba odrediti skup pravila po kojima će se odvijati, skup pravila po kojem se vrši prijenos podataka nazivamo protokol. Serijski prijenos podataka dijelimo na sinkroni i asinkroni. Sinkroni prijenos između dva uređaja radi pod zajedničkim taktom. Asinkroni prijenos koristimo kad ne znamo frekvencijski takt drugog uređaja, ovu vrstu prijenosa koristimo za slanje manjih podataka.
Sl. 3.32. Serijska jedinica
33
3.10.11 Slobodni brojač To je registar čija se vrijednost uvećava u pravilnim vremenskim razmacima. Omogućava nam mjerenje vremena.
Sl. 3.33. Slobodni brojač
3.10.12 Sigurnosni brojač (Watchdog timer) Program u njega upisuje 0 svaki put kad kada se pravilno izvrši. Ako signal izostane, neće doći do upisivanja 0 (znači da se mikrokontroler vrti u beskonačnoj petlji ), vrijednost brojača će se povećavati do svoje maksimalne vrijednosti kada će sam resetirati mikrokontroler.
Sl. 3.34. Sigurnosni brojač Na taj način onemogućava se duži nepravilan rad mikrokontrolera bez obzira na uzrok neispravnosti. Ova metoda višestruko povećava sigurnost sustava kojeg mikrokontroler nadzire/upravlja.
34
4
Mikrokontroler PIC 16F84
4.1
Osnovne karakteristike mikrokontrolera PIC 16F84
4.1.1
Karakteristike mikrokontrolera
• samo 35 jednorječnih instrukcija • sve su instrukcije jednociklusne, osim instrukcija grananja programa i programskog skoka • radni takt; 4MHz, trajanje instrukcijskog ciklusa: 1µs (4 takta vanjskog oscilatora za jednu instrukciju) – mogućnost nabave mikrokontrolera koji podnose 10 MHz i 20 MHz vanjski takt • 14 b veličina riječi instrukcijskog koda • 8 b podatkovna sabirnica • 15 registara specijalne namjene • hardverski stog dubok osam nivoa • tri načina adresiranja: -direktno -indirektno -relativno • 1k programske memorije izvedene u Flash tehnologiji • 68 B podatkovne RAM memorije • 64 B podatkovne EEPROM memorije • četiri izvora prekida: - vanjski na nožici RB0/INT - preljev timer-a TMR0 - prekid pri promjeni na RB4, RB5, RB6 i RB7 nožicama porta B - prekid nakon završetka procesa upisivanja podataka u EEPROM memoriju • oko 1 000 piši/briši ciklusa može podnijeti Flash programska memorija • oko 10 000 000 piši/briši ciklusa može podnijeti EEPROM podatkovna memorija • postojanost podataka u EEPROM podatkovnoj memoriji je više od 40 godina
4.1.2
Karakteristike ulazno/izlaznih sklopova
• 13 ulazno/izlaznih pojedinačno upravljivih nožica • velika struja U/I sklopova za napajanje LED dioda: - maksimalna ulazna struja po nožici je 25mA - maksimalna izlazna struja po nožici je 20mA • 8-bit-ni timer/brojač sa 8-bit-nim programibilnim djeliteljem frekfencije
4.1.3
Specijalne karakteristike mikrokontrolera
• serijsko In-System programiranje – preko dvije nožice • Power-on Reset (reset pri uključenju) • Power-up Timer (određeno kašnjenje nakon uključenja) • Oscilatorski Start-up Timer (određeno kašnjenje od stabilizacije radne frekfencije) • Watchdog Timer sa vlastitim integriranim RC oscilatorom za neovisan rad 35
• zaštita koda • SLEEP način rada ( za štednju energije) • odabir vrste oscilatora
4.1.4
Karakteristike CMOS Flash/EEPROM tehnologije
• mala potrošnja, velika brzina • radni napon od 2.0V do 6.0V • mala potrošnja energije:
4.2
-
< 2 mA pri naponu napajanju od 5 V i radnom taktu od 4 MHz
-
15 µA pri naponu napajanju od 2 V i radnom taktu od 32 kHz
-
< 1 µA u standby nčinu rada pri naponu napajanju od 2 V
Kratak opis mikrokontrolera
PIC 16F84 je 8-bit-ni mikrokontroler niske cijene, izveden CMOS tehnologijom. Izveden je u RISC (Reduced Instruction Set Computer) arhitekturi. To znači da koristi dvije sabirnice, podatkovnu (8-bitna) i instukcijsku (14-bit-na). PIC 16F84 ima osam nivoa dubok stog i više prekidnih izvora, što unutarnjih, što vanjskih. Istovremeno izvođenje i prihvaćenje slijedeće instrukcije omogućuje da se svaka instrukcija izvrši u jednom instrukcijskom ciklusu, osim instrukcija skoka i poziva potprograma (za koje su potrebna dva instrukcijska ciklusa). Također obično koriste 2:1 sažimanje koda i 4:1 veću brzinu rada (na 20 MHz) od drugih 8-bit-nih mikrokontrolera iste klase. SLEEP način rada omogućuje štednju energije. Iz takvog načina rada mikrokontroler se može vratiti u aktivno stanje putem prekida, vanjskih ili unutarnjih, i/ili resetom. Te ima Watchdog timer sa vlastitim RC oscilatorom koji štiti od softverskog ″zamrzavanja″ ili slučajne beskonačne petlje. Incircuit reprogramibilnost omogućuje optimiranje programskog koda unutar sklopa, bez odvajanja mikrokontrolera od gotovog sklopa. To je vrlo korisno u razvoju sklopova gdje mikrokontroler nije fizički dostupan, a prototip zahtjeva optimizaciju.
MEM. ZA PODATKE RAM
SLOBODNI BROJAČ
MEM. ZA PODATKE EEPROM
CPU
PORT A
PORT B
Sl. 4.1. Blok shema mikrokontrolera PIC 16F84
36
4.3
Raspored nožica
Sl. 4.2. Raspored nožica mikrokontrolera PIC 16F84 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
4.4
RA2 – druga nožica porta A RA3 – treća nožica porta A RA4/TOCKI – četvrta nožica porta A, može biti i ulaz takta za timer/brojač MCLR – reset ulaz i Vpp napon programiranja mikrokontrolera VSS – napajanje (″masa″) RB0/INT – nulti pin porta B i interrupt ulaz RB1 – prva nožica porta B RB2 – druga nožica porta B RB3 – treća nožica porta B RB4 – četvrta nožica porta B RB5 – peta nožica porta B RB6 – šesta nožica porta B i ulaz takta u programskom modu RB7 – sedma nožica porta B i linija za ulaz podataka u programskom modu Vdd – pozitivno napajanje OSC1 – nožica koja služi za spajanje vanjskog oscilatora OSC2 – nožica koja služi za spajanje vanjskog kristalnog oscilatora a ako imamo na OSC1 RC osvilator tada služi kao djelitelj frekvencije OSC1 sa 4 RA0 – nulta nožica porta A RA1 – prva nožica porta A
Generatori takta
PIC 16F84 može raditi sa dvije različite konfiguracije oscilatora. A to su kristalni oscilator (XT) i RC oscilator, radnog takta 4 MHz, 10 MHz ili 20 MHz ovisno o tipu mikrokontrolera. Slika 4.5. prikazuje oblik signala dobiven iz oscilatora u trenutku uključenja, oscilatoru treba neko vrijeme ∆T da se stabilizira na određenu frekvenciju.
37
C2 OSCI 1 XTAL OSCI 2 C1
Sl. 4.3. Spajanje kristalnog oscilatora
Vdd
R
OSCI 1
C
OSCI 2
Sl. 4.4. Spajanje RC oscilatora
U +5
T
t
Sl. 4.5. Oblik signala pri uključenju oscilatora
38
4.5
Takt / instrukcijski ciklus
Takt doveden s nožice OSC1 u mikrokontroleru se dijeli na četiri nepreklapajuća takta koje nazivamo Q1, Q2, Q3 i Q4 koji skupa čine jedan instrukcijski ciklus npr. TCY1. Instrukcijske cikluse dijelimo: • Q1 – pozivanje instrukcije iz programske memorije • Q2 – dekodiranje naredbe iz predhodnog instrukcijskog ciklusa • Q3 – izvođenje naredbe iz predhodnog instrukcijskog ciklusa • Q4 – spremanje instrukcije pozvane u Q1 u instrukcijski registar Uzmimo za primjer instrukcijski ciklus TCY2. Na Q1 takt u instrukcijskom ciklusu TCY2 programski brojač (PC) se uvećava za 1 te poziva instrukciju iz programske memorije. U sljedeća dva takta Q2 i Q3 instrukcijskog ciklusa TCY2 instrukcija koja je bila pozvana i spremljena u instrukcijski registar u prijašnjem TCY1 instrukcijskom ciklusu se dekodira i izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa TCY2 se instrukcija pozvana na Q1 sprema u instrukcijski registar.
TCY1
TCY2
TCY3
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1 Q1 Q2 Q3 Q4 PC Sl. 4.6. Vremenski dijagram izvršavanja instrukcije
4.6
Obrada instrukcija
Ciklusi povezivanja i izvršavanja instrukcija su tako povezani da je za pozivanje potreban jedan instrukcijski ciklus a za dešifriranje i izvršavanje još jedan. No zbog protočne obrade, svaka instrukcija se efektivno izvršava u jednom ciklusu.
39
4.7
Reset
Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se mikrokontroler ''smrzne'' ili smo ga tek uključili treba ga resetirati. Da bi spriječili slučajno dovođenje ''0'' na MCLR nožicu, potrebno ju je preko otpornika spojiti na pozitivan pol napajanja Vdd, slika 4.7.
RA 2
RA 3
Vdd
R
RA 4
MCLR
Sl. 4.7. PIC 16F84 ima više vrsta resetiranja: 1. Resetiranje pri dovođenju napajanja (Power-on Reset). Ovaj reset traje isto koliko treba oscilatoru da stabilizira frekvenciju (∆T), slika 4.5. odnosno 72 ms 2. Dovođenje ″0″ na MCLR nožicu 3. Reset za vrijeme ″Sleep″ načina rada 4. Reset pri prekoračenju Watchdog timera
4.7.1
Reset kod pada napona napajanja (Reset on Brown-Out)
Ovaj impuls generira sam mikrokontroler ako napon napajanja padne ispod dozvoljene granice koja je potrebna za normalan rad mikrokontrolera, te ga ″drži″ 72 ms u resetu koliko je potrebno da se frekvencija stabilizira.
U 1.8 V
T t Sl. 4.8. Reset pri padu napona
40
4.8
Ulazno / izlazni sklopovi
PIC 16F84 ima dva porta, PORTA i PORTB. Portom nazivamo grupu ulazno/izlaznih nožica (pinova) kojima možemo pristupati istovremeno. Fizički, port je registar koji je povezan s pinovima mikrokontrolera. Svi pinovi portova se mogu definirati kao ulazni ili izlazni, prema potrebama sustava. Definiraju se upisivanjem nule i jedinice u registru TRIS, upisivanjem ″1″ pin postaje ulazni a upisivanjem ″0″ izlazni. Pošto imamo dva porta imamo i dva TRIS registra, TRISA i TRISB. PORTA i PORTB se nalaze u banci 0 a TRISA i TRISB u banci 1.
4.8.1
PORTA i TRISA
Ovaj port ima pet pridruženih pinova, od RA0 do RA4. Pin RA4 može biti samo ulazni, jer se na tom pinu nalazi i ulaz takta za brojač TMR0. Bitom T0CS u registru OPTION se bira funkcija (ulaz takta ili standardni ulaz porta) ovog pina, točnije rečeno bira se izvor takta (vanjski ili nutarnji) brojača TMR0. Primjer konfiguriranja porta:
bsf movlw movwf bcf
STATUS, RP0 b'11111100' TRISA STATUS, RP0
;bank1 ;definiranje ulaznih i izlaznih pinova ;upis u TRISA registar ;bank0
U primjeru su pinovi RA0 i RA1 proglašeni kao izlazni a RA2, RA3 i RA4 ulazni.
PORTA
RA2 RA3 1
TRISA
0
Sl. 4.9. PORTA koristi 5 bitova
4.8.2
PORTB i TRISB
PORTB ima 8 pridruženih pinova, od RB0 do RB7. Svaki pin ima pull-up tranzistor i njime se definira linija na logičku jedinicu. Svim tranzistorima se upravlja pomoću samo jednog bita, RBPU bitom OPTION registra. Četiri pina ovog porta mogu izazvati prekid RB4: RB7 i to samo ako su konfigurirani kao ulazni. Primjer konfiguriranja porta:
bsf movlw movwf bcf
STATUS, RP0 0x0F TRISB STATUS, RP0
;bank1 ;definiranje ulaznih i izlaznih pinova ;upis u TRISB registar ;bank0 41
bsf bsf bsf bsf
PORTB, 4 PORTB, 5 PORTB, 6 PORTB, 7
;PORTB < 7 : 4 > = 0
Primjer pokazuje kako su pinovi RB0, RB1, RB2 i RB3 proglašeni za ulazne, a pinovi RB4, RB5, RB6 i RB7 za izlazne, te nakon čega su izlazni pinovi postavljeni u jedinicu.
PORTB
RB1 RB2 1
RB3
TRISB
0
Sl. 4.10. PORTB koristi 8 bitova
4.9
Organizacija memorije
PIC16F84 ima dva odvojena memorijska bloka, jedan za podatke i drugi za program. Blok za podatke čini EEPROM memorija, GPR i SFR registri u RAM memoriji a programski blok čini Flash memorija. Programska memorija je izrađena u Flash tehnologiji što omogućuje programiranje mikrokontrolera više puta pa čak i kada bude ugrađen u sustav. Ima 1024 lokacije širine 14 bit-a. Nulta lokacija je rezervirana za reset a četvrta lokacija za prekid (interrupt). Memorija za podatke se sastoji od EEPROM i RAM memorije. EEPROM memorija ima 64 lokacije širine 8 bit-a (sl. 4.11) kojima se pristupa indirektno preko EEADR i EEDATA registara, sadržaj ove memorije se ne gubi pri prekidu napajanja. RAM memorija ima 68 osmobitnih lokacija koje zauzimaju prostor u memorijskoj mapi od 0x0C do 0x4F lokacije. Lokacije RAM memorije se nazivaju GPR (General Purpose Registrers) registri. SFR (Special Function Registers) registri zauzimaju prvih 12 lokacija u banci 0 i banci 1. To su registri specijalne namjene i oni su direktno vezani za rad mikrokontrolera.
42
Sl. 4.11. Organizacija memorije Podatkovna memorija je još podijeljena na dvije banke, BANK0 i BANK1. Banke se biraju preko RP0 bit-a u Status registru. Primjer:
Bcf
STATUS, RP0 - odabrana je banka 0
Bsf
STATUS, RP0 - odabrana je banka 1
4.9.1
Programski brojač (Program Counter)
Programski brojač (PC) je 13 bit-ni registar koji sadrži adresu instrukcije koja se izvršava. Fizički je realiziran pomoću 5 bit-nog registra PCLATH koji predstavlja 5 najviših bit-ova adrese i 8 bit-nog registra PCL koji predstavlja preostalih 8 bit-a adrese.
43
4.9.2
Stog (Stack)
PIC 16F84 ima 13-bitni hardverski stog dubok 8 nivoa. Memorijski prostor stoga nije dio ni programske ni podatkovne memorije, a pokazivač stoga nije moguće čitati i u njega upisivati vrijednosti. Njegova osnovna zadaća je da sačuva vrijednost PC-a nakon što se iz glavnog programa skoči na adresu potprograma. Da bi se program znao vratiti odakle je počeo mora sa stoga vratiti vrijednost PC-a. Sadržaj sa stoga vraća se u programsko brojilo kod izvršavanja instrukcija RETURN, RETLW ili RETFIE, koje se izvršavaju na kraju potprograma.
4.9.3
Status registar
U status registru se upisuju aritmetički status ALU (C, DC, Z), reset status (TO, PD) i bit-ovi za odabir memorijske banke (IRP, RP1, RP0). Ovaj registar može biti odredište za bilo koju instrukciju s bilo kojim drugim registrom. Ako je status registar odredište instrukcije koja utječe na Z, DC ili C bit tada je upis u ova tri bit-a je onemogućen. R/W-0
R/W-0
R/W-0
R-1
R-1
R/W-x
R/W-x
R/W-x
IRP
RP1
RP0
TO
PD
Z
DC
C
bit 7 R – bit koji se može očitati W – bit koji se može upisati
bit 0 U – neiskorišten bit, čita se kao «0» n – vrijednost nakon reseta
C (Carry) – bit na koji utječu operacije zbrajanja i oduzimanja, bit je setiran kada se oduzima manja vrijednost od veće 1 = pojavio se prijenos najvišeg bit-a rezultata 0 = nema prijenosa najvišeg bit-a rezultata DC (Digit Carry) – isto kao i Carry samo ovaj bit predstavlja prijenos sa četvrtog mjesta 1 = pojavio se prijenos na četvrtom mjestu 0 = nema prijenosa Z (Zero) – bit je setiran kada je rezultat aritmetičko logičke operacije nula 1 = rezultat je nula 0 = rezultat nije nula PD (Power-down) – bit je setiran nakon uključenja napajanja i svakog regularnog reseta 1 = nakon uključenja napajanja 0 = izvršenjem SLEEP instrukcije
TO (Time-out) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i SLEEP Instrukcije, a resetira kad dođe do prekoračenja sigurnosnog brojača 1 = nije bilo prekoračenja sigurnosnog brojača 0 = došlo je do prekoračenja sigurnosnog brojača RP1, RP0 (Register Bank Select) – bit-ovi za izbor memorijske banke, RP1 je uvijek «0» 01 = BANK 0 00 = BANK 1 IRP (Register Bank Select) – osmi bit za indirektno adresiranje RAM-a, ne koristi se kod PIC 16F84 i ne smije biti setiran 0 = banka 2 i 3 1 = banka 0 i 1
44
4.9.4
Direktno adresiranje
Vrši se preko 9 bit-ne adrese koja se dobije povezivanjem sedmog bit-a direktne adrese iz instrukcije i dva bit-a iz STATUS registra (RP1, RP0).
IRP1
7
IRP0
0
+
odabir banke
00
01
00
odabir lokacije
7F BANK 0
BANK 1
Sl. 4.12 Direktno adresiranje
4.9.5
Indirektno adresiranje
Ovaj način adresiranja ne uzima adresu iz instrukcije, već je radi pomoću IRP bit-a STATUS registra i FSR registra. Adresiranoj lokaciji se pristupa preko INDF registra koji zapravo nije fizički registar već se njegova adresa nalazi u FSR registru, FSR je pokazivač. Npr. ako memorijska lokacija 05h sadrži vrijednost 10h i ako memorijska lokacija 06h sadrži vrijednost 0Ah, upišemo li vrijednost 05h u FSR registar, INDF registar vratit će vrijednost 10h. Inkrementiranjem FSR registra, INDF registar vratit će vrijednost 0Ah.
Sl. 4.13. Indirektno adresiranje
4.9.6
Relativno adresiranje
Adresa operanda u postupku relativnog adresiranja ovisi o smještaju same naredbe unutar memorije. Oblik naredbe koja koristi relativno adresiranje prikazano je na slici 4.14. Adresa operanda izračuna se tako, da se adresi, na kojoj se nalazi kod postupka, pribroji pomak. Naziv relativno adresiranje potječe upravo od činjenice, da je adresa operanda određena relativno prema položaju, odnosno smještzaju same naredbe. Relativni pomak računa se kao dvojni komplement, a to znači da on može biti pozitivan i negativan.Budući da na raspolaganju stoji 8 bitova, to je moguće adresirati bilo koju memorijsku lokaciju, udaljenu +127 ili -128 memorijskih lokacija od lokacija same naredbe.
45
Naredbe koje koriste relativno adresiranje su dužine dviju riječi, što ih čini prikladnim za upotrebu. Mana relativnog adresiranja je u relativno kratkom dometu adrese (+127, -128 memorijskih lokacija), te u potrebi za izračunavanjem relativnog pomaka prilikom pisanja programa. Formula po kojoj se izračunava stvarna adresa glasi: Stvarna adresa (operanda ili skoka) = adresa naredbe+relativni pomak.
Sl. 4.14. Oblik naredbe Relativnog adresiranja
4.10
Prekidi (Interrupts)
Prekid je mehanizam mikrokontrolera koji omogućava da se na neke događaje odgovori u trenutku kada se oni dese, bez obzira što mikrokontroler radi u tom trenutku. Svaki prekid mijenja tok izvršavanja programa, prekida ga, te nakon izvršenja prekidnog potprograma nastavlja na istom mjestu (Slika 4.15). Kontrolni registar prekida naziva se INTCON i nalazi se na adresi 0Bh. Njegova uloga je da omogući ili zabrani prekide, a u slučaju da su zabranjeni, registrira pojedinačne zahtjeve prekida preko svojih bitova.
TOK IZVRŠAVANJA PROGRAMA
Vdd
PROGRAM U KOM SE OBRAĐUJE PREKID
R T
RB0/INT
NASTAVAK NORMALNOG TOKA IZVRŠAVANJA PROGRAMA
Sl. 4.15. Prekid glavnog programa PIC 16F84 ima četiri vrste prekida: 1. 2. 3. 4.
Vanjski na nožici RB0/INT Preljev timer-a TMR0 Prekid pri promjeni na RB4, RB5, RB6 i RB7 nožicama porta B Prekid nakon završetka procesa upisivanja podataka u EEPROM memoriju
46
GIE bit može zabraniti ili omogućiti sve prekide odjednom. To je vrlo korisno kod pisanja programa jer omogućuje da se na neko vrijeme zabrane svi prekidi. Prekidi koji su ostali ne riješeni obrađuju se nakon ponovnog setiranja GIE bit-a. Ako se obradi bilo koji od ovih prekida mora se resetirati bit koji je izazvao prekid jer će se u suprotnom prilikom povratka u glavni program prekid ponovno obraditi.
GIE
EEIE
EEIF
TOIE
TOIF
RBIE
RBIF
INTE
INTF
INTERUPT
Sl. 4.16. Shema prekida Na slici 4.16. prikazana je opća shema prekida pomoću sklopki. Pomoću GIE sklopke omogućujemo bilo koji od četiri moguća prekida. Koristeći sklopke EEIE, TOIE, RBIF, INTE određujemo vrste prekida, dok nam sklopke sa desne strane EEIF, TOIF, RBIF, INTF pokazuju koji se prekid dogodio nekom trenutku.
4.10.1
INTCON registar
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-x
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
bit 7 R – bit koji se može očitati W – bit koji se može upisati
bit 0 U – neiskorišten bit, čita se kao «0» n – vrijednost nakon reseta
RBIF (RB Port Change Interrupt Flag) – bit koji nam govori o promjeni na 4,5,6, ili 7-om pinu porta B 1 = najmanje jedan pin je promijenio stanje 0 = nije se desila promjena ni na jednom pinu INTF (INT External Interrupt Flag) – bit koji nam govori da e došlo do vanjskog prekida 1 = prekid se desio 0 = prekid se nije desio T0IF (TMR0 Overflow Interrupt Flag) – bit koji nam govori da je došlo do prekoračenja TMR0 brojača 1 = došlo je do prekoračenja 0 = nije došlo do prekoračenja RBIE (RB Port Change Interrupt Enable) – bit koji omogućava pojavu prekida na promjenu stanja 4, 5, 6 ili 7-og pina porta B 1 = omogućena pojava prekida 0 = onemogućena pojava prekida INTE (INT External Interrupt Enable) – bit koji omogućuje vanjski prekid sa pina RB0/INT 1 = prekid je omogućen 0 = prekid je onemogućen 47
T0IE (TMR0 Overflow Interrupt Enable) – bit koji omogućuje prekid prilikom prekoračenja brojača TMR0 1 = prekid je omogućen 0 = prekid je onemogućen EEIE (EEPROM Write Complete Interrupt Enable) – bit koji omogućava prekid nakon završetka upisa u EEPROM memoriju 1 = prekid je omogućen 0 = prekid je onemogućen GIE (Global Interrupt Enable) – bit koji dozvoljava ili zabranjuje sve prekide 1 = svi prekidi su omogućeni 0 = svi prekidi su onemogućeni
4.11
Podatkovna EEPROM memorija
PIC 16F84 ima 64 bayt-a EEPROM memorijskih lokacija na adresama od 00h do 63h. Najvažnija osobina ove memorije je da ne gubi sadržaj prilikom nestanka napona napajanja. Stoga ova memorija služi za čuvanje parametaranekog procesa ili nekih važnih promjenjivih podataka. Iz EEPROM memorije čitamo podatak tako da setiramo RD bit koji inicira prijenos podataka s adrese koja se nalazi u registru EEADR u EEDATA registar. Za čitanje podatka nije potrebno neko vrijeme kao za upis pa se taj podatak može koristiti već u sljedećoj instrukciji. Primjer djela programa koji vrši čitanje podataka iz EEPROM-a.
Bcf Movlw Movwf Bsf Bsf Bcf Movf
STATUS,RP0 0x00 EEADR STATUS,RP0 EECON,RD STATUS,RP0 EEDATA,W
;bank0 jer je EEADR na 09h ;adresa lokacije koja se cita ;adresa se prebacuje u EEADR ;bank1 jer je EECON1 na 88h ;citanje iz EEPROM-a ;bank0 jer je EEDATA na 08h ;W Å EEDATA
Da bi upisali podatak u EEPROM memoriju treba prvo upisati adresu željene memorijske lokacije u EEADR registar a podatak u EEDATA registar. Nakon toga setiramo WR bit koji pokreće upisivanje podatka na željenu lokaciju. Nakon upisa WR bit će biti resetiran, a EEIF setiran, što se može iskoristiti za obradu prekida. Vrijednosti 55h i AAh su prvi i drugi ključ koji onemogućuju da dođe do slučajnog upisa u EEPROM. Te dvije vrijednosti se upisuju u EECON2, koji služi samo za prihvaćanje ove dvije vrijednosti i time spriječi slučajan upis. Programske linije u primjeru označene s 1, 2, 3, 4 i 5 moraju biti izvršene tim redoslijedom i u pravilnim vremenskim razmacima, tako da je vrlo važno onemogućiti prekide za vrijeme izvršavanja tih instrukcija. Nakon upisa prekidi se mogu omogućiti. Primjer dijela programa koji vrši upis podatka 0xEE u prvu lokaciju EEPROM memorije.
1. 2. 3. 4. 5.
Bcf Movlw Movwf Movlw Movwf Bsf Bcf Bsf movlw movwf movlw movwf bsf bsf
STATUS,RP0 0x00 EEADR 0Xee EEDATA STATUS,RP0 INTCON,GIE EECON1,WREN 55h EECON2 AAh EECON2 EECON1,WR INTCON,GIE
;bank0 jer je EEADR na 09h ;adresa lokacije u koju se pise ;adresa se prebacuje u EEADR ;upisujemo vrijednost 0xEE ;podatak ide u EEDATA registar ;bank1 jer je EEADR na 09h ;svi prekidi se onemogucuju ;omogućuje se upis ;prvi kljuc 55h Æ EECON2 ;drugi kljuc AAh Æ EECON2 ;inicira upis ;prekidi se omogucuju 48
EEPROM memoriji se pristupa preko SFR registara, a to su: EEDAT A – sadrži podatak koji je pročitan ili ga treba upisati EEADR – sadrži adresu EEPROM lokacije kojoj se pristupa EECON1 – sadrži kontrolne bit-ove EECON2 – služi da zaštiti EEPROM od slučajnog upisa
4.11.1
EECON1 registar
Bit-ovi 5, 6 i 7 se ne koriste i pri čitanju su uvijek nule. U-0
U-0
U-0
R/W-1
EETE
R/W-1
R/W-x
WRERR WREN
R/S-0
R/S-x
WR
RD
bit 7
bit 0 R – bit koji se može očitati W – bit koji se može upisati
U – neiskorišten bit, čita se kao «0» n – vrijednost nakon reseta
RD (Read Control) – bit koji inicira prijenos podataka s adrese definirane EEADR u EEDATA registar 1 = inicira čitanje 0 = ne inicira čitanje WR (Write Control) – bit koji inicira upis podataka iz EEDATA registra na adresu koja se nalazi u EEADR registru 1 = inicira upis 0 = ne inicira upis WREN (EEPROM Write Enable) – bit koji omogućuje upis u EEPROM memoriju 1 = upis je dozvoljen 0 = upis nije dozvoljen WRERR (EEPROM Error Flag) – bit koji nam govori da je došlo do greške prilikom upisa u EEPROM 1 = došlo je do greške 0 = do greške nije došlo EEIF (EEPROM Write Operation Interrupt Flag) – bit koji nam govori da je upis u EEPROM završen 1 = upis je završen 0 = upis nije počeo ili nije završen
4.12
Slobodni brojač TMR0
Fizički brojač je registar čija se vrijednost stalno uvećava za jedan a kad dođe do 255 kreće sa brojanjem ponovno od nule. PIC16F84 ima 8 bit-ni brojač, broj bitova određuje do koliko će brojač 8 brojati (2 = 256). Brojač nam omogućuje da mjerimo vrijeme, ako znamo vrijeme koje je potrebno brojaču da napravi puni krug od 0 do 256 tada lako možemo izračunati vrijeme koje je proteklo za bilo koje stanje brojača. Na slici 2.2. je prikazana pojednostavljena shema odnosa preskalera i brojača. Nakon svakog prelaska brojača s 255 na 0 setira se bit T0IF u INTCON registru. Ako je dozvoljen prekid, ovo se može iskoristiti za generiranje prekida. T0IF bit mora programer resetirat da bi omogućio generiranje novog prekida. Stanje brojača može se uvećavati korištenjem unutarnjeg takta ili vanjskog koji se uzima s nožice RA4/TOCKI. Izvor takta se bira pomoću bit-a T0CS u OPTION registru. Izaberemo li vanjski takt tada je moguće birati i ivicu signala (rastuća ili padajuća) na koju će brojač uvećavati svoju vrijednost.
49
Sigurnosni brojač (Wachdog timer) čuva mikrokontroler od ″smrzavanja″. Ako dođe do nepravilnog rada mikrokontrolera, sigurnosni brojač ga nakon nekog vremena resetira, a program se počinje izvršavati iz početka. Da bi spriječili resetiranje za vrijeme normalnog toka programa moramo upisati nulu u WDT registar (instrukcijom CLRWDT) svaki put kad se približi svom prekoračenju. Preskaler je naziv za dio mikrokontrolera kojim se dijeli instrukcijski ciklus prije nego dođe do logike koja uvećava stanje brojača. Broj kojim se dijeli instrukcijski ciklus se definira pomoću prva tri bit-a u OPTION registru, najveći djelitelj je 256, čime se omogućuje mjerenje duljih vremenskih perioda. Preskaler se može pridružiti brojaču TMR0 ili sigurnosnom brojaču, dodjeljuje se pomoću bita PSA u OPTION registru. Kada je preskaler dodijeljen TMR0 brojaču sve instrukcije upisa u TMR0 registar (CLRF TMR0, MOVWF TMR0, BSF TMR0…) će obrisati preskaler. Ako je preskaler dodijeljen sigurnosnom brojaču samo instrukcija CLRWDT će obrisati preskaler u isto vrijeme kada i sigurnosni brojač. Promjena preskalera je kompletno pod kontrolom programera i može se mijenjati u toku rada programa.
4.12.1
OPTION registar
R/W-1
R/W-1
R/W-1
RBPU
INTEDG
T0CS
R/W-1
T0SE
R/W-1
R/W-1
R/W-1
R/W-1
PSA
PS2
PS1
PS0
bit 7
R – bit koji se može očitati W – bit koji se može upisati
bit 0
U – neiskorišten bit, čita se kao «0» n – vrijednost nakon reseta
PS0, PS1, PS2 (Prescaler Rate Select) – bit-ovi koji definiraju faktor djeljenja preskalera Koristimo li takt od 4 MHz jedan instrukcijski ciklus (4 interna takta) koji traje 1 µs, broj u danoj tablici pokazuje na koliko mikrosekundi se uvećava TMR ili WDT brojač za jedan.
50
Bitovi 000 001 010 011 100 101 110 111
TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256
WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128
PSA (Prescaler Assignment) – bit koji vrši dodjelu preskalera 1 = preskaler je dodijeljen WDT brojaču 0 = preskaler je dodijeljen TMR0 brojaču T0SE (TMR0 Sorce Edge Select) – bit kojim se bira brid signala za okidanje brojača TMR0 1 = padajući brid 0 = rastući brid T0CS (TMR0 Clock Source Select) – bit kojim se bira izvor taka za TMR0 1 = vanjski preko RA4/TOCKI nožice 0 = interni takt (¼ takta oscilatora) INTEDG (Interrupt Edge Select) – bit kojim se bira brid signala na koji se pojavljuje vanjski prekid s nožice RB0/INT 1 = rastući brid 0 = padajući brid RBPU (PORB Pull-up Enable) – bit koji uključuje ili isključuje pull-up tranzistore 1 = uključeni 0 = isključeni
51
5
Set instrukcija
5.1
Prijenos podataka
Vrši se između radnog registra (W) i ″f″ registra koji predstavlja bilo koju lokaciju RAM-a (Sl. 3.23). Prve tri instrukcije iz tablice (na strani 63) osiguravaju upis konstante u W registar (MOVLW je skraćenica od MOVE Literal to W), zatim prijepis podataka iz W registra u RAM i prijepis podataka iz RAM-a u W registar (ili u istu tu lokaciju RAM-a, pri čemu se mijenja stanje zastavice Z). Instrukcija CLRF upisuje nulu u f registar, a CLRW upisuje nulu u W registar. SWAPF instrukcija unakrsno zamjeni mjesta četverobitnim poljima unutar registra.
5.2
Aritmetika i logika
Od svih aritmetičkih operacija PIC kao i većina mikrokontrolera podržava samo zbrajanje i oduzimanje. Zastavice C, DC i Z postavljaju se u ovisnosti rezultata te dvije operacije, ali sa izuzetkom jer se oduzimanje vrši kao zbrajanje s negativnom vrijednošću, zastavica C je poslije oduzimanja inverzna, znači setirana je ako je operacija moguća, a resetirana ako je veći broj oduzet od manjeg. Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI, EX-ILI, negacije (COMF) i rotiranja (RLF i RRF). Instrukcije koje rotiraju lijevo ili desno pomiču bitove kroz zastavicu C za po jedno mjesto. Bit koji izlazi iz registra upisuje se u C zastavicu, te se upisuje u bit na suprotnoj strani registra.
5.3
Bit operacije
Instrukcije BCF i BSF vrše setiranje ili resetiranje jednog bit-a bilo gdje u memoriji (tablica na strani 63).
5.4
Upravljanje tokom programa
Za upravljanje toka programa nam služe instrukcije GOTO, CALL, RETURN. ''RETLW k'' instrukcija je identična RETURN instrukciji, samo što prije povratka iz podprograma u W registar upiše konstantu koja je definirana operandom instrukcije. Ova funkcija nam omogućuje kreiranje Lookup tabela. Instrukcija RETFIE služi za povratak iz podprograma a razlikuje se od RETURN po tome što automatski setira bit GIE. BTFSC i BTFSS su uvjetne naredbe skoka, u zavisnosti od bit-a koji se testira u ''f'' registru preskače se ili se ne preskače sljedeća naredba programa.
52
Instrukcija addwf andwf clrf clrw comf decf decfsz
f, d f, d f
incf incfsz
f, d f, d
iorwf movf movwf nop rlf rrf subwf swapf xorwf
f, d f, d f f, d f, d f, d f, d f, d
bcf bsf btfsc btfss
f, b f, b f, b f, b
addlw andlw call clwrdt
k k k
f, d f, d f,d
goto k iorlw k movlw k retfie retlw k
Opis
Trajanje u strojnim ciklusima
Zbrajanje akumulatora i registra f Logički I akumulatora i registra f Brisanje registra f Brisanje akumulatora Komplement registra f Smanjenje registra f za 1 Smanjenje registra f za 1, preskače sljedeću instrukciju ako je rezultat 1 Povećanje registra f za 1 Povećanje registra f za 1, preskače sljedeću instrukciju ako je rezultat 0 Inkluzivni ILI akumulatora i f registra Premještanje sadržaja rgistra f Premještanje sadržaja akumulatora u registar f Nul-operacija Rotiranje registra f u lijevo kroz Carry bit Rotiranje registra f u desno kroz Carry bit Oduzimanje akumulatora od registra f Zamjena riječi registra f Ekskluzivni ILI akumulatora i registra f 5.4.1.1.1 Operacije nad bit-ovima Brisanje bit-a b registra f Postavljanje bit-a b registra f Preskače sljedeću instrukciju ako je rezultat 0 Preskače sljedeću instrukciju ako je rezultat 0 Instrukcije nad konstantama i kontrolne instrukcije Zbrajanje akumulatora i konstante k Logički I akumulatora i konstante k Poziv potprograma Brisanje sigurnosnog brojača
Utječe na STATUS bit-ove
1 1 1 1 1 1 1(2)
C, DC, Z Z Z Z Z Z nijedan
1 1(2)
Z nijedan
1 1 1 1 1 1 1 1 1
Z Z nijedan nijedan C C C, DC, Z nijedan Z
1 1 1(2) 1(2)
nijedan nijedan nijedan nijedan
1 1 2 1
C, DC, Z Z nijedan
2 1 1 2 2
return sleep
Grananje programa Inkluzivni ILI akumulatora i konstante k Upisivanje konstante k u akumulator Povratak iz prekidne rutine Povratak iz potprograma s vrijednošću k u akumulatoru Povratak iz potprograma Postavljanje mikrokontrolera u standby mode
sublw k xorlw
Oduzimanje akumulatora od konstante k Ekskluzivni ILI akumulatora i konstante k
1 1
2 1
TO , PD nijedan Z nijedan nijedan nijedan nijedan TO , PD C, DC, Z Z
Tablica instrukcija za mikrokontroler PIC 16F84
53
5.5
Opis pojedinih instrukcija
ADDLW Sintaksa: [labela] ADDLW k Opis: Sadržaj W registra se zbraja s 8 bit-nom konstantom k i Rezultat se sprema u W registar Operacija: (W) + k Î W Operand: 0 ≤ k ≤ 255 Zastavica: C, DC, Z Broj riječi: 1 Broj ciklusa: 1 Primjer:
ADDLW 0X15 Prije instrukcije: Poslije instrukcije:
W = 0x10 W = 0x15 C = 0 (nije došlo do prijenosa jer je rezultat maji od 0xFF)
ADDWF Sintaksa: [labela] ADDWF f, d Opis: Sadržaj W registra se zbraja s f registrom Ako je d = 0 rezultat se sprema u W registar Ako je d = 1 rezultat se sprema u f registar Operacija: (W) + (f) Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: C, DC, Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
ADDWF REG, W Prije instrukcije: Poslije instrukcije:
W = 0x17 REG = 0xC2 W = 0xD9 REG = 0xC2 C=0
Primjer 2:
ADDWF INDF, f Prije instrukcije: Poslije instrukcije:
W = 0x17 FSR = 0xC2 sadržaj adrese 0xC2 = 0x20 W = 0x17 FSR = 0xC2 sadržaj adrese 0xC2 = 0x37
ANDLW Sintaksa: [labela] ANDLW k Opis: Vrši logičku operaciju I nad sadržajem W registra i konstante k, rezultat će bit 1 ako su oba odgovarajuća bit-a operanda 1-inice. Rezultat se smješta u W registar. Operacija: (W) .AND. k Î W Operand: 0 ≤ k ≤ 255 Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 54
Primjer 1:
ANDLW 0x5F Prije instrukcije: Poslije instrukcije:
W = 0xA3 W = 0x03
;1010 0011 (0xA3) ;0101 1111 (0x5F) ------------------------------;0000 0011 (0x03) Z = 0 (rezultat nije nula)
Primjer 2:
ANDLW 0x55 Prije instrukcije: Poslije instrukcije:
W = 0xAA W = 0x17
;1010 1010 (0xAA) ;0101 0101 (0x55) ------------------------------;0000 0011 (0x03) Z = 1 (rezultat je nula)
ANDWF Sintaksa: [labela] ANDWF f, d Opis: Vrši logičku operaciju I nad sadržajem registara W i f Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: (W) .AND. (f) Î d Operand: 0 ≤ f ≤ 127 , d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
ANDWF REG, f Prije instrukcije: Poslije instrukcije:
W = 0x17, REG = 0xC2 ;0001 0111 (0x17) W = 0x17, REG = 0x02 ;1100 0010 (0xC2) ------------------------------;0000 0010 (0x02)
Primjer 2:
ANDWF FSR, w Prije instrukcije: Poslije instrukcije:
W = 0x17, FSR = 0xC2 ;0001 0111 (0x17) W = 0x02, FSR = 0xC2 ;1100 0010 (0xC2) ------------------------------;0000 0010 (0x02)
BCF Sintaksa: [labela] BCF f, b Opis: Resetira bit b u registru f Operacija: (0) Î (f) < b > Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7 Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
BCF REG, 7 Prije instrukcije: Poslije instrukcije:
REG = 0xC7 REG = 0x47
;1100 0111 ;0100 0111
(0xC7) (0x47) 55
Primjer 2:
BCF INDF, 3 Prije instrukcije: Poslije instrukcije:
W = 0x17 FSR = 0xC2 sadržaj adrese (FSR) = 0x2F W = 0x17 FSR = 0xC2 sadržaj adrese (FSR) = 0x27
BSF Sintaksa: [labela] BSF f, b Opis: Setira bit b u registru f Operacija: (1) Î (f) < b > Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7 Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
BSF REG, 7 Prije instrukcije: Poslije instrukcije:
REG = 0x07 REG = 0x87
;0000 0111 ;1000 0111
(0x07) (0x87)
Primjer 2:
BSF INDF, 3 Prije instrukcije: Poslije instrukcije:
W = 0x17 FSR = 0xC2 sadržaj adrese (FSR) = 0x20 W = 0x17 FSR = 0xC2 sadržaj adrese (FSR) = 0x28
BTFSC Sintaksa: [labela] BTFSC f, b Opis: Ako je bit b u registru f jednak 0-i onda se preskače sljedeća instrukcija. Ako je bit b jednak nuli tokom izvršavanja tekuće instrukcije onemogućuje se izvršavanje naredne i umjesto nje se izvršava NOP, čineći tekuću instrukciju dvociklusnom. Operacija: preskoči narednu instrukciju ako je ( f < b > ) = 0 Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7 Zastavica: Broj riječi: 1 Broj ciklusa: 1 ili 2 u ovisnosti bit-a b Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG LAB_02. . . . . . ;Preskoči ovu liniju ako je = 1 LAB_03. . . . . . ;Ovdje skoči ako je = 0 Prije instrukcije: Programski brojač je bio na adresi LAB_01 Poslije instrukcije: Ako je u registru REG bit 1 resetiran, PC pokazuje na adresu LAB_03. Ako je u registru bit 1 setiran PC pokazuje na adresu LAB_02.
56
BTFSS Sintaksa: [labela] BTFSS f, b Opis: Ako je bit b u registru f jednak jedinici onda se preskače sljedeća instrukcija. Ako je bit b jednak jedinici tokom izvršavanja tekuće instrukcije onemogućuje se izvršavanje naredne i umjesto nje se izvršava NOP, čineći tekuću instrukciju dvociklusnom. Operacija: preskoči narednu instrukciju ako je ( f < b > ) = 1 Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7 Zastavica: Broj riječi: 1 Broj ciklusa: 1 ili 2 u ovisnosti bit-a b Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG LAB_02. . . . . . ;Preskoči ovu liniju ako je = 0 LAB_03. . . . . . ;Ovdje skoči ako je = 1 Prije instrukcije: Programski brojač je bio na adresi LAB_01 Poslije instrukcije: Ako je u registru REG bit 1 setiran, PC pokazuje na adresu LAB_03. Ako je u registru bit 1 resetiran PC pokazuje na adresu LAB_02. CALL Sintaksa: [labela] CALL k Opis: Instrukcija poziva podprogram. Prvo se povratna adresa (PC+1) sprema u stog, zatim se 11 bit-ni direktni operand k koji sadrži adresu potprograma smješta u PC. Operacija: (PC) + 1 Î vrh stoga (TOS – Top Of Stack) k Î PC <10 : 0>, (PCLATH <4 : 3>) Î PC <12 : 11> Operand: 0 ≤ k ≤ 2047 Zastavica: Broj riječi: 1 Broj ciklusa: 2 Primjer:
LAB_01CALL : LAB_02. . . . . .
LAB_02
Prije instrukcije: Poslije instrukcije:
;Pozovi podprogram LAB_02
PC = adresa LAB_01 TOS (vrh stoga) = x PC = adresa LAB_02 TOS (vrh stoga) = LAB_01
CLRF Sintaksa: [labela] CLRF f Opis: Sadržaj f registra se izjednačava s 0-om, zastavica Z se setira u 1 Operacija: 0 Î f Operand: 0 ≤ f ≤ 127 Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
CLRF TRISB Prije instrukcije: Poslije instrukcije:
TRISB = 0xFF TRISB = 0x00 Z=1 57
Primjer 2:
CLRF INDF Prije instrukcije: Poslije instrukcije:
FSR = 0xC2 sadržaj adrese 0xC2 = 0x33 FSR = 0xC2 sadržaj adrese 0xC2 = 0x00 Z=1
CLRW Sintaksa: [labela] CLRW Opis: Sadržaj W registra se izjednačava s nulom, zastavica Z se setira u jedan. Operacija: 0 Î W Operand: Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer:
CLRW Prije instrukcije: Poslije instrukcije:
W = 0x55 W = 0x00 Z=1
CLRWDT Sintaksa: [labela] CLRWDT Opis: Resetira sigurnosni brojač i preskaler a bit-ovi TO i PD se setiraju Operacija: 0 Î WDT 0 Î WDT preskaler 1 Î TO 1 Î PD Operand: Zastavica: TO , PD Broj riječi: 1 Broj ciklusa: 1 Primjer:
CLRWDT Prije instrukcije: Poslije instrukcije:
WDT brojač = x WDT preskaler = 1:128 WDT brojač = 0 TO = 1 PD = 1 WDT preskaler = 1:128
COMF Sintaksa: [labela] COMF f, d Opis: Komplementira sadržaj f registra Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: ( f ) Î d Operand: 0 ≤ f ≤ 127 , d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1
58
Primjer 1:
COMF REG, w Prije instrukcije: Poslije instrukcije:
REG = 0x13 REG = 0x13 W = 0xEC
;0001 0011 (0x13) ;komplementiranje ------------------------------1110 1100 (0xEC)
Primjer 2:
COMF INDF, f Prije instrukcije: Poslije instrukcije:
FSR = 0xC2 Sadržaj adrese ( FSR ) = 0xAA FSR = 0xC2 Sadržaj adrese ( SFR ) = 0x55
DECF Sintaksa: [labela] DECF f, d Opis: Umanjuje f registar za jedan Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: ( f ) - 1 Î d Operand: 0 ≤ f ≤ 127 , d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
DECF REG, f Prije instrukcije: Poslije instrukcije:
REG = 0x01 Z=0 REG = 0x00 Z=1
Primjer 2:
DECF REG, w Prije instrukcije: Poslije instrukcije:
REG = 0x13 W=x Z=0 REG = 0x13 W = 0x12 Z=0
DECFSZ Sintaksa: [labela] DECFSZ f, d Opis: Umanjuje f registar za jedan Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Ukoliko je rezultat 0 sljedeća instrukcija se izvršava kao NOP čineći tekuću instrukciju dvociklusnom. Operacija: (f) - 1 Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Broj riječi: 1 Broj ciklusa: 1 ili 2 u ovisnosti rezultata
59
Primjer:
MOVLW .10 MOVWF CNT Loop : : DECFSZ CNT, f GOTO Loop LAB_03
;CNT = 10 ;Blok naredbi ;Umanji sadržaj registra CNT za jedan ;Preskoči ovu liniju ako je = 0 ;Ovde skoči ako je = 0
U ovom primjeru blok naredbi se izvršava onoliko puta koliko je početna vrijednost varijable CNT, što je u ovom primjeru 10. GOTO Sintaksa: [labela] GOTO k Opis: Bezuvjetni skok na adresu k. Operacija: k Î PC <10:0>, (PCLATH <4:3>) Î PC <12:11> Operand: 0 ≤ k ≤ 2047 Zastavica: Broj riječi: 1 Broj ciklusa: 2 Primjer:
LAB_00CALL : LAB_01
LAB_01
;Skoči na LAB_01
......
;Program nastavlja normalno dalje
Prije instrukcije: PC = adresa LAB_00 Poslije instrukcije: PC = adresa LAB_01 INCF Sintaksa: [labela] INCF f, d Opis: Uvećava f registar za jedan Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: (f) + 1 Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
INCF REG, f Prije instrukcije: Poslije instrukcije:
REG = 0xFF Z=0 REG = 0x00 Z=1
Primjer 2:
INCF REG, w Prije instrukcije: Poslije instrukcije:
REG = 0x10 W=x Z=0 REG = 0x10 W = 0x11 Z=0
60
INCFSZ Sintaksa: [labela] INCFSZ f, d Opis: Uvećava sadržaj f registar za jedan Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Ako je rezultat = 0 naredna instrukcija se izvršava kao NOP čineći instrukciju dvociklusnom. Operacija: (f) + 1 Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer:
LAB_01INCFSZ REG, f LAB_02. . . . . . LAB_03. . . . . .
;Uvećaj sadržaj REG za jedan ;Preskoči ovu liniju ako je = 0 ;Ovdje skoči ako je = 0
Prije instrukcije: Programski brojač je bio na adresi LAB_01 Sadržaj REG registra poslije izvršavanja instrukcije REG = REG + 1. Ako je REG = 0, tada PC pokazuje na adresu labele LAB_03. U suprotnom PC pokazuje adresu naredne instrukcije LAB_02. IORLW Sintaksa: [labela] IORLW k Opis: Vrši logičku operaciju ILI nad sadržajem registara W i 8 bit-nom konstantom k, rezultat se sprema u W registar. Operacija: (W) .OR. (k) Î W Operand: 0 ≤ k ≤ 255 Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer:
IORLW 0x35 Prije instrukcije: Poslije instrukcije:
W = 0x9A W = 0xBF Z=0
IORWF Sintaksa: [labela] IORWF f, d Opis: Vrši logičku operaciju ILI nad sadržajem registara W i f Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: (W) .OR. (f) Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
IORWF REG, w Prije instrukcije: Poslije instrukcije:
REG = 0x13, W = 0x91 REG = 0x13, W = 0x93 Z=0
61
Primjer 2:
IORWF REG, f Prije instrukcije: Poslije instrukcije:
EG=0x13, W = 0x91 REG=0x93, W = 0x91 Z=0
MOVF Sintaksa: [labela] MOVF f, d Opis: Sadržaj f registra smješta na lokaciju koju određuje operand d Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija d = 1 se koristi za testiranje sadržaja f registra jer izvršavanje ove instrukcije utječe na zastavicu Z. Operacija: (f) Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
MOVF FSR, w Prije instrukcije: Poslije instrukcije:
FSR = 0xC2 W = 0x00 W = 0xC2 Z=0
Primjer 2:
MOVF INDF, f Prije instrukcije: Poslije instrukcije:
W = 0x17 REG = 0xC2 sadržaj adrese 0xC2 = 0x00 W = 0x17 REG=0xC2 sadržaj adrese 0xC2 = 0x00 Z=1
MOVLW Sintaksa: [labela] MOVLW k Opis: 8 bit-nu konstantu k upisuje u W registar. Operacija: k Î (W) Operand: 0 ≤ f ≤ 255 Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer:
MOVLW 0x5A Poslije instrukcije:
W = 0x5A
62
MOVWF Sintaksa: [labela] MOVWF f Opis: Sadržaj f registra prepisuje se u f registar. Operacija: (W) Î f Operand: 0 ≤ f ≤ 127 Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
MOVWF OPTION_REG Prije instrukcije: Poslije instrukcije:
W = 0x40 OPTION_REG = 0x40 W = 0x40
Primjer 2:
MOVW F INDF Prije instrukcije: Poslije instrukcije:
W = 0x17 REG = 0xC2 sadržaj adrese 0xC2 = 0x00 W = 0x17 REG = 0xC2 sadržaj adrese 0xC2 = 0x17
NOP Sintaksa: [labela] NOP Opis: Ne vrši nikakvu operaciju i ne utječe ni na jednu zastavicu. Operacija: Operand: Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer:
NOP
;Kašnjenje od 1µs pri taktu od 4 MHz
Prije instrukcije: Poslije instrukcije:
PC = x PC = x + 1
RETFIE Sintaksa: [labela] RETFIE Opis: Povratak iz programa. Vrijednost iz TOS-a se smješta u PC. Omogućuju se prekidi setiranjem bit-a GIE. Operacija: TOS Î PC, 1 Î GIE Operand: Zastavica: Broj riječi: 1 Broj ciklusa: 2 Primjer:
RETFIE Prije instrukcije: Poslije instrukcije:
PC = x GIE = 0 PC = TOS GIE = 1
63
RETLW Sintaksa: [labela] RETLW k Opis: 8 bit-na konstanta k se smješta u W registar a u PC vrijednost s vrha stoga. Operacija: (k) Î W, TOS Î PC Operand: 0 ≤ k ≤ 255 Zastavica: Broj riječi: 1 Broj ciklusa: 2 Primjer:
RETLW 0x43 Prije instrukcije: Poslije instrukcije:
W=x PC = x TOS = x W = 0x43 PC = TOS TOS = TOS – 1
RETURN Sintaksa: [labela] RETURN Opis: Sadržaj TOS-a smješta u PC Operacija: TOS Î PC Operand: Zastavica: Broj riječi: 1 Broj ciklusa: 2 Primjer:
RETURN Prije instrukcije: Poslije instrukcije:
PC = x TOS = x PC = TOS TOS = TOS - 1
RLF Sintaksa: [labela] RLF f, d Opis: Sadržaj f registra se rotira za jedno mjesto u lijevo. Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: (f
) Î d , f<7> Î C, C Î d<0> Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: C Broj riječi: 1 Broj ciklusa: 1 C
Primjer 1:
registar 1
RLF REG, w Prije instrukcije: Poslije instrukcije:
REG = 1110 0110 C=0 REG = 1110 0110 W = 1100 1100 C=1
64
Primjer 2:
RLF REG, f Prije instrukcije: Poslije instrukcije:
REG = 1110 0110 C=0 REG = 1100 1100 C=1
RRF Sintaksa: [labela] RRF f, d Opis: Sadržaj f registra se rotira za jedno mjesto u desno. Ako je d = w rezultat se sprema u W registar Ako je d = f rezultat se sprema u f registar Operacija: (f) Î d, f<0> Î C, C Î d<0> Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: C Broj riječi: 1 Broj ciklusa: 1
C
registar 1
Primjer 1:
RRF REG, w Prije instrukcije: Poslije instrukcije:
REG = 1110 0110 W=x C=0 REG = 1110 0110 W = 0111 0011 C=0
Primjer 2:
RRF REG, f Prije instrukcije: Poslije instrukcije:
REG = 1110 0110 C=0 REG = 0111 0011 C=0
SLEEP Sintaksa: [labela] SLEEP Opis: Postavlja mikrokontroler u mod niske potrošnje. Zaustavlja oscilator, PD se resetira a TO setiran. Sigurnosni brojač i preskaler su resetirani. Operacija: 0 Î WDT 0 Î WDT preskaler 1 Î TO 1 Î PD Operand: Zastavica: TO , PD Broj riječi: 1 Broj ciklusa: 1
65
Primjer:
SLEEP Prije instrukcije: Poslije instrukcije:
WDT brojač = x WDT preskaler = x WDT brojač = 0x00 TO = 1 PD = 0
SUBLW Sintaksa: [labela] SUBLW k Opis: Sadržaj W registra se oduzima od konstante k, rezultat se smješta u W registar. Operacija: k – (W) Î W Operand: 0 ≤ k ≤ 255 Zastavica: DC Broj riječi: 1 Broj ciklusa: 1 Primjer:
SUBLW 0x03 Prije instrukcije: Poslije instrukcije:
W = 0x01, C = x, Z = x W = 0x02, C = 1, Z = 0, rezultat je pozitivan
Prije instrukcije: Poslije instrukcije:
W = 0x03, C = x, Z = x W = 0x00, C = 1, Z = 1, rezultat je nula
Prije instrukcije: Poslije instrukcije:
W = 0x04, C = x, Z = x W = 0xFF, C = 0, Z = 0, rezultat je negativan
SUBWF Sintaksa: [labela] SUBWF f, d Opis: Sadržaj W registra se oduzima od sadržaja f rgistra. Ako je d = w rezultat se sprema u W registar. Ako je d = f rezultat se sprema u f registar. Operacija: (f) – (W) Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: C, DC, Z Broj riječi: 1 Broj ciklusa: 1 Primjer:
SUBWF REG, 1 Prije instrukcije: Poslije instrukcije:
REG = 3, W = 2, C = x, Z = x REG = 1, W = 2, C = 1, Z = 0, pozitivan rezultat
Prije instrukcije: Poslije instrukcije:
REG = 2, W = 2, C = x, Z = x REG = 0, W = 2, C = 1, Z = 1, rezultat je nula
Prije instrukcije: Poslije instrukcije:
REG = 1, W = 2, C = x, Z = x REG = 0xFF, W = 2, C = 0, Z = 0, negativan rezultat
66
SWAPF Sintaksa: [labela] SWAPF f, d Opis: Gornja i donja polovica f registra mijenjaju mjesta. Ako je d = w rezultat se sprema u W registar. Ako je d = f rezultat se sprema u f registar. Operacija: f<0:3> Î d<4:7>, f<4:7> Î d<0:3> Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
SWAPF REG, w Prije instrukcije: Poslije instrukcije:
REG = 0xF3 REG = 0xF3 W = 0x3F
Primjer 2:
SWAPF REG, f Prije instrukcije: Poslije instrukcije:
REG = 0xF3 REG = 0x3F
XORLW Sintaksa: [labela] XORLW k Opis: Vrši logičku operaciju isključivo ILI nad sadržajem registara W i 8 bit-nom konstantom k, rezultat se sprema u W registar. Operacija: (W) .XOR. k Î W Operand: 0 ≤ k ≤ 255 Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 Primjer 1:
XORLW 0xAF Prije instrukcije: Poslije instrukcije: Primjer 2:
W = 0xB5 W = 0x1A Z=0
;1011 0101 (0xB5) ;1010 1111 (0xAF) ------------------------------;0001 1010 (0x1A)
W = 0xAF Konst = 0x37 W = 0x98 Z=0
;1010 1111 (0xAF) ;0011 0111 (0x37) ------------------------------;1001 1000 (0x98)
Konst equ 0x37 XORLW Konst Prije instrukcije: Poslije instrukcije:
XORWF Sintaksa: [labela] XORWF f, d Opis: Vrši logičku funkciju isključivo ILI nad sadržajima W i f registara, bit u rezultatu je 1 samo ako su odgovarajući bitovi operanda različiti. Ako je d = w rezultat se sprema u W registar. Ako je d = f rezultat se sprema u f registar. Operacija: (W) .XOR. k Î d Operand: 0 ≤ f ≤ 127, d ∈ [0,1] Zastavica: Z Broj riječi: 1 Broj ciklusa: 1 67
Primjer 1:
XORWF REG, f Prije instrukcije: Poslije instrukcije:
REG = 0xAF, W = 0xB5; REG = 0x1A, W = 0xB5;
;1011 0101 (0xB5) ;1010 1111 (0xAF) ------------------------;0001 1010 (0x1A)
REG = 0xAF, W = 0xB5; REG = 0xAF, W = 0x1A;
;1010 1111 (0xAF) ;1011 0101 (0xB5) ------------------------;0001 1010 (0x1A)
Primjer 2:
XORWF REG, w Prije instrukcije: Poslije instrukcije:
68
6
Razvojni alati za PIC 16F84
6.1
Asembler
Asemblerski jezik je jezik kojim čovjek i mikrokontroler komuniciraju. Asemblerski jezik je razumljiv čovjeku, sastoji se od riječi i abecednih znakova. No program napisan u asemblerskom jeziku mora se prevesti u niz nula i jedinica da bi ga mikrokontroler razumio. Razlikujemo pojam «asembler» i «asemblerski jezik». Asembler je program prevodilac koji prevodi asemblerski jezik u jezik nula i jedinica, a asemblerski jezik je skup pravila po kojima se piše program za mikrokontroler.
Sl. 6.1. Postupak programiranja mikrokontrolera Program.asm predstavlja datoteku na disku računala koja je napisana po pravilima asemblerskog jezika, Program.hex je datoteka koja je prevedena u jezik nula i jedinica i to heksadecimalnim zapisom, ta datoteka se pomoću programatora upisuje u mikrokontroler. Program se u asemblerskom jeziku može pisati u bilo kojem programu za obradu teksta koji može spremiti datoteku kao ASCII. Primjer: ovako izgleda naredba RETURN prevedena asemblerom, dobije se 14 bit-ni niz nula i jedinica koji je razumljiv mikrokontroleru.
6.1.1
asm
hex
RETURN
00 0010 0000 1000
Elementi programskog jezika asembler
Osnovni elementi su: -
Labele Naredbe Operandi Komentari Direktive
69
Labela predstavlja tekstualnu verziju neke adrese u programskoj ili RAM memoriji. Dužina labele može biti najviše 32 znaka, bitno je da počinje slovom ili donjom crtom ″_″. Labele se pišu u prvoj koloni. Naredbe su definirane upotrebom određenog mikrokontrolera i pri pisanju programa treba samo poštovati način njihove upotrebe. Operandi su elementi naredbi nad kojima se izvršava naredba. To su najčešće registri , promjenjive vrijednosti ili konstantne u memoriji. Komentar je tekst koji programer piše nakon naredbe iz znaka ″ ; ″ da bi program bio jasniji i pregledniji. Direktiva je slična naredbi, ali je nezavisna od modela mikrokontrolera i predstavlja posebnost samog asemblerskog jezika. Direktiva koju ćemo koristiti glasi: PROCESOR 16f84 #include ''p16f84.inc'' __CONFIG_CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
70
7
MPLAB IDE v6.60
7.1
MPLAB IDE
MPLAB IDE (Integrated Development Environment) je integrirano razvojno okruženje za pisanje i ® TM razvoj programa Microchip-ovih PICmicro MCU porodice mikrokontrolera i dsPIC Digital Signal Controllers. Sa MPLAB razvojnim okruženjem možemo: • Izraditi i editirati izvorni kôd koristeći ugrađen (build-in) editor. • Asemblirati, kompajlirati i povezivati izvorni kôd. • Ispravljati završnu logiku tako da pratimo izvršavanje tijeka programa koristeći ugrađeni(build-in) simulator ili u realnom vremenu sa emulatorima MPLAB ICE 2000 i 4000 ili sa MPLAB ICD 2 internim (in-circuit) pronalazačem grešaka (debagger). • Vršiti vremenska mjerenje koristeći simulator ili emulator. • Prikaz varijabli preko Prozora za gledanje (Watch windows). ® ® • Programiranje firmware-a na uređaje koristeći MPLAB ICD 2, PICSTART Plus ili PRO MATE II programatore uređaja. • Velika podrška za pitanja preko MPLAB IDE pomoći (Help).
7.2
Zahtjevi sustava
Potrebna je sljedeća minimalna konfiguracija za rad MPLAB-a IDE: • PC kompatibilno računalo • Microsoft Windows 98 SE, Windows 2000 SP2, Windows NT SP6, Windows ME, Windows XP • 64 MB radne memorije (128MB preporučeno) • 45 MB slobodnog prostora na tvrdom disku • Internet Explorer 5.0 ili noviji
7.3
Izrada jednostavnog projekta
7.3.1
Uvod
Da bi napravili kôd koji se može izvršavati koristeći ciljani PICmicro MCU mikrokontroler, izvorni kôd se treba staviti unutar projekta i tada se kôd izgrađuje koristeći selektirane alate za prevođenje (language tools): asemblere, kompajlere, itd.U MPLAB-u IDE, projekt menadžer se brine o tim procesima. Prvi korak je pisanje vrlo kratkog izvornog kôda koji spremamo u određenu datoteku. Tada izrađujemo projekt, dodajemo izvorni kôd projektu, alati za prevođenje(language tools) kôda se dodjeljuju projektu, i napokon kôd je izgrađen i testiran. Pri pokretanju programa na ekranu će se pojaviti MPLAB IDE radna površina (desktop).
7.3.2
Pisanje izvornog koda
Krenite sa pisanjem kôda za aplikaciju koristeći MPLAB IDE editor. Odaberite File>New .U radnom prostoru će se otvoriti prazan prozor za editiranje, pisanje. Unesite ovaj primjer gotovog kôda. Preporuka Copy/Paste.
71
title "PIC16F877 brojac" PROCESSOR 16F877 #include
;Ova datoteka sadrži sva imena registara ;specijalnih namjena i njihove adrese od ;PIC16F877 ;Ta se datoteka nalazi u istom direktoriju ;kao i MPASMWIN.exe
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC COUNT equ DVAR equ DVAR2 equ
Main
0x0020 0x0021 0x0022
;sve tri adrese se ;nalaze u BANK0 ;GPS registra
org goto
0x00 Main
;početna adresa od koje mikrokontroler ; kreće nakon dovođenja napajanja
bcf bcf clrw movwf bsf movwf
STATUS,RP0 STATUS,RP1
;BANK0
PORTB STATUS,RP0 TRISB
;izbriši W registar ;brišemo PORTB ;BANK1 ;configuriramo PORTB kao izlazni
bcf clrf
STATUS,RP0 COUNT
;brišemo count
COUNT,F COUNT,W PORTB
;incrementiramo count ;CONT→W ;prosljedi na PORTB
call goto
Delay IncCount
;pozivanje Timerskog potprograma ;petlja
movlw movwf
0xFF DVAR2
;vremensko trajanje petlje
movwf
DVAR
decfsz goto
DVAR,F D1
decfsz goto
DVAR2,F D0
Init
IncCount incf movf movwf
Delay D0 D1
return end
Kada je kôd unesen, odaberemo akciju File>Save i spremimo datoteku u novi direktorij naziva C:\Projekti kao brojac16f877.asm.
Napomena:
Direktiva «__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC » u izvornom kodu se može podesiti i prilikom učitanja .hex datoteke u mikrokontroler programom IC-Prog.
72
Slika 1.
Pritisnitie Save. Bilješka:
7.3.3
Nakon spremanja kôda, tekst je prikazan s identifikacijskim bojama, označavajući kôd, rezervirane riječi, komentare, itd. Ta opcija označavanja bojama se može prilagođavati. Za više informacija oko editora, pogledajte Help>MPLAB Editor Help .
Izrada projekta
Sljedeći korak pri stvaranju aplikacije je podešavanje projekta. Najlakši način za to je preko MPLAB-ovog Čarobnjaka za projekt (Project Wizard). 7.3.3.1 1.
Pokretanje Čarobnjaka (Wizard) Čarobnjak se pokreće akcijom Project>Project Wizard. Prikazat će se «Welcome!» ekran. Odaberite Next tipku za nastavak (Slika 2.)
Slika 2.
2.
Odaberite PIC16F877 sa samo-padajućeg Device izbornika. To će biti PIC mikrokontroler korišten u ovoj demonstraciji. Za sljedeći korak Čarobnjaka pritisnite Next (slika 3).
73
Slika 3.
3.
Potvrdite lokaciju Microchip Toolsuite-a. Pritisnite na MPASM Assembler (maasmwin.exe). Puna adresa od MPASM Assembler.exe bi se trebala prikazati u polju Location of Selected Tool kao što je prikazano na slici. Ako je netočna ili je prazna, pritisnite Browse za lociranjem mpasmwin.exe. Ako je MPLAB instaliran u izvorni (default) direktorij, adresa bi se trebala prikazati kao na slici 4. Za sljedeći korak Čarobnjaka pritisnite Next.
Slika 4.
4.
Unesite ime projekta. Radi ove demonstracije, nazovite ga Brojac i pritisnite Browse da bi odabrali projektni direktorij koji smo napravili ranije da bi spremili izvorni kôd, C:\Projekti (slika 5.)
74
Slika 5.
5.
Pritisnite Next. Sada trebamo dodati postojeće datoteke vašem projektu. Pronađite mapu C:\Projekti i odaberite brojac16f877.asm (Slika 6.).
Slika 6.
,
6.
Pritisnite Add>> tipku da bi brojac16f84.asm dodijelili projektu. To je jedina datoteka koja je potrebna za stvaranje projekta (sa iznimkom P16F877.H datoteke koja je «sadržana» u brojac16f877.asm, i nije ju potrebno dodavati).
75
Slika 7.
7.
Pritisnite Next za nastavak i dovršenje izrade Čarobnjaka. U ovom finalnom prozoru možemo vidjeti i provjeriti parametre ovog projekta.
Slika 8.
8.
Pritisnite Finish i završite Čarobnjak.
76
Prozor projekta na radnoj površini bi trebao izgledati kao na slici 9. Slika 9.
SAVJET:
7.3.4
Datoteke se mogu dodavati i projekti spremati sa desnim klikom miša u projektnom prozoru. U slučaju greške, datoteke se mogu ručno brisati tako da ih odaberemo i pokrenemo izbornik desnim klikom na miša.
Izgradnja projekta
Kada smo završili sa stvaranjem projekta, vrijeme je da ga izgradimo. Tako će se asemblirati izvorni kôd koristeći Microchipov MPASM toolsuite. Odaberite Project>Build All da izgradimo projekt. Datoteka bi se trebala uspješno asemblirati i Output prozor bi trebao izgledati kao na slici 10. Slika 10.
Ako se datoteke nisu uspješno asemblirale, provjerite sljedeće natuknice i ponovno izgradite projekt: ● Provjerite sintaksu i format kôda unesenog u editorski prozor. Ako je asembler javio greške u Output prozoru, dvostrukim pritiskom miša na grešku MPLAB će otvoriti odgovarajuću liniju u izvornom kôdu pokazujući na nju sa zelenom strelicom na lijevoj margini prozora izvornog kôda. ● Provjerite da li koristite odgovarajući asembler (MPASM assambler) za PICmicro uređaje. Odaberite Project>Set Language Tool Locations. Pritisnite Microchip MPASM Toosuite\Executables\ MPASM Assembler (mpasmwin.exe) i provjerite na njezinu lokaciju. Ako je lokacija ispravna, pritisnite Cancel. A ako nije, promijenite ju i tada pritisnite OK.
77
Nakon uspješne izgradnje projekta generira se, alatima za prevođenje, izlazne datoteke. Te datoteke sadrže objektni kôd koji se može upisati u PICmicro mikrokontrolere i informacije (debugging information) koje služe za ispravljanje izvornog kôda i simbolično gledanje varijabla kôda preko prozora za gledanje(Watch windows). Važno:
Generirana datoteka.HEX se sada može otvoriti u programu IC-Prog i upisati na PIC 16F877.
Bilješka:
Velika korist od projekta se najviše vidi kada je mnogo datoteka koje se trebaju kompajlirat\asemblirat i povezat da bi činile izvršnu aplikaciju – kao u stvarnim aplikacijama. Projekti sve to prate. Opcije za izgradnju(build options), se mogu namještati za svaku datoteku od koje svaka može pristupati drugim pogodnostima alata za prevođenje(language tools), kao što su izlazna izvješća i optimizacija kompajlera.
7.3.5
Pokretanje simulatora
Sada kad je projekt izgrađen, trebamo provjeriti da li funkcionira. Da bi to učinili trebamo odabrati alat za pronalaženje pogrešaka (debug tool). To može biti hardwerski ili softwerski alat za inspekciju kôda poslije izvršenja programa (u ovom slučaju brojac16f877.asm). U ovom vodiču ćemo koristiti MPLAB SIM simulator. Simulator je softwerski program koji radi na PC-u i simulira instrukcije od PICmicro mikrokontrolera. Simulator ne radi u «realnom vremenu», zato što simulatorski program ovisi o brzini PC-a, kompleksnosti koda, preljevom (overhead) operativnog sustava i koliko drugih zadaća (tasks) obavlja. Ipak, simulator precizno mjeri vrijeme koje je potrebno da se kôd izvrši kao da radi u realnom vremenu i u aplikaciji. Bilješka:
Ostali pronalazači pogreška (debuggers) sadrže MPLAB ICE 2000, MPLAB ICE 4000 i MPLAB ICD2. To su opcionalni hardwerski alati za testiranje kôda na PC platformi. Većina operacija od MPLAB IDE alata za pronalaženje pogreški su iste kao i od simulatora, ali za razliku od simulatora, ovi alati dozvoljavaju da ciljani PIC mikrokontroler radi pri punoj brzini u stvarnoj ciljanoj aplikaciji.
Odaberite MPLAB SIM simulator, kao Debugger>Select Tool>MPLAB SIM (slika 11).
alat
za
pronalaženje
pogreški,
selektiranjem
Slika 11.
Poslije odabira MPLAB SIM, vidjet ćemo sljedeće promjene (vidi pripadajuće brojeve na slici 12). 1. Statusna traka (status bar) na dnu MPLAB IDE prozora će se promijeniti na «MPLAB SIM». 2. Dodatne meni opcije bi se trebale pojaviti u Debugger meniju. 3. Dodatne alatne ikone bi se trebale pojaviti koje služe za ispravljanje pogreški u kôdu (Debugger Tool Bar).
78
Slika12.
7.3.6
Provjera rada aplikacije
Aplikacija je spremna za pokretanje. Na alatnoj traci će se pojaviti sljedeće ikone prečaca Debugger menija:
Run Halt Animate Step into Reset Sve te akcije služe za pregledavanje i ispitivanje ispravnosti kôda zajedno sa specijalnim prozorima za gledanje kao što su File Reisters, Watch, Special Function registers i dr. U prozorima se mogu pratiti promjene u registrima tijekom izvršavanja programa. Prozorima se mogu pristupiti preko View menija. U nastavku teksta će biti objašnjeni. 7.3.6.1
Pokretanje kôda
Prvo odaberite Debugger>Reset (ili ikonu na alatnoj traci). Trebala bi se pojaviti zelena strelica na lijevoj strani prozora izvornog kôda, pokazujući na prvu liniju izvornog kôda koja bi se trebala izvršiti.
79
Slika13a.
Odaberite Debugger>Run (ili ikonu ) da bi pokrenuli aplikaciju. Tekstualna poruka «Running…» će se pojaviti na statusnoj traci(status bar). Da bi zaustavili izvršenje programa, selektirajte Debegger>Halt (ili ikonu pokazat na liniju kôda na kojoj je aplikacija zaustavljena.
). Zelena strelica će
Da bi prolazili kroz aplikaciju korak kroz korak, selektirajte Debugger>Step Into (ili ikonu ).Tada će se izvršiti trenutna linija kôda na kojoj je program zaustavljen i zelena strelica će skočiti na sljedeću liniju kôda koja bi se trebala izvršiti. Imamo još akciju Animate koja se pokreće selektiranjem Debugger>Animate (ili pripadajućom ikonom ). S njom prolazimo kroz izvorni kôd automatski korak po korak sa određenom vremenskom pauzom između skoka. Ta se vremenska pauza može promijeniti i definira na sljedeći način: selektirajte Debugger>Settings i pod tabularom Debugger Animation promijenimo vrijednost (slika 13b.) Slika 13b.
80
Vrijednost koju unosimo označava milisekunde po koraku [msecs]. To znači da će prije izvršenja sljedećeg koraka čekati 0,5 sekundi. 7.3.6.2
Praćenje varijabli
Vrijednosti varijabla se mogu vidjeti u svakom trenutku tako da postavimo kursor miša iznad imena varijable bilo gdje u izvornom kôdu. Pojavit će se mali prozorčić sa trenutnom vrijednošću varijable. Slika 14.
Bilješka:
7.3.6.3
Da bi se generirala takva informacija prikazivanja varijable u pojavljujućem(pop-up) prozorčiću program mora biti kompajliran i povezan.
Korisnički prozori za gledanje varijabli (Watch Windows)
Korisnici često žele imat pregled ključnih varijabli cijelo vrijeme. Varijable se lakše prate ako otvorimo prozore za gledanje nego da mišom prelazimo preko svake varijable. Prozor za gledanje vrijednosti varijabli će biti prisutan cijelo vrijeme na ekranu. Prozori (Watch Windows) se mogu naći pod View menijem.
1. Selektiraj View>Watch da bi otvorili prozor za gledanje. 2. Selektiraj PORTB sa Add SFR izbornika vrhu prozora. Pritisnite Add SFR i dodajte ga na listu za gledanje. Da bi ubrzali pretraživanje možete počet tipkati PORTB nakon odabira padajućeg izbornika. 3. Selektiraj COUNT sa izbornika Add Symbol na vrhu prozora. Pritisnite Add Symbol da bi ga dodali na listu prozora za gledanje. 4. Simboli se mogu unositi direktno ili selektiranjem sa padajućeg izbornika. Direktno unosimo tako da pomaknemo kursor do nove prazne linije i utipkamo «DVAR» i pritisnemo Enter. Ili odaberemo DVAR sa padajućeg izbornika za odabir simbola i pritisnemo Add Symbol i tako ga dodamo listi prozora za gledanje.
81
Slika 15.
Tri simbola bi se trebala nalaziti u prozoru za gledanje. Prva je ispisana adresa File registra, slijedi ime simbola konačno vrijednost simbola. Korisnici mogu gledati kako se vrijednosti simbola mijenjaju pri kretanju kroz program korak po korak. 1. Selektiraj Debugger>Reset i resetiraj aplikaciju. 2. Selektiraj Debugger>Step Into (ili klikni na odgovarajuću ikonu na alatnoj traci) dok ne dođete do sljedeće programske linije: incf
COUNT,F
; uvećaj registar COUNT za 1
3. Koraknite još jednom i vidite da se vrijednost od COUNT u prozoru za gledanje promijenila iz 0 u 1. 4. Krenite dva koraka da bi vidjeli kako se vrijednost PORTB u prozoru za gledanje promijenila iz 0 u 1. 5. Krenite još četiri koraka da bi vidjeli kako se vrijednost od DVAR u prozoru za gledanje promijenila u FF. Možete primijetiti kako su vrijednosti u prozoru za gledanje crvene boje ako su ih promijenile prethodne operacije izvršavanja, a crne boje ako ih nisu mijenjale prethodne operacije izvršavanja. Vidi sliku 16. Slika 16.
82
Napomena:
7.3.6.4
Te promjene, kao i promjene u ostalim registrima možemo pratiti i u sljedećim prozorima: Prozor Specijalnih registra (poglavlje 3.6.4) i Prozor File registra (poglavlje 3.6.5 ). Svaki korisnik će sam za sebe odlučiti koji im je od prozora najkorisniji za upotrebu.
Prozor Registra Specijalnih Namjena (Specal Functin Registers)
Selektiramo View>8 Specal Functin Registers i pojavit će nam se prozor kao na slici 17. Slika 17.
U ovom prozoru možemo vidjeti sve Registre specijalne namjene sa njihovom adresom (prvi stupac Address), imenom (drugi stupac SFR Name) i njihovom binarnom, decimalnom i heksadecimalnom vrijednošću (sljedeća tri stupca). U posljednjem stupcu (Char) će se ispisati znak koji odgovara vrijednosti ASCII tabele.
83
7.3.6.5
Prozor File registra (File Register)
Selektiranjem View>4 File Registers otvorit ćemo prozor za gledanje File registra (slika 19.). Slika 19.
On pokazuje sve vrijednosti na adresama File registra. Pritiskom na tabular Symbolic (označen crvenom bojom) dobit ćemo simbolični prikaz koji je razumljiviji (slika 20.). Registri su sortirani po adresama. U ovom prozoru također možemo upisivati vrijednosti u registre kao što je opisano u poglavlju 3.6.5. Slika 20.
84
7.3.6.6
Upisivanje vrijednosti registara preko prozora
Preko ovog prozora, osim gledanja, možemo upisivati vrijednosti u registre. To možemo na dva načina: 1. Dođemo do polja u koji ćemo upisati vrijednost i pritskom na Enter (na tipkovnici), ili dvostrukim lijevim klikom miša, možemo upisati neku vrijednost. 2. Drugi način je da pritiskom desnog klika miša iznad određenog polja, kad se pojavi meni, odaberemo opciju Fill Registers … .Pojavit će se prozor kao na slici 18. Slika 18.
Tu određujemo od koje do koje adrese ćemo upisivati vrijednosti i koju vrijednost. 7.3.6.7
Simuliranje rada priključka (pinova) (Stimulus Controller)
Simuliranje pinova je korisna simulatorska opcija, posebice kad nam je u programu potrebno izazvati prekid preko npr. RB0 pina ili kad su nam određeni portovi definirani kao ulazni i onda želimo na njih dovesti odgovarajuće poticaje, da bi vidjeli kako naš program reagira na njih. Selektirajte Debugger>Stimulus Controller . U prozoru koji se pojavio, pod tabularom Pin Stimulus, pritisnite Add Row. Prikazat će nam se prozor kao na slici 21. Slika 21.
85
Pod stupcem Type, pritiskom na polje Asynch, odabiremo sinkroni ili asinkroni oblik poticaja. Ako odaberemo asinkroni oblik poticaja Asynch možemo odabrati koji pin želimo stimulirati (pod Pin stupcem) i oblik akcije (stupac Action). Slika 22.
Akcije: •
High
- logička jedinica
•
Low
- logička nula
•
Toggle - izmjenjivanje pri svakom pritiskom na Fire između logičke jedinice i nule
•
Pulse - impulsni poticaj logičke jedinice
Pri završetku uređivanja pritisnite Edit Complete. Prilikom prolaska kroz kôd akcijama Step Into ili Animate, stimulacija pina će se obaviti pritiskom na tipku Fire. Ako odaberemo sinkroni oblik poticaja dobit ćemo poticaj u obliku takta. Slika 23.
86
7.3.6.8
Postavljanje točaka za prekid (Setting Breakpoints)
Točke za prekid koristimo kada želimo da nam se kôd kreće do određene lokacije i tada zaustavi. To se ostvaruje ovako: 1. Selektirajte Debugger>Reset i resetirajte aplikaciju. 2. Pronađite sljedeću liniju kôda i desnim klikom miša kliknite na nju: movlw 0xFF
;vremensko trajanje petlje
3. Iz menija koji se pojavio nakon desnog klika miša, selektirajte Set Break Poin . Stop znak bi se trebao pojaviti na lijevoj margini pokraj te linije kôda (slika 21.). Slika 21.
4. Selektirajte Debugger>Run da bi startali aplikaciju. Trebala bi kratko raditi i zaustaviti se kod linije gdje je postavljena za točka za prekid. Slika 22.
Bilješka:
Nakon zaustavljanja kod točke za prekid, zgodan način za kretanje do neke lokacije u kôdu je da stavimo kursor na bilo koju instrukciju u kôdu i pritiskom desnog klika miša odaberemo Run to Cursor. Trajna točka za prekid nije dodana toj liniji i simbol točke za prekid se neće vidjeti – samo će se strelica kretati do te linije. Ako se ta instrukcija slučajno neće nikad izvršiti, aplikacija će nastaviti raditi sve dok ne selektiramo Debugger>Halt.
87
7.3.6.9
Praćenje kôda (Tracing Code)
Simulirano praćenje može se koristiti za snimanje izvršenja kôda. Ponekad je bolje, da umjesto kretanja kroz linije kôda korak po korak, kôd snimimo u akciji. Omogućimo simulirano praćenje tako da selektiramo Debugger>Settings i odaberemo «Trace/Pins» tabular. Slika 23.
U Trace Option području se nalaze dvije kućice koje se mogu potvrditi kvačicom, a one kontroliraju kakav ćemo dosje dobit simuliranim praćenjem. Kada je gornja kućica potvrđena, simulator skuplja podatke kada simulator radi u «Run» modu. On skuplja podatke sve dok nije zaustavljen točkom za prekid ili «ručno». On će ispisati posljednjih 8192 ciklusa. Ovaj mod je vrlo koristan jer možemo vidjeti zapise instrukcija koje su izvršene do točke za prekid. Ako potvrdimo i drugu kućicu, tada će memorija za praćenje skupiti 8192 ciklusa i prestati skupljati, a aplikacija će biti zaustavljena na točki za prekid. Ovaj mod je koristan da bi vidjeli zapise instrukcija nakon pritiska Run. Selektirajte View>Simulator Trace (slika 20). Simulator praćenja ne prikazuje samo sekvencu izvršene instrukcije nego i druge informacije. Prikazuje još vremensku bazu da svaki ciklus. Podaci koji se čitaju ili upisuju u File registar će biti uhvaćeni i prikazani u SA, SD, DA i DD stupcima kao što se vidi na slici 24. Slika 24.
88
•
Line - pokazuje brojeve ciklusa
•
Addr - adresa programskog brojila (Program Counter)
•
Op - vrijednost instrukcije strojnog kôda
•
Label - prikazuje svaku labelu simbolično
•
Instruction - prevedenu instrukciju (disassembled instruction)
Sljedeća četiri stupca prikazuju vrijednosti podataka koje se upisuju i čitaju u File registre: •
SA - adresa registra za operaciju čitaj (Source Address)
•
SD - podatak pročitan sa registra (Source Data)
•
DA - adresa registra za operaciju piši (Destination Address)
•
DD - podatak upisan u registar (Destination Data)
Ako je koje polje označeno crticama to znači da pri toj instrukciju nije korišten taj registar. •
Cycles - pokazuje vremensku bazu za svaki ciklus. Može se koristiti za mjerenje vremena koje je potrebno da se izvrši rutina. Vrijeme se računa na bazi frekvencije unesene u Debugger>Settings , tabular Clock.
89
8
Programiranje mikrokontrolera PIC 16F877
8.1
Uvod
Programiranje mikrokontrolera 16F877, koji se nalazi na Easy-PIC razvojnom sustavu, se radi preko programa IC-Prog. Easy-PIC •
Sustav podržava 8, 18, 28 i 40 pinske mikrokontrolere (isporučuje se sa PIC16F877)
•
Na ploči je jasno označen svaki kratkospojnik, element ili pin cime je znatno olakšan rad.
•
Na sustavu je moguće isprobati većinu industrijskih potreba: temperaturne kontrolere, brojače, tajmere...
•
Primjeri asembleru cine sam početak rada vrlo efikasnim.
IC-Prog Programski paket koji koristimo za programiranje mikrokontrolera. Program se nalazi na CD-u, ali preporučamo da se «skine» novija verzija sa Interneta. http://www.ic-prog.com/index1.htm
pod Download .
Napomena: Korisnici Windows NT/2000/XP operativnog sustava morat će još «skinuti» datoteku icprog.sys i kopirati je u istu mapu gdje i icprog.exe.
8.2
Instalacija sustava pri programiranju programskim paketom IC-PROG
Kratkospojnici (Jumperi) JP3, JP4 i JP5 MORAJU biti postavljeni!
Postupak (uz sliku 1.): 1. Prvo što treba uraditi je priključivanje sustava preko serijskog kabla na računalo. Na računalu mora biti slobodan jedan COM port (najvjerojatnije COM 1 kod novijih računala ili COM2 kod starijih modela) na kojeg se priključuje serijski kabel iz kompleta. 2. Sljedeći korak je priključivanje napajanja. Napajanje može biti i istosmjerno i izmjenično već prema izboru od 9 do 12 Volti. 3. Kopirati ICprog.exe sa CD-a na tvrdi disk računala. Najbolje je napraviti mapu PIC i u njemu posebnu mapu ICPROG čime će sve biti preglednije. (npr. C:\PIC\ICPROG ). Kopiranjem programa u spomenutu mapu je završena njegova instalacija. Kopirajte datoteku icprog.sys u mapu ako koristite Windows NT/2000/XP.
90
Slika 1.
8.3
Programiranje mikrokontrolera programskim paketom IC-PROG (korišten IC-Prog verzija 1.05C) 1. Pokrenite IC-prog. Ukoliko je to prvo pokretanje ICPROG-a na računalu, pojavit će se prozor kao na slici 2.
Slika 2.
91
Potrebno je definirati hardwer preko kojeg se mikrokontroler na ploči programira. Kako je na ploči ugrađen JDM programator njega treba odabrati. Opcija PORTS se bira na osnovu slobodnog porta na računalu korisnika. Obično je slobodan COM1 , pa njega i treba selektirati. Pritisnite OK. Slika 3.
Pojavit će se IC-Prog sučelje kao na slici 3. Do opcije Hardware setting možemo doći selektiranjem Settings>Hardware, ako želimo nešto naknadno promijeniti. VAŽNO:
Korisnici Windows NT/2000/XP OS moraju još namjestiti dodatne parametre za normalan rad. Selektirajte Settings>Options i u tabularu Misc potvrdite prazni prozorčić kod opcije Enable NT/2000/XP Driver kao na slici 4. Pritisnite OK.
Slika 4.
Program će se restartati i promjene će postati važeće. 92
2. Kada se definira hardwer, sljedeći korak je odabir mikrokontrolera koji ćemo programirati. Klikom na Settings > Device> Mikrocip PIC bira se mikrokontroler PIC16F877 koji se koristi na razvojnom sustavu PIC-easy kao na slici 5. Slika 5.
3. Sljedeći korak je učitavanje HEX datoteke (mikrokontroler prima program u toj formi). Selektirajte ikonicu Open (ili preko odabira File>Open) i pojavit će nam se prozor za traženje i odabir datoteke (slika 6.). Slika 6.
Učitavanje programa se vrši klikom miša na odgovarajuću datoteku (ime_datoteke.hex) i pritisnite Open . Učitani program se pojavljuje u spremniku (buffer) i spreman je za prijenos u mikrokontroler.
Napomena:
HEX datoteku pravi bilo koji asemblerski, BASIC ili C kompajler.
93
4. ISP prekidač na razvojnom sustavu prebaciti u položaj za upisivanje/programiranje (u modu za upisivanje svijetli dioda PROGRAM MODE ON). Slika 7.
5. Klikom na ikonu koja se nalazi na sredini alatne trake počinje programiranje mikrokontrolera. Drugi način je da selektiramo sa menija Command>Program All (slika 8.) Slika 8.
94
Kad počne programiranje pojavit će se sljedeća slika: Slika 9.
6. Nakon što je programiranje završeno isključiti prekidač ISP (gornji desni ugao razvojnog sustava), kao što je prikazano na slici ispod. Slika 10.
Napomena:
Ne treba vaditi serijski kabel iz konektora za programiranje, što je od velike pomoći prilikom čestog programiranja!
95
9
Opis razvojnog sustava
9.1
Napajanje
Slika 11.
Za ispravan rad svih elemenata na razvojnom sustavu potrebno je osigurati stabilnih +5V. Kod PIC-Easy sustava, to je postignuto upotrebom naponskog stabilizatora LM7805. Zbog povećane disipacije do koje dolazi pri većem opterećenju, stabilizator je postavljen na odgovarajući hladnjak. Slika 12.
9.2
Led diode
Sustav ima 32 diode koje su povezane na pinove porta A, B, C, D i E. Ove diode se obično koriste u prvobitnoj fazi rada, ali i kasnije za indikacije dešavanja u programu. Svaka grupa dioda se uključuje/isključuje preko prekidača SW3. Način povezivanja LED dioda sa mikrokontrolerom prikazan je na narednoj slici. Napomena:
LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu imati logičku nulu da bi dioda svjetlila.
96
Slika 13.
Slika 14.
9.3
Tipkala
Sustav posjeduje jedano RESET tipkalo i 24 tipkala za simuliranje komandnih ulaza sustava koji su povezani na pinove RE0, RE1 i portove A, B i C. Shematski prikaz veze tipkala i mikrokontrolera dat je na sljedećoj slici.
97
Slika 15.
Oznaka iznad svakog predstavlja naziv pina na koji je odgovarajuće tipkalo priključeno. Da bi se tipkalo koristilo odgovarajući pin portova A, B, C i/ili E mora se definirati kao ulazni. Kratkospojnikom u lijevom donjem kutu razvojnog sustava definira se da li je prilikom aktiviranja tipkala vrijednost odgovarajućeg pina 5V ili 0V. Ako je kratkospojnik u gornjem položaju, onda će se prilikom aktiviranja izvjesnog tipkala na odgovarajući pin doći logička jedinica, a ako je u donjem položaju logička nula. Slika 16.
9.4
LCD zaslon (display)
Predviđen je klasičan LCD zaslon sa 2x16 karaktera. Ipak, to nije ograničenje jer se može koristiti bilo koji zaslon koji ima isti tip komunikacije sa mikrokontrolerom. Kontrast zaslona se regulira potenciometrom u donjem lijevom kutu razvojnog sustava. LCD zaslon se može priključiti ili na port B ili na port D. Naredna slika prikazuje shemu povezivanja LCD-a na port D i port B mikrokontrolera PIC16F877. Ako su pinovi LCD zaslona sa donje strane, korisnik treba da zalemi kontakt letvicu na mjestu odgovarajućeg porta u dnu razvojnog sustava, u okviru pravokutnika predviđenim za LCD zaslon!!!.
98
Slika 17.
Slika 18.
Izgled postavljenog LCD zaslona na port B.
9.5
Izgled postavljenog LCD zaslona na port D.
Sedamsegmentni zaslon
Sedamsegmentni zaslon se sastoji od četiri znamenke čije se osvježavanje i ispis vrši preko porta B u kombinaciji sa portom A. Preko DIP prekidača SW2, definiraju se znamenke koje će biti uključene, a koje ne. Npr. recimo da treba omogućiti prikazivanje krajnje lijeve znamenke. Prebacivanjem četvrtog prekidača na SW2 u radni režim (ON) znamenka sedamsegmentnog zaslona (DIS1, krajnje lijevo znamenka) će pokazivati vrijednost koja je definirana vrijednostima pinova porta B (slika 20.). Slično se radi kada su u pitanju znamenke DIS2, DIS3 i DIS4. Naredna slika prikazuje način povezivanja sedamsegmentnih zaslona sa mikrokontrolerom.
99
Slika 19.
Slika 20.
9.6
Analogno-digitalni pretvarač (A/D converter)
Mikrokontroler PIC16F877 koji se koristi na razvojnom sustavu, u sebi ima implementirane 10 bitne A/D pretvarače. U svrhu prezentacije izdvojena su dva pina RA2 i RA3 sa kojih se mogu očitavati analogne vrijednosti napona koji se određuju potenciometrima P2 i P3.
100
Slika 21.
Ukoliko se želi očitavanje vrijednosti potenciometra P2 neophodno je staviti kratkospojnik iznad odgovarajućeg potenciometra. Prekidač na RA2 na SW1 mora biti isključen (donji položaj). Primjer na slici 19. pokazuje očitavanje vrijednosti napona na potenciometru P2 kao i položaj prekidača SW1 u tom slučaju. Slika 22.
9.7
RS-232 komunikacija
RS-232 komunikacija je namijenjena komunikaciji dva uređaja na udaljenosti ne većoj od 10 m. Najčešće se preko nje komunicira sa računalom. Kratkospojnici RX i TX kontroliraju na koji pin se komunikacija spaja. Ako se koriste DIP40 i DIP28 mikrokontroleri treba ih spojiti na RC6 i RC7, a u slučaju DIP18 mikrokontrolera na RB1 i RB2. Slika 20. prikazuje vezu računala i razvojnog sustava.
101
Slika 23.
Slika 24.
9.8
Digitalni termometar - DS1820
Dallas-ov DS1820 digitalni termometar, sa mogućnošću mjerenja temperature od –55 do 125°C, može poslužiti za mjerenje temperature okoline i eksperimentiranje. Vrlo je točan i lagan za povezivanje. Postavlja se u podnožje sa tri pina neposredno ispod konektora za napajanje razvojnog sustava. Na slici 26. ilustrirano je povezivanje digitalnog termometra i mikrokontrolera na razvojnom sustavu.
102
Slika 25.
Digitalna vrijednost temperature se šalje ili na pin RA5 ili RE2 u zavisnosti od toga u kom položaju se nalazi kratkospojnik koji se nalazi neposredno iznad čipa DS1820. U prikazanom primjeru temperatura će se očitavati preko pina RA5. Polukrug oko tropinskog podnožja označava orijentaciju DS1820 prilikom postavljanja u podnožje. Slika 26.
9.9
Pull-up/pull-down otpornici na portovima
Stavljanjem kratkospojnika u gornji položaj pinovi odgovarajućeg porta se postavljaju na logičku jedinicu (pull-up). Ukoliko je kratkospojnik u donjem položaju, pinovi porta su na logičkoj nuli (pulldown). Izgled dijela razvojnog sustava prilikom redefiniranja pinova porta A na logičku jedinicu, a pinova porta B na logičku nulu dat je na slici 27., a shematski je predstavljeno slikama ispod.
103
Slika 27.
Slika 28.
Slika 29.
104
Port B je na PULL-DOWN otpornicima, što znači da su ti pinovi na logičkoj nuli sve dok se na njih ne postavi željena vrijednost. Port A je preko SW1 povezan na otpornu mrežu. Ako SW1 nije u ON položaju, odgovarajući pin nema ni pull-up ni pull-down otpornik na sebi . Ovo je jako bitno jer omogućuje da se port A koristi u analognom modu kao A/D pretvarač. DIP prekidači na sustavu omogućavaju veliku fleksibilnost. Njihovim korištenjem pinovi portova se povezuju sa različitim elementima sustava: SW1 - uključuju / isključuju PULL-UP ili PULL-DOWN otpornike porta A i pinova RE0 i RE1 porta E. SW2 - uključuje / isključuje sedamsegmentne zaslone SW3 - uključivanje / isključivanje led dioda na portovima A, B, C, D i E.
9.10
Direktan pristup portovima
Svi pinovi PIC-a se mogu definirati kao ulazni ili kao izlazni. Pinovima portova moguće je pristupiti direktno sa desne strane razvojnog sustava preko «flat» kabla. Na taj način se mogu očitavati ili unositi odgovarajuće vrijednosti na portove sa vanjskih elemenata. Slika 30.
105
10
Primjeri
10.1
Uvod
U ovom poglavlju su prikazani primjeri gotovih programa koji bi vam trebali pomoći da brže savladate programiranje u asemlerskom programu. Svaki ovaj primjer možete isprobati u simulatoru MPLAB IDE i preko programa IC-Prog upisati na mikrokontroler PIC 16F877, koji se nalazi na razvojnom sustavu. Detaljni opis postupka je opisan u prethodnim poglavljima, ali evo jedan kratak podsjetnik: 1. Pokrenite MPLAB IDE. 2. Selektirajte File>New, i u novom prozoru prenesite akcijom Copy/Paste primjer izvornog kôda. 3. Selektirajte File>Save, i spremite datoteku kao ime_datoteke.asm. 4. Izradite projekt preko Čarobnjaka za projekt (vidi poglavlje 7.3). 5. Izgradite projekt selektiranjem Project>Build All. Nakon uspješne izgradnje kôda program se može ispitati u simulatoru ili ga možemo odmah upisati na naš mikrokontroler PIC 16F877. Potrebna .hex datoteka je generirana u istoj mapi u kojoj smo izradili projekt i možemo ju preko programatora IC-Prog upisati u PIC 16F877. 6. Pokrenite IC-Prog. 7. Selektirajte File>Open File i odaberite ime_datoteke.hex datoteku u radnoj mapi. 8. Nakon postavljanja radnih uvjeta razvojnog sustava, selektirajte Command>Program All. 9. Programiranje je time je završeno i potrebno je isključiti ISP prekidač. Na razvojnom sustavu se mogu vidjeti rezultati. Prije primjera nalazi se kratak podsjetnik na makroe i potprograme. Napomena:
10.2
LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu imati logičku nulu da bi dioda svjetlila.
Makro naredbe
Makro naredbe se definiraju preko direktive macro u okviru koje se zadaje ime makroa i po potrebi argumenti. Ime_makroa
macro niz instrukcija niz instrukcija endm
argument1,arg2,…
Definicija makroa se mora nalaziti ispred mjesta gdje se koristi. Kada se u okviru programa pojavi ime makroa, on se zamjenjuje nizom instrukcija koje su navedene prilikom definiranja makroa. Najjednostavnija primjena makroa je davanje imena nizu naredbi koje se ponavljaju. Kao primjer može poslužiti odabir banke SFR registra. PIC16F877 ima četiri banke: Bank 0, Bank 1, Bank 2, Bank 3. Pristupa im se preko RP1 iRP0 bitova STATUS registra.
106
RP1:RP0 00
Bank 0
01 10 11
1 2 3
bank.inc (spremiti kao "bank.inc" notepad-u). BANK0 macro bcf bcf endm
STATUS,RP0 STATUS,RP1
bcf bsf endm
STATUS,RP0 STATUS,RP1
bsf bcf endm
STATUS,RP0 STATUS,RP1
bsf bsf endm
STATUS,RP0 STATUS,RP1
BANK1 macro
BANK2 macro
BANK3 macro
Ovako napisani makroi se spremaju u posebnu datoteku sa nastavkom .INC. Datoteka ima nastavak .INC asocirajući da se radi o INCLUDE (u prijevodu uključi-umetni u program) datoteci. U sljedećim primjerima će se koristiti samo banke 0 i 1, dok će se banka 3 i 4 koristiti samo kod upisa podatka u EEPROM, odnosno FLASH programsku memoriju (raspored File registrima po bankama se nalazi u prilogu 8.10).
10.3
Potprogrami
Potprogram predstavlja niz naredbi koji počinje labelom, a završava se naredbom return ili retlw. Glavna razlika u odnosu na makro je to što se niz instrukcija potprograma nalazi samo na jednom mjestu u okviru programske memorije. Ovaj niz instrukcija se izvršava svaki put kad se navede naredba call Ime_potprograma. Kada program stigne do naredbe return nastavlja se izvršavati od sljedeće naredbe u glavnom programu kod koje je potprogram bio pozvan. Definicija potprograma se može nalaziti i prije i poslije mjesta poziva. Labela
;poziv potpr. se obavlja sa "call Labela" niz instrukcija niz instrukcija niz instrukcija return ili retlw Napomena:
Osnovna razlika između makroa i potprograma je u tome, da se na mjesto makroa uključuje njegov kôd (jednostavno se može reći da pomaže programeru manje kucati) i da oni mogu imati svoje argumente dok potprogram troši manje memorije, ali nema svoje argumente koje može pozivati. 107
10.4
Primjeri
10.4.1
Program za aktiviranje porta B
U ovom primjeru definiramo pinove porta B kao izlazne, i na njegove pinove dovodimo u stanje logičke jedinice.
PROCESSOR 16F877 #include"p16f877.inc" #include"bank.inc"
;deklaracija i konfiguracija procesora ;memorijske adrese u slovima ;ukljucivanje makroa umjesto bsf
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Petlja
BANK1 movlw movwf
0x00 TRISB
BANK0 movlw movwf
0xFF PORTB
;bcf STSTUS,RP1 ; bsf STSTUS,RP0 ;upisi 0 u radni spremnik ;upisi u reg. TRISB-definiramo ;pinove portaB kao izlazne ;bcf STATUS,RP0 ;b'11111111' ;svi pinovi porta B odlaze u 1
goto
Petlja
;labela petlje
End
;nakon reseta su svi pinovi ulazni
Bez makroa bank.inc to bi izgledalo ovako:
PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Petlja
bcf bsf movlw movwf
STASTUS,RP1 STASTUS,RP0 0x00 TRISB
bcf movlw movwf
STATUS,RP0 0xFF PORTB
;BANKA 1 ;upisi 0 u radni spremnik ;upisi u reg. TRISB-definiramo ;pinove portaB kao izlazne ;BANKA 0 ;b'11111111' ;svi pinovi porta B odlaze u 1
goto
Petlja
;labela petlje
End
;nakon reseta su svi pinovi ulazni
108
10.4.2
Način upisivanja konstanti binarno movlw b'00101100' heksadecimalno movlw h'2c' ili movlw 0x2c decimalno movlw d'44' ili movlw .44
10.4.3
Naredbe uvjeta
Ovo je program koji testira ulazni pin RC0 i ako je u jedinici setira izlazni RB0, i ako je RC1 u nuli setira RB1 i obratno. PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org goto
Main
10.4.4
BANK1 movlw movwf movlw movwf BANK0 btfss bcf btfsc bsf btfss bsf btfsc bcf goto end
0x00 Main b'00000000' TRISB b'11111111' TRISC PORTC,0 PORTB,0 PORTC,0 PORTB,0 PORTC,1 PORTB,1 PORTC,1 PORTB,1 Main
;kontrola 1 na RC0 ;ako je nula resetira RB0 ;kontrola 0 na RC0 ;ako je jedinica setira RB0 ;kontrola 0 na RC1 ;ako je nula setira RB1 ;kontrola 1 na RC1 ;ako je jedinica setira RB1
Zbrajanje i oduzimanje, indirektno adresiranje
Jednostavni primjeri zbrajanja i oduzimanja konstanti između registra opće namjene i radnog registra w te indirektno adresiranje koristeći INDF i FSR registre. PROCESSOR 16f877 #include "p16f877.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org goto
0x00 Main 109
Main
clrf clrf movlw addlw sublw addlw movf
FSR INDF .65 .120 .150 .120 0x20,0
addlw movlw movwf movf
.12 0x21 FSR INDF,0
addlw goto end
.20 Main
;65 → w ;65 + 120 = 185 → w ;150 - 185 = .221 ili 0xdd → w ;35 + 221 = 85 → w ;vrijednost sa adrese 0x20 ;u w. 0x20=.0 ;0 + 12 → w ;0x21 → w ;0x21 → FSR ;vrijednost reg. INDF→w ;INDF sadrži vrijednost :registra 0x21, a reg. FSR ;sadrži njegovu adresu ;0 + 20 = .20 → w
Kada u registar FSR upišemo neku adresu(npr. 0x21), tada će registar INDF sadržavati vrijednost (podatak) zapisan na toj adresi. Ako je u FSR registar upisana adresa npr. 0x22 , a onda u INDF registar upišemo vrijednost d'55', tada će se u registru 0x22 nalaziti podatak d'55'. Primjer na koji način računalo oduzima dva binarna broja: 56 – 34 je isto što i 56 + (–34) 56 00111000 34 00100010 prvi komplement 11011101 + 1 drugi komp. (-34) 11011110 +56 00111000 22 100010110
10.4.5 Usporedba (komparacija) Oduzimanjem konstante od sadržaja spremnika PORTB djelujemo na stanje STATUS registra, odnosno na njegov CARRY i ZERO bit i to koristimo za upravljanje. PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org BANK1 movlw movwf clrf BANK0 clrf goto
0x00
PORTC Main
movlw subwf
.100 PORTB,0
b'11111111' TRISB TRISC
Main ;W = portb - 100 110
btfsc bsf
STATUS,Z PORTC,0
;da li je rez=0 ;portb=100, setiramo RC0
btfsc bsf btfsc bcf
STATUS,C PORTC,1 STATUS,C PORTC,2
;da li je portb>100 ;portb>100, setiramo RC1 ;da li je portb>100 ;portb>100, resetiramo RC2
btfss bcf btfss bsf goto end
STATUS,C PORTC,1 STATUS,C PORTC,2 Main
;da li jeportb<100, ;portb>100, resetiramo RC1 ;da li je portb<100 ;portb<100, setiramo RC2
Primjer sa mogućim stanjem PortB registra:
10.4.6
Prije instrukcije: Poslije instrukcije:
PortB = 3, W = 2, C = x, Z = x PortB = 3, W = 1, C = 1, Z = 0
pozitivan rezultat
Prije instrukcije: Poslije instrukcije:
PortB = 2, W = 2, C = x, Z = x PortB = 2, W = 0, C = 1, Z = 1
rezultat je nula
Prije instrukcije: Poslije instrukcije:
PortB = 1, W = 2, C = x, Z = x PortB =1, W = 0xFF, C = 0, Z = 0
negativan rezultat
Inkrementiranje i dektrementiranje
Dolaskom impulsa na pin RC0 uvećava se za jedan registar PORTB, a dolaskom impulsa na pin RC1 smanjujemo vrijednost registra za jedan. Vrijednost registra se ispisuje na izlaznim pinovima porta B. PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _W DT_OFF & _PWRTE_ON & _XT_OSC org goto Main
BANK1 Clrf Movlw Movwf BANK0 Clrf Btfsc Incf Btfsc Decf Goto end
0x00 Main TRISB b'11111111' TRISC PORTB PORTC,0 PORTB PORTC,1 PORTB Main
;ili 0xff
;RC0 uvećava PortB ;RC1 smanjuje PortB
Dolaskom impulsa na pin RC0 smanjujemo vrijednost GPS registra 0x20 dok ne dođe do nule i tada mu upisujemo vrijednost .16 i dalje vrtimo petlju.
111
PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Main
10.4.7
org BANK1 Movlw Movwf BANK0 Movlw Movwf Goto
0x00
.12 0x20 Main
;.12→w ;prvi slobodan GPR registar u BANK0
btfsc Decfsz
PORTC,0 0x20
;Ispituje stanje RC0 ;dekrementira, preskače sljedeću ;instrukciju kada dođe do nule
goto bsf goto end
Main 0x20,4 Main
0xff TRISC
;definiranje portova
;setira 4 bit - ekvivalentno .16
Inicijalizacija Porta A i Porta E
Port A (RA<5:0>) i port E (RE<2:0>) su ulazno/izlazni pinovi koji mogu biti definirani kao analogni i digitalni priključnice (portovi). Ako ih želimo koristiti kao digitalne ulazno/izlazne pinove moramo to definirati u registru ADCON1. Inicijalizacija se obavlja ovim kratkim kôdom: BCF BCF CLRF
STATUS, RP0 STATUS, RP1 PORTA
BSF MOVLW MOVWF MOVLW
STATUS, RP0 0x06 ADCON1 0xCF
MOVWF
TRISA
MOLW MOVWF
Napomena:
B'00000111' TRISE
;Bank0 ;inicijalizacija PORTA tako ;da prvo očistimo izlazne ;rezultate podataka ;Bank 1 ;konfiguriranje svih ;pinova kao digitalne ;vrijednost korištena ;da odredimo koji su ;ulazno/izlazni pinovi ;RA<3:0> kao ulazni ;RA<5:4> kao izlazni ;TRISA<7:6>su uvijek ;čitani kao ’0’. ;pinovi RE<2:0> se jedino ;mogu koristiti kao u/i pinovi ;ovom vrijednošću su definirani ;kao ulazni
Na razvojnom sustavu su na testne LED diode priključeni sljedeći pinovi PORTA RA<5:0> i PORTE RE<1:0>.
112
10.4.8
EEPROM - čitanje podataka sa memorije
Da bi pročitali neki podatak s neke adrese iz EEPROM-a, dovoljno je kopirati primjer ovog kôda: BSF BCF MOVF MOVWF BSF BCF
STATUS, RP1 STATUS, RP0 ADDR, W EEADR STATUS, RP0 EECON1, EEPGD
BSF BCF MOVF
EECON1, RD STATUS, RP0 EEDATA, W
10.4.9
;Bank 2 ;adresa s koje ;ćemo čitati ;Bank 3 ;pokazuje na memoriju ;podataka EEPROM ;početak operacije čitanja ;Bank 2 ;W = EEDATA
EEPROM - upis podatka u memoriju BSF BSF BTFSC GOTO BCF MOVF MOVWF MOVF MOVWF BSF BCF
STATUS, RP1 STATUS, RP0 EECON1, WR $-1 STATUS, RP0 ADDR, W EEADR VALUE, W EEDATA STATUS, RP0 EECON1, EEPGD
BSF
EECON1, WREN
BCF
INTCON, GIE
MOVLW MOVWF MOVLW MOVWF BSF
0x55 EECON2 0xAA EECON2 EECON1, WR
BSF
INTCON, GIE
BCF
EECON1, WREN
;Bank 3 ;čeka na ;završetak upisa ;Bank 2 ;adresa na koju ;ćemo pisati ;podatak koji ;ćemo upisati ;Bank 3 ;pokazuje na memoriju ;podataka EEPROM ;omogućuje upis ;/onemogućuje prekide ;- ako su već ranije omogućeni ;\u suprotnom izbacite tu liniju ;upisuje vrijednost 55h ;u registar EECON2 (prvi ključ) ;upisuje vrijednost AAh ;u reg. EECON2 (drugi ključ) ;počinje operacija upisa ;/omogućuje prekide ;- ako ih koristimo, ;\ u suprotnom izbacite ;onemogućuje pisanje
10.4.10 FLASH programska memorija - čitanje podataka Mikrokontroler PIC16F877 može koristiti FLASH programsku memoriju za spremanje podataka. Ta opcija omogućuje čitanje i upisivanje 14-bitnog podatka u programsku memoriju. Taj podatak neće smetati pri izvršavanju instrukcija u programskoj memoriji jer će se taj podatak, pri izvršenju instrukcija, biti prepoznat kao nedopuštena/nepravilna instrukcija i biti će izvršena NOP operacija. Registri: EEADRH : EEADR:
- 2 bajtna riječ - sadrži 13-bitnu adresu lokacije
EEDATH : EEDATA:
- sadrži 13-bitni podatak koji čitamo ili ćemo upisati u programsku memoriju
113
Čitanje se vrši na sljedeći način: BSF MOVF MOVWF MOVF MOVWF BSF BSF
STATUS, RP0 ADDRL, W EEADR ADDRH,W EEADRH STATUS, RP0 EECON1, EEPGD
BSF NOP NOP BCF MOVF MOVWF MOVF MOVWF
EECON1, RD STATUS, RP0 EEDATA, W DATAL EEDATH,W DATAH
;Bank 2 ;upisujemo ;adresu sa ;koje ćemo ;čitati podatak ;Bank 3 ;pokazuje na FLASH ;programsku memoriju ;početak operacije čitanja ;potrebna su mu dva NOP (ciklusa) ;Bank 2 ;DATAL = EEDATA ;DATAH = EEDATH
10.4.11 FLASH programska memorija - upisivanje podataka BSF BCF MOVF MOVWF MOVF MOVWF MOVF MOVWF MOVF MOVWF BSF BSF
STATUS, RP1 STATUS, RP0 ADDRL, W EEADR ADDRH, W EEADRH VALUEL, W EEDATA VALUEH, W EEDATH STATUS, RP0 EECON1, EEPGD
BSF
EECON1, WREN
BCF
INTCON, GIE
MOVLW MOVWF MOVLW MOVWF BSF NOP NOP
0x55 EECON2 0xAA EECON2 EECON1, WR
BSF
INTCON, GIE
BCF
EECON1, WREN
;Bank 2 ;upisujemo adresu ;željene lokacije ;u programskoj ;memoriji ;upisujemo vrijednost ;u program ;na željenoj memorijskoj ;lokaciji ;Bank 3 ;pokazuje na FLASH ;programsku memoriju ;omogućuje upis ;/onemogućuje prekide ;- ako su već ranije omogućeni, ;\u suprotnom izbacite tu liniju ;upisuje 55h u ;registar EECON2 ;upisuje AAh u ;registar EECON2 ;počinje operaciju upisa ;mikrokontroleru su potrebna ;dva NOP-a da se spremi za ;upis ;/omogućuje prekide ;- ako ih koristimo, ;\u suprotnom izbacite tu liniju ;onemogućuje upis
114
10.4.12 Zbrajanje dva 16 bitna broja PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC LSB1 MSB1 LSB2 MSB2
equ equ equ equ
0x20 0x21 0x22 0x23
org goto
0x00 Main
movf addwf btfsc
LSB1,w LSB2,f STATUS,C
incf movf addwf end
MSB2,1 MSB1 MSB2,f
;argument 1, niži bajt ;argument 1, viši bajt ;argument 2, niži bajt ;argument 2, viši bajt ;reset vektor
Main ;zbroji i spremi u LSB2 ;kontrola carry bita, preskoči ;za nula ;inkrementiraj i spremi u MSB2 ;zbroji ga sa MSB2
10.4.13 Oduzimanje dva 16 bitna broja PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC LSB1 MSB1 LSB2 MSB2
equ equ equ equ
0x20 0x21 0x22 0x23
movf subwf btfss decf movf subwf end
LSB1,W LSB2,1 STATUS,C MSB2,1 MSB1 MSB2,1
;oduzmi i spremi u LSB2 ;kontrola carry bita ;dekrementiraj i spremi u MSB2 ;zbroji ga sa MSB2
10.4.14 Sortiranje sa indirektnim pristupom Podaci sa lokacija od 0x20 do 0x29 se uspoređuju i sortiraju po veličini. Najveći se upisuje na lokaciju 0x30 i redom ostali po veličini do lokacije 0x39. PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC cblock 0x40 bi,adr,nadr,rsort,sort,asort endc movlw .10
;sprema 10 u w 115
movwf movlw movwf
rsort 0x30 asort
;interacija snimanja ;sprema h'30' u w ;početna adresa sortiranja
movlw movwf movlw movwf movwf movf movwf
.9 bi 0x20 nadr FSR INDF,0 sort
;9 Æ w ;broj interacija traženja najvećeg
clrf incf subwf btfsc bsf subwf btfsc goto decfsz goto goto
0x20 FSR INDF,0 STATUS,C 0x2a,0 INDF,0 0x2a,0 naj bi prva upis
naj
movf movwf movf movwf decfsz goto goto
FSR,0 nadr INDF,0 sort bi prva upis
upis
movf movwf clrf movf movwf movf movwf incf decfsz goto end
nadr,0 FSR INDF asort,0 FSR sort,0 INDF asort rsort poc
poc
prva
;početna adresa najvećeg = h'20' ;spremanje u FSR registar, broj 0x20 ;podatak se sprema u sort, početna ;najveća vrijednost ;cisti spremnik ;sljedeća adresa : 0x21 ;0x21 - 0x20 indirektno →w ;usporedba carry bita ;upis statusa u pomoćni registar 0x2a ;vrijednost lokacije 0x21 u w ;upisivanje najvećeg broja
;indirektno, u njega guramo adresu, upis ;upis u nadr ;sprema vrijednost u sort ;upis u sort ;dekrement
;upis najvećeg u FSR ;cisti najveću vrijednost ;asort u FSR ->0x30 ;na novu adresu ;upis najvećeg na 1. adresu 0x30 ;uvećavanje adrese ;umanjivanje broja interacija
10.4.15 Interupt U ovom programu omogućujemo prekid uslijed promjene porta B, prekoračenja TMR0 i prekid preko pina RB0. PROCESSOR 16F877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC org goto org goto
0x00 Main 0x04 Inter
;interupt vektor
116
Main
clrf BANK1 movlw movwf
TMR0 B'01000000' OPTION_REG
;unosimo bin podatak ;interrupt preko RB0 na ;rastući brid ;setira bitove za E prekida ;global E ;brojač E ;vanjski E ;port change E
BANK0 bsf bsf bsf bsf
INTCON,7 INTCON,T0IE INTCON,INTE INTCON,RBIE
Petlja
movf movwf movlw movwf goto
PORTB,0 0x20 .10 0x0d Petlja
;stalno upisuje .10 samo da vrti ;i čekamo prekid
Inter
bcf movlw movwf bcf bcf bcf retfie
INTCON,GIE 0xff 0x0d INTCON,T0IF INTCON,INTF INTCON,RBIF
;0 na GIE-globalni interupt ;prekid ;prekid ;\ ;- poništava prekide ;/ ;naredba RETURN, vraća program ;na mjesto prekida
end Kada dođe do prekida, program skače na vektor/adresu prekidne rutine i onemogućuju se daljnji prekidi.
10.4.16 Preskaler - rad sa TMR0 Prvo napravimo makro WAIT. Spremimo ga kao wait.inc. CONSTANT PRESCstd = .1 WAIT
macro movlw call endm
timeconst_1 timeconst_1 WAITstd
WAITX
macro movlw movwf movlw call endm
timeconst_2,PRESCEXT timeconst_2 WCYCLE PRESCEXT WAIT_X
WAITstd
movwf movlw clrf BANK1 movwf BANK0
WCYCLE .1 TMR0
bcf btfss
INTCON,T0IF INTCON,T0IF
WAIT_X
WAITa WAITb
;upisi u spremnik ;timeconst_2 → w
;prescaler 1:4 (ili PRESCstd)
OPTION_REG ;briše bit ;preskoči sljedeću liniju ;ako je 1 inače goto 117
goto decfsz goto RETURN
WAITb WCYCLE,1 WAITa
;vrti se 255 puta ;dekrementira .100 u .99 ;vraća ga u glavni program
Ovaj makro će pripremiti parametre koji će definirati dužinu pauze nakon pozivanja potprograma WAIT ili WAIT_X. Pauza se dobiva tako da se broje prekoračenja TMR0 brojača (prijelaz iz .255 u .0). Kod prekoračenja se u registru INTCON,T0IF (2 bit) javlja zastavica. Prema tome da bi dobili vremenski član - Timer - nije potrebno ići u prekidnu rutinu i brojat prekide, nego je dovoljno brojati zastavice (flag bit). Ako negdje u programu pozovemo macro Wait tako da upišemo WAIT .100 preskaler u OPTION registru će biti postavljen na '1' (omjer TMR0 1:4, što znači da će TMR0 inkrementirati svaki 4 takt – to je određeno konstantom PRESCstd) i brojat će (dekrementirat) 100 prekoračenja i vratiti se u glavni program. Timer će trajati 4*100*256= 102400 ciklusa. Pri taktu od 4MHz, jedan ciklus traje 1µs. To iznosi 102,4 ms. Ako negdje u programu pozovemo macro Wait tako da upišemo WAITX .244, .3 preskaler u OPTION registru će biti postavljen na '7' (omjer TMR0 1:256, što znači da će TMR0 inkrementirati svaki 256 takt – to je određeno argumentom PRESCext) i brojat će (dekrementirat) 100 prekoračenja i vratiti se u glavni program. Timer će trajati 16*244*256=999424 µs što je 0,999424 s. Približno ≈1s. Pri taktu od 4MHz kada jedan ciklus traje 1µs.
Program. PROCESSOR 16F877 #include "p16f877.inc" #include "wait.inc" #include "bank.inc" __CONFIG _CP_OFF&_WDT_OFF&_PW RTE_ON&_XT_OSC cblock 0x20 WCYCLE, PRESC wait endc BANK1 clrf TRISC BANK0 petlja
btfsc bsf WAIT bcf goto
PORTB, 0 PORTC, 0 .100 PORTC, 0 petlja
;poziv macro
end
118
10.4.17 Dvosmjerna vrtnja motora Programom mijenjamo smjer vrtnje trofaznog motora (RA0 – tipkalo T1, RA1 – tipkalo T2, RA2 – tipkalo STOP, RB0 – sklopnik M1, RB1 – sklopnik M2). PROCESSOR 16F877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC BANK1 clrf BANK0
TRISB
btfsc goto btfss goto
PORTA,0 prva PORTB,0 resetm1
btfsc goto btfsc goto bsf
PORTA,2 resetm1 PORTB,1 resetm1 PORTB,0
;i nije STOP
btfsc goto btfss goto
PORTA,1 druga PORTB,1 resetm2
;kontrola T2
btfsc goto btfsc goto bsf goto
PORTA,2 resetm2 PORTB,0 resetm2 PORTB,1 m1
;i nije STOP
resetm1
bcf goto
PORTB,0 m2
;iskljuci M1
resetm2
bcf goto
PORTB,1 m1
;iskljuci M2
m1
prva
m2
druga
;kontrola T1 ;ili M1
;i nije M2 ;ukljuci M1
;ili M2
;i nije M1 ;ukljuci M2
end
10.4.18 Dioda Na RA1 pin je spojena LED dioda koja svijetli 2 s, pa 1s ne svijetli, i onda opet svijetli 2 s itd. 1. NAČIN - vremensko kašnjenje na bazi interapta TMR0 PROCESSOR 16F877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
119
con main
org goto org goto equ BANK1 movlw movwf BANK0 bsf BANK1 movlw movwf
movlw movwf clrf petlja goto prekid movlw movwf
b'11111101' TRISA PORTA,1
;dioda svijetli
b'00000100' OPTION_REG
;preskaler 100 ;inkrementiranje ;TMR0 svake 32 µs
b'10100000' INTCON con petlja b'10100000' INTCON
incf movlw
con .244
subwf btfss retfie clrf
con,0 STATUS,Z
BANK0 Btfss goto BANK1 Movlw Movwf BANK0 Bcf retfie skok
0x00 main 0x04 prekid 0x20
BANK1 movlw movwf BANK0 Bsf retfie end
;dozvola tajmerskog prekida ;čekanje prekida ;dozvola sljedećeg prekida, ;jer prilikom prekida GIE ode ;u nulu ;prekid se treba desiti 244 puta,jer ;je 32*256*244=1998848 µs
con
;postavljanje con varijable ponovno ;u nulu
PORTA,1 skok
;test da li je dioda svijetlila ili nije
b'00000011' OPTION_REG PORTA,1
b'00000100' OPTION_REG PORTA,1
2. NAČIN - vremensko kašnjenje na bazi petlje. PROCESSOR 16F84 #include "p16f84.inc" #include "bank.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org goto org goto
0x00 main 0x04 main 120
cblock aa,bb,cc endc main
BANK1 movlw movwf BANK0
0x0c
b'11111101' TRISA
ponovo bsf
PORTA,1
PET2
movlw movwf call decfsz goto
.78 cc PET1 cc,1 pet2
goto
dalje
movlw movwf call decfsz goto return
.116 bb PET0 bb,1 pet1
movlw movwf decfsz goto
.108 aa aa,1 pet0
pet2
PET1 pet1
PET0 pet0
;RA1 definiramo kao izlazni pin ;dioda svijetli ;čekanje 2 sekunde
return dalje
bcf
PETl2 movlw movwf petl2 call decfsz goto goto
PORTA,1
;kraj petlje od dvije sekunde ;gašenje diode ;dioda ne svijetli ;čekanje 1 sekundu
.127 cc PETl1 cc,1 petl2 daljel
PETl1 movlw movwf petl1 call decfsz goto return
.183 bb PETl0 bb,1 petl1
PETl0 movlw movwf petl0 decfsz goto return
.19 aa aa,1 petl0
daljel
ponovo
;kraj petlje od 1 sekunde goto end
121
10.4.19 LED diode na portu B Program za paljenje i gašenje svih LED dioda na portu B u intervalima od 0,5ms. Prvo ćemo izraditi makro koji generira pauzu. Spremite kao pausems.inc pausems macro arg1 local local local local local
Loop1 dechi Delay1ms Loop2 Kraj movlw movwf movlw movwf
high arg1 HIcnt low arg1 LOcnt
;viši bajt argumenta ide u HIcnt
movf btfsc goto call decf goto
LOcnt,f STATUS,Z dechi Delay1ms LOcnt,f Loop1
;testira svoju vrijednost i ako je ;nula, setira se bit Z
movf btfsc goto call decf decf goto
HIcnt,f STATUS,Z Kraj Delay1ms HIcnt,f LOcnt,f Loop1
;niži bajt argumenta ide u LOcnt
Loop1
dechi
Delay1ms: movlw movwf Loop2: nop nop nop nop nop nop nop decfsz goto
.100 LOOPcnt
LOOPcnt,f Loop2
;Delay1ms realizira kašnjenje od ;100*10µs=1ms
;dekrementiraj ;trajanje jednog izvršavanja Loop2 ;petlje je 10µs
return Kraj endm Sada je dovoljno napisati kratak program koji će koristiti ovu pauzu. PROCESSOR 16f877 #include "p16f877.inc" #include "pause.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC 122
Cblock HIcnt LOcnt LOOPcnt endc
0x20
;početak RAM-a ;registri koje koristi makro pausems
ORG goto
0x00 Main
;reset vector
ORG goto
0x04 Main
;interapt vector ;nema interapt rutine
banksel clrf banksel
TRISB TRISB PORTB
;početak programa ;selektiraj banku u kojoj je TRISB ;port B je izlazni ;selektiraj banku u kojoj je PORTB
movlw movwf pausems movlw movwf pausems goto
0x00 PORTB .500 0xff PORTB .500 Loop
Main
Loop ;isključi diode na portu B ;pričekaj 500 milisekundi (0.5sec) ;uključi diode na portu B ;pričekaj 500 milisekundi (0.5sec) ;skoči na labelu Loop
end U ovom primjeru na mjesto argumenta makro naredbe možemo unesti 16 bitni broj. To znači da možemo napraviti pauzu od 65,535 s.
10.4.20 Usporedba - indirektnim adresiranjem Podaci se nalaze od adrese 0x30 do 0x39. Treba ih usporediti sa podatkom na adresi 0x20. Ako su jednaki adresu tog podatka stavi na 0x40 i svaki sljedeći dalje. PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
petlja
ORG bcf bcf movlw movwf movlw movwf goto
0x00 STATUS,RP0 STATUS,RP1 0x2f FSR 0x40 0x22 petlja
movlw subwf btfsc goto incf movf subwf btfss
0x39 FSR,0 STATUS,Z prekid FSR 0x20,0 INDF,0 STATUS,Z
;BANK0 ;0x30-1 adresa podatka ;w u FSR ;početna adresa sortiranja ;kada vrijednost FSR ;inkrementirajući dođe do ;vrijednosti 0x39, idi ;na labelu prekid ;pokazuje na adresu 0x30 ;vrijednost sa adrese u w ;vrijednost sa 0x30-w ;testira bit Z 123
upis
goto goto
petlja upis
;ako nisu isti, goto petlja ;jednaki su
movf movwf movf
FSR,0 0x21 0x22,0
movwf movf movwf
FSR 0x21,0 INDF
incf
0x22
movwf goto
FSR petlja
;adresa u w ;w u 0x21 ;vrijednost sa adrese 0x22 ;(0x40) u w ;(0x40) u FSR ;vrijednost registra 0x21 u w ;spremamo na lokaciju na koju ;pokazuje FSR ;inkrementira vrijednost reg. ;0x22 (0x40+1) ;w u FSR
prekid end 0x21, 0x22 su pomoćni registri za privremeno spremanje podataka.
10.4.21 Protok Na RC1 pristižu impulsi sa mjerača protoka koji daje 100 impulsa/litri tekućine. Ovaj program će na port B ispisivati veličinu protoka litre/sekundi. PROCESSOR 16F877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org goto org goto cblock brojac,v1 endc main
BANK1 movlw movwf movlw movwf movlw movwf movlw movwf clrf clrf BANK0
skok1 btfss goto incf skok2 btfsc goto goto
0x00 main 0x04 prekid 0x20
b'00000010' TRISC b'00000000' TRISB b'00000101' OPTION_REG b'10100000' INTCON brojac v1 PORTC,1 skok1 brojac PORTC,1 skok2 skok1
;RC1 kao ulazni pin (dolaze impulsi) ;portb kao izlazni ;timer se inkrementira svake 64µs ;dozvola timerskog prekida
;tu se vrti petlja dok ne dođe jedinica na RC1 ;povećam brojač,što znaci da je došao 1 impuls ;kada dođe nula idemo na ponovno ;čekanje impulsa
124
prekid BANK1 movlw movwf incf
b'10100000' INTCON v1
movlw subwf btfss retfie
.156 v1 STATUS,Z
movf
brojac,0
clrf clrf BANK0 movwf retfie end
brojac v1
;ponovna dozvola prekida ;inkrementiranje pomoćne varijable v1 da ;vidimo koliko se desilo prekida ;156*64 = 9984 µs tj. 1ms ;ako se desilo 156 prekida idem dalje, ;ako nije nastavljam s prekidima ;ovaj dio u prekidnoj rutini dešava se ;100 puta u sekundi ;brojač natrag u nulu ;v1 natrag u nulu
PORTB
10.4.22 Regulacija temperature Na port B pristižu podaci sa 8 bitnog A/D pretvornika o stanju temperature u prostoriji. U spoju sa termometrom A/D pretvarač nam daje informaciju o temperaturi u rasponu od –20 do +80 °C. Na RC1 je spojen grijač preko releja. Napiši program da temperatura u prostoriji bude 21 plus/minus 1°C. Početna temperatura u prostoriji je 0°C. PROCESSOR 16F877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC
main
petlja
org goto org goto
0x00 main 0x04 main
BANK1 movlw movwf movlw movwf BANK0
b'11111101' TRISC b'11111111' TRISB
movlw subwf btfss
.102 PORTB,0 STATUS,C
bsf movlw subwf btfsc
PORTC,1 .108 PORTB,0 STATUS,C
bcf
PORTC,1
goto end
petlja
;TRISC je u bank1 ;RC1 izlazni pin ;PORTB ulazni ;PORTC & PORTB u bank0
;c=1,vece od 0 tj. temperatura ;veća od 20 ;pali ;kad je C=1 on mora zagasiti ;grijač tj. temp. veća od 22 ;gasi RC1
125
Imamo 256 (0-255) mogućih stanja registra kojima moramo pridružiti raspon temperature od -20 do 80°C. Raspon temperature:
80 – (–20) = 100°C 256/100 = 2,56 po °C
20°C: raspon 20 – (–20) = 40*2,56 = 102,4 ≈ 102 22°C: raspon 22 – (–20) = 42*2,56 = 107,52 ≈ 108
10.4.23 Pretvorbe a) Binarni u EXCESS-3 PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org goto org goto cblock bin,ex3 endc
0x00 main 0x04 main 0x20
movlw movwf
.11 bin
movlw addwf movwf
.3 bin,0 ex3
goto end
etlja
main
petlja
b) EXCESS-3 u binarni PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org goto org goto cblock bin,ex3 endc
0x00 main 0x04 main 0x20
movlw movwf movlw subwf movwf
.11 ex3 .3 ex3,0 bin
goto end
petlja
main
petlja
126
c) Binarni u oktalni PROCESSOR 16F877 #include"p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org 0x00 goto main cblock 0x20 oz1,oz2,oz3,bin endc main
clrf clrf clrf
oz1 oz2 oz3
prva
movlw subwf btfsc incf btfsc goto
.64 bin,1 STATUS,C oz1 STATUS,C prva
movlw addwf
.64 bin,1
movlw subwf btfsc incf btfsc goto
.8 bin,1 STATUS,C oz2 STATUS,C dva
movlw addwf movwf
.8 bin,0 oz3
goto
petlja
dva
petlja
end d) Oktalni u binarni PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org 0x00 goto main org 0x04 goto main cblock 0x20 oz2,oz1,oz0,bin,con endc main
clrf clrf clrf
con STATUS bin
pet2
movf addwf
oz2,0 oz2,1
;oz2,oz1,oz0 - oktalne znamenke ;con - kontrolna varijabla za petlje
;množenje sa 64 ;premještamo oz2 u w reg ;zbrajanje oz2 i w i spremanje 127
;rezultata u oz2 incf movlw subwf btfss goto
con .6 con,0 STATUS,Z pet2
clrf clrf
con STATUS
movf addwf
oz1,0 oz1,1
incf movlw subwf btfss goto
con .3 con,0 STATUS,Z pet1
movf addwf movf addwf movf addwf
oz0,0 bin,1 oz1,0 bin,1 oz2,0 bin,1
goto
petlja
;množenje sa 8
pet1
;premještamo oz1 u w reg ;zbrajanje oz1 i w i spremanje rezultata ;u oz1
;zbrajanje oz2+oz1+oz0
;binarni zapis je u bin registru petlja
end e) Binarni kod u BCD Ovaj program izdvaja znamenke stotice, desetice i jedinice iz broja. To ćemo napraviti preko makro naredbe koju ćemo kasnije pozvati u programu. Spremi kao digbyte.inc digbyte macro local local local local local clrf clrf clrf Pozitiv movf movwf movlw Pon0 incf subwf btfsc goto decf addwf Exit1 movlw incf subwf btfsc goto decf
arg0 Pon0 Exit1 Exit2 Pozitiv Negativ Dig1 Dig2 Dig3 arg0,w Digtemp .100 Dig1,f Digtemp,f STATUS,C Pon0 Dig1,f Digtemp,f .10 Dig2,f Digtemp,f STATUS,C Exit1 Dig2,f
;izračunavanje znamenke stotice
;izračunavanje znamenke desetice
128
Exit2
addwf movf movwf
Digtemp,f Digtemp,w Dig3
;izračunavanje znamenke jedinice
endm Sljedeći primjer izdvaja znamenke iz broja. PROCESSOR 16F877 #include "p16f877.inc" #include "digbyte.inc" __CONFIG _CP_ON&_WDT_OFF&_PW RTE_ON&_XT_OSC cblock REZ Digtemp Dig1 Dig2 Dig3 endc
0x20
org goto
0x00 Start
;adresa reseta
Start
movlw movwf
0xff REZ
;w=255 ;REZ=255
Main
digbyte
REZ
;poziv makroa
Petlja
goto
Petlja
;ostani ovdje
;Dig1 - stotica ;Dig2 - desetica ;Dig3 - jedinica
end Poslije izvođenja programa sadržaj u registrima Dig1, Dig2, Dig3 će biti ovakav: Dig1
Dig2
Dig3
.2
.5
.5
0x20
0x21
0x22
Naravno, u binarnom obliku. BIN u BCD (2. NAČIN) PROCESSOR 16F877 #include"p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org 0x00 goto main org 0x04 goto main cblock 0x20 con,bcd2,bcd1,bcd0,bin endc
129
main
clrf clrf clrf clrf clrf movlw movwf
con bin bcd2 bcd1 bcd0 .3 bin
prvi
movlw subwf btfss goto incf goto
.10 bin,1 STATUS,C drugi bcd1 prvi
drugi
movlw addwf movf movwf
.10 bin,1 bin,0 bcd0
drugi1 movlw subwf btfss goto incf goto
.10 bcd1,1 STATUS,C tri bcd2 drugi1
tri
movlw addwf
.10 bcd1,1
petlja
goto
petlja
end
10.4.24 Servo motor Na pinove porta B u neodređenim vremenskim razmacima dolaze binarni podaci vrijednosti od 0 do 100 s tim da svaka promjena stanja izaziva kratkotrajni impuls na RB7 pinu. Na RA0 spojen je ulaz koračnog motora, kojemu je za jedan puni okretaj (360° ) potrebno 200 impulsa frekvencije 1KHz. Ovaj program će upravljati radom koračnog motora, tako da broj zadan na portu B određuje pomak motora u postocima (npr. za zadani binarni broj 50 na portu B motor treba napraviti otklon od 180°). PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC Ulaz
Main
org goto org goto
0x00 Main 0x04 Prekid
BANK1 movlw
b'11000001'
movwf bcf movlw
OPTION_REG TRISA,0 b'11111111'
EQU 0x20
;u slučaju interrupta skače na tu labelu ;uključeni pull up otpori na ;PORTB, prekid na rastući brid, TMR0/4 ;pin RA0 je izlazni
130
Stand_by
movwf bsf BANK0 movlw movwf
TRISB OPTION_REG,0
;svi pinovi PORTB su ulazni
b'10001000' INTCON
;uključivanje interrupata: GIE i INTE
bcf
INTCON,RBIF
bsf
INTCON,GIE
;reset interrupt flag-a RBIF ;ako je prethodno bio setiran) ;setiranje interrupt flag-a ;GIE (ako je prethodno bio resetiran)
sleep ;postavlja CPU u stand by mode (može i bez ;toga) goto
Stand_by ;kada se dogodi interrupt, pokreće se ovaj ;potprogram
Prekid movfw movwf
PORTB Ulaz
call
Kontrola
bcf
Ulaz,7
movfw
Ulaz
addwf call
Ulaz,1 Izlaz
goto
Stand_by
Timer
Kontrola
;i zbroji ih same sa sobom (množenje sa 2) ;poziva potprogram za Izlaz(upravljanje ;motorom) ;vraća program iz prekidne rutine ;početak vremenske petlje koja odbrojava 500 ;µs
movlw movwf Tloop btfss goto
.135 TMR0 INTCON,T0IF Tloop
bcf
INTCON,T0IF
return Izlaz
;kopira sadržaj PORTB u registar ;ulaz (0x20) ;poziva potprogram koji kontrolira je ;li podatke na PORTB ;ako je RB7 setran, resetira ga (potrebni ;su nam samo podaci RB6:RB0) ;uzima sadržaj registra Ulaz
bsf nop nop nop nop call
;upisuje vrijednost .135 u TMR0 ;provjerava je li TMR0 prekoračio 255 ;ako nije vraća program na Tloop dok ;TMR0 ne prekorači ;kada TMR0 prekorači resetira T0IF interrupt ;flag ;izlazi iz Timer podprograma
PORTA,0
;uključuje relej spojen na RA0 ;prazni ciklusi da se dobije na vremenu
Timer
;pozivanje Timer potprograma (mjeri se ;vrijeme prve ;poluperiode freq 1kHz) ;isključuje relej spojen na RA0
bcf nop call
PORTA,0
decfsz
Ulaz
goto return
Izlaz
btfss goto bcf
Ulaz,7 Stand_by Ulaz,7
Timer
;pozivanje Timer podprograma (mjeri se ;vrijeme druge poluperiode freq 1kHz) ;umanjuje sadržaj registra Ulaz za 1 i ;ako registar Ulaz nema vrijednost 0, ;ponavlja ovaj potprogram dok Ulaz ne bude 0 ;kada se registar Ulaz isprazni, vraća se ;iz potprograma ;ako se prekid nije dogodio na RB7 ;vraća se u Stand_by ;resetira bit 7 registra Ulaz, jer nadalje nije ;potreban 131
movf btfss return goto
Ulaz STATUS,Z Stand_by
;ako je sadržaj registra Ulaz 0, ;vraća se iz potprograma Kontrola ;u protivnom se vraća u Stand_by
end
132
11
Popis pojmova i kratica:
A ADC (Analog-to-Digital Converter)- analogno digitalni pretvarač Adresiranje ALU (Arithmetic Logic Unit)- Aritmetičko logička jedinica Analogna veličina Analogno – digitalni pretvarač Algoritam Analogna informacija Arhitektura računala ASCII kod (American Standard Code for Information Interchange)- Američki standardni kod za razmjenu informacija Asinkroni prijenos podataka ASIC (application-specific integrated circuit)
B B - Bajt (byte) Binarni podatak b – bit (binary digit) Boolova logika Brojač Bistabil Bit operacije BCF (Bit Clear Function) BSF (Bit Set Function)
C CPU (Central Processing Unit)- Centralna procesorska jedinica CRT (Cathode Ray Tube)- Katodna cijev Clock-takt CISC (Complex Instruction Set Computer) CMOS (Complementary Metal Oxide Semiconductor)
D DAC (Digital-Dnalog Converter)- Digitalno analogni pretvarač Dekoderi Dinamička greška Digitalni sustav DCE (Data Communications Equipment)-Podatkovna komunikacijska oprema DTE (Data Terminal Equipment)-Podatkovna terminalna oprema DC (Digit Carry)
E EEPROM (Electrically Erasable Read-Only Memory) Ekspertni sustavi Električni signali EEDATA registar EEADR registar
F FIFO (FIrst in – First out) FPGA (field-programmable gate array) FSR registra
G Generator takta Građa računala Greška ponovljivosti GPR (General Purpose Registrers) registri GIE sklopke
H Harvard-ska arhitektura
133
I Indirektno adresiranje Instrukcije Instrukcijski registar Integrirani sklopovi INTF (INT External Interrupt Flag) INTCON registar INTE (INT External Interrupt Enable) Izlazni sklopovi
K Kašnjenje Kodiranje
L LSI – komponente Logička jedinica
M Memorija Memorijska jedinica Mikroprocesori Mikrokontroleri Mikroračunala Multipleksiranje Mrtvo vrijeme Mrtva zona Međusklop MMU (Memory Menagment Unit)
N Naredba Namjenski registri Namjenski registri
O Obrada podataka Off line sustavi On line sustavi Opreacijski kod Oscilatorski Start-up Timer OPTION registra Organizacija memorije OPTION registar
P Pareleni prijenos podataka PIC (Programm Interupt Controller) Prijenos podataka Procesna računala Procesor Program Programski jezici PLC programibilni logički kontroleri Paritetni sklop Paritetni bit Parametri procesa PC(Personal Computer) računalo PC (Program Counter)-Programsko brojilo
Podatkovna sabirnicaPORTA PORTB Prekidi (Interrupts) R Radna memorija Računalo
134
Rezolucija ili razlučivost Registar općenamjene Reset Relativno adresiranje RS232 RISC (Reduced Instruction Set Computer)
S Sample & Hold sklop Sabirnica SCADA (Supervisory Control And Data Acquisition) Segmentno adresiranje Senzori Serijska komunikacija Serijski prijenos podataka SFR (Special Function Registers) Slobodni brojač Sigma Delta A/D pretvarači Sinkroni prijenos Sigurni brojač Status registar Statička greška Stog (Stack) Sučelje
T T0IF (TMR0 Overflow Interrupt Flag) T0IE (TMR0 Overflow Interrupt Enable) T0SE (TMR0 Sorce Edge Select) T0CS (TMR0 Clock Source Select)
U U/I kanali Upravljačka jedinica Unutrašnja sabirnica Upravljačka sabirnica T0SE (TMR0 Sorce Edge Select) T0CS (TMR0 Clock Source Select)
V VLSI tehnologija Vanjska sabirnica
W Watchdog timera WR (Write Control) WREN (EEPROM Write Enable) WRERR (EEPROM Error Flag) WR (Work Registar)-Privremeni rwgistar
Z Z (Zero) zastavica
135
12
Popis korištene literature:
1. Gabro Smiljanić: Mikroračunala, Školska knjiga, Zagreb 2. Gabro Smiljanić: Osnove digitalnih računala, Školska knjiga, Zagreb, 1990. 3. Gabro Smiljanić: Računala i procesi, Školska knjiga, Zagreb, 1991. 4. Darko Grundler: Uvod u mikroprocesore, Tehnička knjiga, Zagreb, 1990. 5. Zdenek Sobotka: Mikroprocesori i Mikroračunala na lak način, Tehnička knjiga, Zagreb,1987. 6. D. Andrić i N. Matić: PIC Mikrokontroleri, Mikroelektronika, Beograd, 2000. 7. Aleksandar Szabo, Impulsna i digitalna elektronika, Školska knjiga, Zagreb, 1994.
136