procesna računala

161

Click here to load reader

Upload: frizybih

Post on 26-Dec-2015

184 views

Category:

Documents


23 download

DESCRIPTION

mikrokontrolerski sustaviprogramiranje u asembleru

TRANSCRIPT

Page 1: Procesna računala

TEHNIČKO VELEUČILIŠTE U ZAGREBU

ELEKTROTEHNIČKI ODJEL

PROCESNA RAČUNALA

Mikrokontrolerski sustavi

Programiranje u asembleru i vježbe

Goran Malčić dip.ing.

Page 2: Procesna računala

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 ............................................. 9 3.1 Senzori i izvršni organi ...................................................................................... 9 3.2 Analogna obrada signala ................................................................................ 10 3.3 Multipleksori .................................................................................................... 10 3.4 Analogno digitalni pretvarač............................................................................ 11 3.5 Sample & Hold sklop (S&H) ............................................................................ 16 3.6 Digitalno analogni pretvarač............................................................................ 17 3.7 Međusklop (Interface) ..................................................................................... 18 3.8 Prilagodba izlaznog analognog signala izvršnom organu ............................... 22

3.9.1 Mikroprocesor........................................................................................... 23 3.9.3 Razlika između mikroprocesora i mikrokontrolera .................................... 28

4 Mikrokontroler PIC16F84....................................................................................... 33 4.1 Osnovne karakteristike mikrokontrolera PIC 16F84........................................ 33

4.1.1 Karakteristike mikrokontrolera .................................................................. 33 4.1.2 Karakteristike ulazno/izlaznih sklopova .................................................... 34 4.1.3 Specijalne karakteristike mikrokontrolera ................................................. 34 4.1.4 Karakteristike CMOS Flash/EEPROM tehnologije.................................... 34

4.2 Kratak opis mikrokontrolera ............................................................................ 35 4.3 Raspored nožica ............................................................................................. 35 4.4 Generatori takta .............................................................................................. 36 4.5 Takt / instrukcijski ciklus.................................................................................. 38 4.6 Obrada instrukcija ........................................................................................... 39 4.7 Reset............................................................................................................... 39 4.8 Ulazno / izlazni sklopovi .................................................................................. 40

4.8.1 PORTA i TRISA........................................................................................ 40 4.8.2 PORTB i TRISB........................................................................................ 41

4.9 Organizacija memorije .................................................................................... 42 4.9.1 Programski brojač ( Program Counter ).................................................... 44 4.9.2 Stog ( Stack )............................................................................................ 44 4.9.3 Status registar .......................................................................................... 45 4.9.4 Direktno adresiranje ................................................................................. 46 4.9.5 Indirektno adresiranje ............................................................................... 46

4.10 Prekidi ( Interrupts )....................................................................................... 47 4.10.1 INTCON registar..................................................................................... 48

4.11 Podatkovna EEPROM memorija................................................................... 49 4.11.1 EECON1 registar.................................................................................... 50

4.12 Slobodni brojač TMR0................................................................................... 51 4.12.1 OPTION registar..................................................................................... 52

5 Set instrukcija..................................................................................................... 53 5.1 Prijenos podataka........................................................................................ 53 5.2 Aritmetika i logika ........................................................................................ 53 5.3 Bit operacije................................................................................................. 53 5.4 Upravljanje tokom programa ....................................................................... 53

2

Page 3: Procesna računala

5.6 Opis pojedinih instrukcija............................................................................. 55 6 Razvojni alati za PIC 16F84 .................................................................................. 75

6.1 Asembler......................................................................................................... 75 6.1.1 Elementi programskog jezika asembler.................................................... 76

7. MPLAB IDE v6.60................................................................................................. 77 7.1. MPLAB IDE.................................................................................................... 77 7.2. Zahtjevi sustava ............................................................................................. 77 7.3. Izrada jednostavnog projekta ......................................................................... 77

7.3.1 Uvod ......................................................................................................... 77 7.3.2 Pisanje izvornog koda .............................................................................. 78 7.3.3 Izrada projekta.......................................................................................... 79 7.3.4. Izgradnja projekta .................................................................................... 83 7.3.5. Pokretanje simulatora.............................................................................. 84 7.3.6. Provjera rada aplikacije ........................................................................... 86

8. Programiranje mikrokontrolera PIC 16F877 ......................................................... 99 8.1. Uvod............................................................................................................... 99 8.2. Instalacija sustava pri programiranju programskim paketom IC-PROG ....... 100 8.3. Programiranje mikrokontrolera programskim paketom IC-PROG ................ 101

9. Opis razvojnog sustava ...................................................................................... 106 9.1. Napajanje..................................................................................................... 106 9.2. Led diode ..................................................................................................... 107 9.3. Tipkala ......................................................................................................... 108 9.4. LCD zaslon (display) .................................................................................... 109 9.5. Sedamsegmentni zaslon.............................................................................. 110 9.6. Analogno-digitalni pretvarač (A/D converter) ............................................... 111 9.7. RS232 komunikacija .................................................................................... 112 9.8. Digitalni termometar - DS1820..................................................................... 113 9.9. Pull-up / pull-down otpornici na portovima ................................................... 114 9.10. Direktan pristup portovima ......................................................................... 116

10 Primjeri .............................................................................................................. 117 10.1 Uvod............................................................................................................ 117 10.2 Makro naredbe............................................................................................ 118 10.3 Potprogrami ................................................................................................ 119 10.4 Primjeri........................................................................................................ 120

10.4.1 Program za aktiviranje porta B ............................................................. 120 10.4.2 Način upisivanja konstanti .................................................................... 121 10.4.3 Naredbe uvjeta ..................................................................................... 121 10.4.4 Zbrajanje i oduzimanje, indirektno adresiranje ..................................... 122 10.4.5 Usporedba (komparacija) ..................................................................... 123 10.4.6 Inkrementiranje i dektrementiranje ....................................................... 124 10.4.7 Inicijalizacija Porta A i Porta E.............................................................. 125 10.4.8 EEPROM - čitanje podataka sa memorije ............................................ 126 10.4.9 EEPROM - upis podatka u memoriju.................................................... 126 10.4.10 FLASH programska memorija - čitanje podataka ............................... 127 10.4.11 FLASH programska memorija - upisivanje podataka.......................... 128 10.4.12 Zbrajanje dva 16 bitna broja ............................................................... 129 10.4.13 Oduzimanje dva 16 bitna broja ........................................................... 129 10.4.14 Sortiranje sa indirektnim pristupom .................................................... 130 10.4.15 Interupt ............................................................................................... 131 10.4.16 Preskaler - rad sa TMR0 .................................................................... 132 10.4.17 Dvosmjerna vrtnja motora .................................................................. 134

3

Page 4: Procesna računala

10.4.18 Dioda .................................................................................................. 135 10.4.19 LED diode na portu B ......................................................................... 138 10.4.20 Usporedba - indirektnim adresiranjem................................................ 140 10.4.21 Protok ................................................................................................. 141 10.4.22 Regulacija temperature ...................................................................... 142 10.4.23 Pretvorbe............................................................................................ 143 10.4.25 Servo motor ........................................................................................ 149

11. PRILOZI............................................................................................................ 151 11.1 Pregled instrukcija....................................................................................... 151 11.2 Sadržaj STATUS, OPTION i INTCON registara.......................................... 152 11.3 PIC16F877 28/40-Pin 8-Bit CMOS FLASH Mikrokontroleri......................... 153 11.4 Ključne značajke ......................................................................................... 154 11.5 Blok dijagram 16F877 ................................................................................. 155 11.6 Opis priključaka(pinova) PIC16F877........................................................... 156 11.7 Memorijska mapa PIC16F877 File registara ............................................... 158 11.8 Pregled Registra specijalne namjene (Special Function Register).............. 159

4

Page 5: Procesna računala

1 Uvod

Primjenom mikroprocesorskih i mikrikontrolerskih 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 ovim podlogama obrađen dio predavanja i vježbi iz kolegija Procesna

računala koji se održava na Elektrotehničkom odjelu Tehničkog veleučilišta u Zagrebu. 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

Page 6: Procesna računala

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.

OSJETILA MOZAK RUKENOGE...

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 i dvije faze. U prvoj se podaci iz izvora zapisuju na neki prijenosni medij (disketa, priručna memorija, papirna traka 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 mikrosekundama. Za takve sustave kažemo da rade u realnom vremenu, jer je najčešće vrijeme koje protekne od učitavanja pa do obrade podataka zanemarivo.

6

Page 7: Procesna računala

PROCESOBRADA

IDONOŠENJE

ODLUKA

Uzimanjepodataka

Prezentacijanaredbi

Sl. 2.2 On-line sustav

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 sistem 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.

MEHANIZAM ZAKLJUČIVANJA

ZBIRKAZNANJA

ZBIRKA PODATAKA

Sl. 2.3 Načelna shema ekspertnog sustava

7

Page 8: Procesna računala

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 promijene 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.

8

Page 9: Procesna računala

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. Digitalno računalo služi za obradu podataka prikupljenih iz procesa. Središnji dio služi za povezivanje procesa i digitalnog računala, koji ćemo sada razmotriti.

SENZORIANALOGNA

OBRADA PODATAKA

MUX S & H A/D PRETVORBA SUČELJE

SUČELJED/A PRETVORBAPRILAGODBE i DEMUXIZVRŠNI

ELEMENTI

DIGITALNO RAČUNALO

PROCES

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.

9

Page 10: Procesna računala

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 nedigitalnih veličina. Signal treba filtrirati, ispraviti (linearizirati) i kondicionirati da bi se analogni signal mogao digitalizirati u A/D pretvorniku. Postoje dvije metode rada. Prvi je da se mjerene veličine prikazuju čovjeku te on odlučuje kako će reagirati. Drugi način je kada je sustav električki zatvoren. To znači da digitalno računalo od dobivenih mjernih veličina pomoću određenih algoritama donosi zaključke te djeluje na sustav preko izvršnih organa. Izvršni organi mogu biti prekidač, ele. motor koji upravlja ventilom, regulator izgaranja na ložištu itd. Senzori i izvršni organi za svaki sustav su specifični.

3.2 Analogna obrada signala

Električni signali koji dolaze iz senzora imaju različite oblike. S druge strane za analogno-digitalni pretvarač signali moraju biti određenog oblika, standardizirani. Da bi se to postiglo potrebno je određena elektronička obrada signala. Signal je potrebno propustiti kroz određenu električnu mrežu koja će mu dati određeni 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.2), koji signale sa više ulaza usmjerava na jedan zajednički izlaz.

10

Page 11: Procesna računala

MUX

MUX

MUX

m

n

Sl. 3.2 Analogni multipleksor i blok shema 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 Analogno digitalni pretvarač

Mjerne veličine koje dobijemo iz senzora, te analogne obrade su kontinuirani analogni signali. Da bi digitalno računalo moglo obrađivati te signale potrebno ih je diskretizirati po vremenu i amplitudi, tek tada kada su pretvoreni u binarne brojeve mogu se unositi u računalo.

A/D

2n-1

20

n-bita

ANALOGNI ULAZ

START KRAJ 0 1 2 3 4 A

D

Sl.3.3 A/D pretvarač

11

Page 12: Procesna računala

Analogno-digitalni pretvarač ne pretvara u digitalnu vrijednost cjelokupni analogni signal, već samo njegove uzorke u vremenu (Sl.3.4).

U

t0

1

2

3

4

5

6

7

8

9

Niv

oi u

zork

ovan

ja

Analogni signal

Vrijeme uzimanjauzorka

Perioduzorkovanja

uzorak

Sl.3.4 Uzorkovanje analognog signala u vremenu

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. Shanonov teorem ili teorem o uzorkovanju kaže da frekvencija sempliranja (periodičko uzorkovanje) mora biti dva puta veća od frekvencije signala da se periodično ponovljeni spektri ne bi preklapali (u praksi 5-10 puta veća frekvencija). Imamo tri osnovne vrste A/D pretvarača:

a) A/D pretvarači s vremenskim ekvivalentom b) A/D pretvarači sa sukcesivnom aproksimacijom c) A/D pretvarači sa izravnom pretvorbom

12

Page 13: Procesna računala

a) A/D pretvarači s vremenskim ekvivalentom

A/D pretvarač s vremenskim ekvivalentom naziva se joši Wilkinsonov A/D pretvarač.

OSCILATOR

& BINARNO BROJILO

krajpočetak

reset

Sl.3.5 Wilkinsonov A/D pretvarač

Princip rada Wilkinsonovog A/D pretvarača se zasniva na pretvorbi amplitude u vrijeme i zatim mjerenje tog vremena. Pilasti napon se svrstava među najtočnije električne veličine. Kad pilasti napon dođe do nule počinje mjerenje vremena. Vrijeme se broji elektroničkim brojilom, koje treba prije početka brojanja postaviti u nulu. Kad pilasti napon dosegne vrijednost napona koji se mjeri, zaustavlja se brojilo, a binarni broj zapisan u brojilu predstavlja mjereni napon. Kod ove vrste pretvarača treba naglasiti da je mrtvo vrijeme (kad ne može prihvatiti novi podatak) ovisno o amplitudi ulaznog napona. Ako povećamo razlučivanje po amplitudi tj. broj bit-ova, povećava se i vrijeme pretvorbe, a to znači da ćemo smanjiti razlučivanje po vremenu.

t

u

uul

Pilasti signal

početak mjerenja vremena

kraj mjerenja vremena

amplituda ukaznog napona

Vrijeme koje odgovara amplitudi

0

Sl.3.6 Pilasti signal

Nedostatak ovog A/D pretvarača je to da moramo pričekati da pilasti signal stigne do kraja. Ovo se može riješiti modifikacijom (Sl. 3.7).

13

Page 14: Procesna računala

OSCILATOR

& BINARNO BROJILO

start

D/A

reset

QS

R-

+

ulaz

Sl.3.7 Modificirani Wilkinsonov A/D pretvarač

Brojilo će brojati (od nule), na ulazu je nula pa je i na izlazu nula. Na ulazu je jedan, na izlazu je jedan. Na taj način dobivamo stepenice. Resetiramo brojilo, kreće start, brojilo broji, stepenice rastu sve dok ne dostignu iznos ulaznog signala, gdje brojilo prestane brojati. Dobili smo neku vrijednost. Prednost ovog pretvarača je u tome da vrlo jednostavno možemo resetirati brojilo kada je završila A/D pretvorba tako što spremimo podatak i nastavimo sa pretvorbom (Sl .3.8)

u

t

Uul1

Uul2

Sl.3.8 Graf modificiranog Wilkinsonovog A/D prevarača

b) A/D pretvarači sa sukcesivnom aproksimacijom

A/D pretvarač na principu sukcesivne aproksimacije radi tako da mjerni ulazni napon uspoređuje sa sumom stepeničastih naponskih koraka tako dugo dok ta suma ne bude približno jednaka mjerenoj veličini. Ti stepeničasti koraci su promjenjive veličine. Bistabili stvaraju naponske skokove upravljajući strujama čiji je iznos proporcionalan težinskoj vrijednosti bistabila u binarnom brojevnom sustavu. Vrijeme pretvorbe kod ove vrste A/D pretvarača ovisi o brzini rada elektroničkih sklopova.

14

Page 15: Procesna računala

Bitno je još naglasiti da pretvorba svakog ulaznog signala jednako traje bez obzira na njegovu veličinu.

Dodajemo dok ne dođemo do zadnjeg

bita

Umax

2

Umax

4

Umax

8 Umax

16

Umax

32

U

1 01 0 1 1

ulazUvijek će trajati onoliko koliko bita imamo na izlazu A/D pretvarača

2n-1 2021

n

Sl. 3.9 Sukcesivni A/D pretvarač

* Wilkinsonov A/D pretvarač mjeri najveći napon sa 2n-1 taktova oscilatora,

dok A/D pretvarač sa sukcesivnom aproksimacijom isto obavlja sa n taktova. To znači da su brži, ali su i zahtjevniji. Ako nam je bitno vrijeme koristimo A/D pretvarač sa sukcesivnom aproksimacijom, a ako nam je bitna točnost koristimo Wilkinsonov A/D pretvarač.

c) A/D pretvarači sa izravnom pretvorbom

&1 ≥1 20

21

-

-

-

+

+

+u3

u2

u1

uul

u

t

u3

u2

u1

Sl. 3.10 2-bitni A/D pretvarač sa izravnom pretvorbom

15

Page 16: Procesna računala

Vrijeme pretvorbe je gotovo nula. Za n-bitnu kombinaciju nam treba 2n-1 komparatora, 2n-1 referentnih napona (vrlo točnih). Skupi su, koriste se za male rezolucije i rijetko se upotrebljavaju.

3.5 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 narednog 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.

--

++

ULAZIZLAZ

C

upravljanje

Sl. 3.11 Shema S&H sklopa

praćenje praćenjezadržavanje

kašnjenje kašnjenje

signal

idealnorealno

Sl. 3.12 Signal pri S&H obradi

Kašnjenje koje nastaje pri povratku iz stanja zadržavanja u stanje praćenja ograničava frekvenciju uzimanja uzoraka.

16

Page 17: Procesna računala

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 - D/A pretvornik davati će na izlazu napon koji će napajati elektromotor nekog upravljačkog uređaja.

D/A

2n-1

20

n-bita Uiz

Uiz

Uul

Sl. 3.13 D/A pretvarač

D/A pretvarač nam je potreban da bi binarne brojeve dobivene iz digitalnog računala pretvorili u odgovarajući 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.

stvarniočitani

Šiljak prijelaznog napona

0111

1000

Sl. 3.14 Graf signala

17

Page 18: Procesna računala

* Šiljak prijelaznog napona se događa jer se brže prelazi iz „1“ u „0“ nego

obratno zbog parazitnih kapaciteta, tako da će se npr. kod mjerenja temperature pri promjeni temperature sa 7 na 8 stupnjeva, odnosno pri prelasku „1000“ u „0111“ vrlo kratko postaviti u „0000“ (Sl.3.14).

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 prenosi od jednom i 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 iterface u šire smislu, jer oni sadrže interface u užem smislu, paralelno/serijsku i serijsko/paralelnu pretvorbu. U/I kanali su priključci i ulazno/izlazni sklopovi koji omogućuju povezivanje računala sa različitim vanjskim uređajima ili s uređajima unutar kučišta sustava. Dva su osnovna tipa prijenosa podataka putem U/I kanala:

a) parelelni b) serijski

18

Page 19: Procesna računala

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.15.

CPU PIO UREĐAJUpravljački

vodovi

Vodovi za prijenos podataka

Registar podataka

Registar smjera

Upravljački registar

Podatkovna sabirnica

Adresna sabirnica

Upravljačka sabirnica

Sl. 3.15 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 10m.

RAČUNALO SUČELJE SERIJSKAJEDINICA

Jedinica zaparalelni prijenos

U/I prijenos

adresa

DATA

Zahtjev za prijenos

čitanje

upis Podaci prihvaćeni

Izlazni podacispremni

Zahtjev zaprijenos

Izlaz podataka

Ulaz podataka

sabirnica

Sl.3.16 Shema jedinice za paralelni prijenos

19

Page 20: Procesna računala

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.

registar registarkomunikacijski kanal

0 0 01 1 1 1 1Ulaz podataka Izlaz podataka

takt takt

t

u

Sl.3.17 Načelo rada serijskog prijenosa podataka

Postoje dva tipa prijenosa s obzirom na vremensku usklađenost prijenosa:

• Sinkroni • Asinkroni

Sinkrona veza je brža, ali zahtjeva zajednički generator takta.

Generatortakta

Sl.3.18 Načelo sinkrone serijske veze

Šalju se skupine podataka tj. paketi koji se zovu frameovi. Prvo idu dva sinkrona bajta, zatim start of header bajt, header od osam bajta, zatim start of text, poruka, end of text i na kraju checksum.

SYN SYN SOH HEADER ETX CS

PORUKA

STX

Sl.3.19 Grafički prikaz jednog paketa

Ako je poruka dugačka šalje se u više frameova, pa end of text postaje end of block. CS je checksum, često je to drugi komplement sume svih podataka.

20

Page 21: Procesna računala

Kod asinkronog prijenosa podataka nema informacije o taktu uključeno 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.

STA

RT B

IT

SLJ

EDEĆ

I STA

RT B

IT

STO

P BI

T

1 1 0 1 0 0 1 0

+12V

-12V

0V

Sl.3.20 Primjer RS232 signala

Sklop za detekciju pariteta (slika 3.21) daje jedinicu na izlazu ukoliko je na ulazu neparan broj jedinica.

=1

=1

=1

Sl.3.21 Sklop za detekciju pariteta

Svi moderni čipovi imaju dio za asinkroni prijenos podataka, UART. UART (engl. universal asynchronous receiver transmitter) je kontroler za serijsku komunikaciju (slika 3.22), koji ima odašiljač (paralelno serijska konverzija) i prijemnik (serijsko paralelna konverzija).

21

Page 22: Procesna računala

PRIJEMNIK

PREDAJNIK

UPRAVLJAČKI BLOKOVI

Paralelni izlaz

Paralelni ulaz

Signalistatusa

Upravljačke funkcije

Serijski izlaz

Serijski ulaz

takt

Sl.3.22 UART

Najčešći tip prijenosnog puta u procesima je RS232C. Postoje i RS422 (baziran na strujnoj petlji od 4 do 20mA). RS232C 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).

3.8 Prilagodba izlaznog analognog signala izvršnom organu

U različitim sustavima će se upotrebljavati različiti izvršni organi pa će svaki izvršni organ zahtijevati svoju vrstu pobude. Zbog toga trebamo imati prilagodbu jer nije ista pobuda za elektro motor ili relej. To prilagođenje je najčešće neka vrsta električnog međusklopaa između D/A pretvarača i izvršnog organa.

22

Page 23: Procesna računala

3.9 Digitalno računalo

Razlozi zašto se sve više upotrebljavaju digitalna računala je velika brzina rada, pouzdanost i relativno mala cijena. Digitalno računala je «mozak» jednog «on line» sustava. Ono omogućava brzu reakciju i korekciju u sustavu. Tako na primjer, na temelju prikupljenih meteoroloških podataka danas izračunati vremenska prognoza za sutra. No za to bi ljudima koristeći meteorološke algoritme trebalo možda mjesec dana i tada bi ti podaci bili nevažni. Koristeći digitalno računalo ti podaci mogu biti obrađeni u vrlo kratkom vremenu pa ta vremenska prognoza postaje upotrebljiva. Digitalna 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 digitalno računalo je sklopovski isto, moguće su male modifikacije.

3.9.1 Mikroprocesor

Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske komande i naredbe 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 bit-ni mikroprocesor sa 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. Sljedeći je bio Z80 koji je bio jako dugo upotrebljavan. Imao je 176 instrukcija i mogao je rješavati sve što i Intelov 8008, a i više.

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čaj mikroprocesora: velika prilagodljivost (univerzalnost) niska cijena male dimenzije velika pouzdanost

23

Page 24: Procesna računala

INTERNA SABIRNICA

PR

AKUMULATOR A DC PC

IR

DEKODER

UPRAVLJAČKISKLOPOVI

SKUP REGISTARAOPĆE NAMJENE

ALU

čitaj

pišiUpravljačka

jedinica

Sl. 3.23 Pojednostavljeni model mikroprocesora

- 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.

24

Page 25: Procesna računala

- Privremeni registar PR 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)

25

Page 26: Procesna računala

3.9.2 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).

UPRAVLJAČKA JEDINICA

ARITMETIČKO LOGIČKA JEDINICA

MEMORIJA

IZLAZNEJEDINICE

ULAZNEJEDINICE

procesor

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 mikro instrukcija, kad se dekodira u procesoru može postati nekoliko zadataka (tasks) koje procesor mora izvršiti. Kao posljedica, instrukcije su varijabilne duljine i često potrebuju 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.

CPUPROGRAMSKA MEMORIJA ZA

PODATKE8 bitna

sabirnica

Sl. 3.25 Pojednostavljena shema CISC arhitekture

26

Page 27: Procesna računala

Najznačajnije karakteristike CISC mikroprocesora: - proširene instrukcije - kompleksne mašinske 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 Harvardu. 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 kod odjednom. Ovo znači da zadatak potrebuje više instrukcija koje su jednake duljine i obično potrebuju jedan takt za izvršavanje. Zbog ovog, RISC sistemi 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.

CPU PROGRAMSKA MEMORIJA

MEMORIJA ZA

PODATKE8 bitna

sabirnica14 bitnasabirnica

Sl. 3.26 Pojednostavljena shema RISC arhitekture

Najznačajnije karakteristike RISC mikroprocesora: - smanjen instrukcijski set - manje kompleksne, jednostavne instrukcije - nije potrebna kontrolna jedinica za dekodiranje instrukcija - maksimalno četiri načina adresiranje memorije - puno registara - manji radni takt

27

Page 28: Procesna računala

3.9.3 Razlika između mikroprocesora i mikrokontrolera

Sa rastom snage mikroprocesora rasla je i njegova primjenjivost, s tim da su za većinu slučajeva bili prejaki. 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.

PODACI

PODACI

ADRESNA SABIRNICA

CPU

NEZAVISNIBROJAČ

SIGURNOSNITAJMER

ANALOGNI ULAZ

U/I

Kontrolnelinije

R R 0

R R 1

R R 2

A/D REG.

A/D PRETVARAČ

ULAZNI REG.

IZLAZNI REG.

PRIMO-PREDAJNI

REG

SERIJSKA KOMUNIKACIJA

MEMORIJSKA LOKACIJA 0

MEMORIJSKA LOKACIJA 1

MEMORIJSKA LOKACIJA 2

MEMORIJSKA LOKACIJA n

TAJMERSKA JEDINICA

SLOBODNI BROJAČ

Č/P

PRIJEMNA LINIJA

PREDAJNA LINIJA

REFERENTNA LINIJA

PO

DA

TKO

VN

A S

AB

IRN

ICA

Sl. 3.27 Shema mikrokontrolera s njegovim osnovnim elementima 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 PROM ili 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

28

Page 29: Procesna računala

• 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.

MEMORIJSKA LOKACIJA 0

MEMORIJSKA LOKACIJA 1

MEMORIJSKA LOKACIJA 2

MEMORIJSKA LOKACIJA n

PODACIADRESE

Č/P

Sl. 3.28 Model memorijske jedinice

Adresiranje memorije vršimo na više načina: - usputno - operand je sastavni dio instrukcije - direktno (izravno) - adresa je sastavni dio instrukcije - indirektno (posredno) - u instrukciji se kao sastavni dio nalazi adresa

memorijske lokacije čiji sadržaj je adresa memorijske lokacije na kojoj se nalazi operand

- segmentno – zasniva se na činjenici da se programi većinom vrte u jednom dijelu (segmentu) memorije. MMU (jedinica za upravljanje memorijom) - zadatak Memory Menagment Unit je da podjeli memoriju na više segmenata. Tako podijeljena memorija se adresira segmentno.

29

Page 30: Procesna računala

CPU ( Central Processing Unit ) To su tri memorijske lokacije u posebnom bloku koje imaju ugrađenu sposobnost da svoj sadržaj zbraja, oduzima, množi, dijeli i prebacuje iz jedne memorijske lokacije u drugu. Te memorijske lokacije nazivamo radni registri.

REGISTAR 1

REGISTAR 2

REGISTAR 3

PODACIADRESE

CPUKONTROLNE

LINIJE

Sl. 3.29 Primjer centralne procesorske jedinice sa tri registra Sabirnica Sabirnica je put kojim teku informacije. Fizički to je skup vodiča. Postoje dvije vrste sabirnica, adresna i podatkovna. Adresna ima onoliko vodiča koliko memorije želimo adresirati i služi za prijenos adrese od CPU-a do memorije, a podatkovna sabirnica je široka koliko i podatak i služi za povezivanje svih blokova unutar mikrokontrolera.

REGISTAR 1

REGISTAR 2

REGISTAR 3

CPU

MEMORIJSKA LOKACIJA 0

MEMORIJSKA LOKACIJA 1

MEMORIJSKA LOKACIJA 2

MEMORIJSKA LOKACIJA n

PODACIMEMORIJA

Kontrolne linije

Č/P

ADRESE

Sl. 3.30 Primjer spajanja memorijske i centralne jedinice pomoću sabirnice

30

Page 31: Procesna računala

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.

ULAZNIREGISTAR

U/Ijedinica

PODACI

PODACI

PODACI

IZLAZNIREGISTAR

Sl. 3.31 Primjer U/I jedinice

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.

PRIJEMNOPREDAJNIREGISTAR

Serijskajedinica

PODACI

prijemna linija

predajna linija

referentna linija

Sl. 3.32 Serijska jedinica

31

Page 32: Procesna računala

Slobodni brojač To je registar čija se vrijednost uvećava u pravilnim vremenskim razmacima. Što nam omogućava mjerenje vremena.

SLOBODNIBROJAČ

Tajmerskajedinica

Signal

Sl. 3.33 Slobodni brojač

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

NEZAVISNIBROJAČ

Sigurnosnibrojač

Reset

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.

32

Page 33: Procesna računala

4 Mikrokontroler PIC16F84

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-bit-na veličina riječi instrukcijskog koda

• 8-bit-na 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 bayt-a podatkovne RAM memorije

• 64 bayt-a 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

33

Page 34: Procesna računala

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

• 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:

- < 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

34

Page 35: Procesna računala

4.2 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-bit-na ) 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 kompresiju koda i 4:1 veću brzinu rada ( na 20MHz ) 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 š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. ZAPODATKE

RAM

MEM. ZAPODATKEEEPROM

PORT A PORT B

SLOBODNIBROJAČ

CPU

Sl. 4.1. Blok shema mikrokontrolera PIC 16F84

4.3 Raspored nožica

Sl. 4.2. Raspored nožica mikrokontrolera PIC 16F84

35

Page 36: Procesna računala

1. RA2 – druga nožica porta A 2. RA3 – treća nožica porta A 3. RA4/TOCKI – četvrta nožica porta A i može biti i ulaz takta za timer/brojač 4. MCLR – reset ulaz i Vpp napon programiranja mikrokontrolera 5. VSS – napajanje ( «masa» ) 6. RB0/INT – nulti pin porta B i interrupt ulaz 7. RB1 – prva nožica porta B 8. RB2 – druga nožica porta B 9. RB3 – treća nožica porta B

10. RB4 – četvrta nožica porta B 11. RB5 – peta nožica porta B 12. RB6 – šesta nožica porta B i ulaz takta u programskom modu 13. RB7 – sedma nožica porta B i linija za ulaz podataka u programskom modu 14. Vdd – pozitivno napajanje 15. OSC1 – nožica koja služi za spajanje vanjskog oscilatora 16. 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 17. RA0 – nulta nožica porta A 18. RA1 – prva nožica porta A

4.4 Generatori takta

PIC 16F84 može raditi sa četiri različite konfiguracije oscilatora. Najčešće se koristit kristalni oscilator ( XT ) ili 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.

OSCI 1

OSCI 2

C2

C1

XTAL

Sl. 4.3. Spajanje kristalnog oscilatora

36

Page 37: Procesna računala

OSCI 1

OSCI 2

C

Vdd

R

Sl. 4.4. Spajanje RC oscilatora

+5

t

U

T

Sl. 4.5. Oblik signala pri uključenju oscilatora

37

Page 38: Procesna računala

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 – dešifriranje 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 instrukcijsku 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 dešifrira i izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa TCY2 se instrukcija pozvana na Q1 sprema u instrukcijski registar.

TCY1 TCY2 TCY3

PC

Q1

Q1 Q1 Q1

Q2

Q2 Q2 Q2

Q3

Q3 Q3 Q3

Q4

Q4 Q4 Q4

OSC1

Sl. 4.6. Vremenski dijagram izvršavanja instrukcije

38

Page 39: Procesna računala

4.6 Obrada instrukcija

iklusi povezivanja i izvršavanja instrukcija su tako povezani da je za pozivanje g

4.7 Reset

Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5

Cpotreban jedan instrukcijski ciklus a za dešifriranje i izvršavanje još jedan. No zboprotočne obrade, svaka instrukcija se efektivno izvršava u jednom ciklusu.

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.

Sl. 4.7.

IC 16f84 ima više vrsta resetiranja :

. Resetiranje pri dovođenju napajanja ( Power-on Reset ). Ovaj reset traje isto s

2.

Vdd

RA 2

RA 3

RA 4

MCLR

R

P 1

koliko treba oscilatoru da stabilizira frekvenciju ( ∆T ), slika 4.8. odnosno 72 mDovođenje «0» na MCLR nožicu

3. Reset za vrijeme «Sleep» načina rada a 4. Reset pri prekoračenju Watchdog timer

39

Page 40: Procesna računala

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.

1.8 V

U

t

T

Sl. 4.8. Reset pri padu napona

4.8 Ulazno / izlazni sklopovi

PIC 16F84 ima dva porta, PORA 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 banci0 a TRISA i TRISB u banci1.

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 STATUS, RP0 ;bank1 movlw b´11111100´ ;definiranje ul. I iz. pinova movwf TRISA ;upis u TRISA registar bcf STATUS, RP0 ;bank0 U primjeru su pinovi RA0 i RA1 proglašeni kao izlazni a RA2, RA3 i RA4 ulazni.

40

Page 41: Procesna računala

1

RA2

RA3

0TRISA

PORTA

Sl. 4.9. PORTA

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 STATUS, RP0 ;bank1 movlw 0x0F ;definiranje ul. I iz. pinova movwf TRISB ;upis u TRISB registar bcf STATUS, RP0 ;bank0 bsf PORTB, 4 ;PORTB < 7 : 4 > = 0

bsf PORTB, 5 bsf PORTB, 6 bsf PORTB, 7

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.

41

Page 42: Procesna računala

1

RB1

RB3

RB2

0TRISB

PORTB

Sl. 4.10. PORTB

4.9 Organizacija memorije

Sastoji se od dva bloka, jedan za podatak a 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 put 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 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

Page 43: Procesna računala

Sl. 4.11.Organizacija memorije

odatkovna memorija je još podijeljena na dvije banke, BANK 0 i BANK 1. Banke se

rimjer:

cf STATUS, RP0 - odabrana je banka 0

INDF INDF

TMR0

PCL PCL

STATUS STATUS

FSR FSR

PORTA

PORTB

EEDATA

EEADR

PCLATH PCLATH

INTCON INTCON

OPTION

TRISA

TRISB

EECON1

EECON2

68 BAJTA ZAJEDNIČKERAM MEMORIJEGPR REGISTRI

00h

01h

02h

03h

04h

05h

06h

07h

08h

09h

0Ah

0Bh

0Ch

80h

81h

82h

83h

84h

85h

86h

87h

88h

89h

8Ah

8Bh

8Ch

4Fh CFh

BANK 0 BANK 1

00h

01h

3Fh

EEDATA

PO

DAT

KOVN

A SA

BIR

NIC

A

ADRESNASABIRNICA

RP1 RP0

0 0

0 1

Status registar

1FFFh

Pbiraju preko RP0 bit-a u Status registru. P B

f STATUS, RP0 - odabrana je banka 1 Bs

43

Page 44: Procesna računala

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.

4.9.2 Stog ( Stack )

PIC 16C84 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 RETIFE, koje se izvršavaju na kraju potprograma.

44

Page 45: Procesna računala

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.

IRP RP1 RP0 TO PD Z DC C

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x

bit 0bit 7

C

DC

Z (

PD

TOSL RP«0 IRko

R – bit koji se može očitati U – neiskorišten bit, čita se kao «0»W – bit koji se može upisati n – vrijednost nakon reseta

( 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

( Digit Carry ) – isto kao i Carry samo ovaj bit predstavlja prijenos sa četvrtog mjesta 1 = pojavio se prijenos na četvrtom mjestu 0 = nema prijenosa

Zero ) – bit je setiran kada je rezultat aritmetičko logičke operacije nula 1 = rezultat je nula 0 = rezultat nije nula

( Power-down ) – bit je setiran nakon uključenja napajanja i svakog regularnog reseta 1 = nakon uključenja napajanja 0 = izvršenjem SLEEP instrukcije

( Time-out ) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i EEP 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

1, RP0 ( Register Bank Select ) – bit-ovi za izbor memorijske banke, RP1 je uvijek »

01 = BANK 0 00 = BANK 1

P ( Register Bank Select ) – osmi bit za indirektno adresiranje RAM-a, ne koristi se d PIC 16F84 i ne smije biti setiran

0 = banka 2 i 3 1 = banka 0 i 1

45

Page 46: Procesna računala

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 ).

Sl. 4.12 Direktno adresiranje

BANK 0 BANK 1

IRP0IRP1

+

00

7F

00 01

07

odabirbanke

odabirlokacije

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.

BANK 0 BANK 1

IRP

+

00

7F

00 01

07

odabirbanke

odabirlokacije

Sl. 4.13. Indirektno adresiranje

46

Page 47: Procesna računala

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. Kontrolni registar prekida naziva se INTCON i pristupa mu se nezavisno od selektirane banke.

Vdd

R

RB0/INTT

TOKIZVRŠAVANJAPROGRAMA

NASTAVAKNORMALNOG

TOKAIZVRŠAVANJAPROGRAMA

PROGRAMU KOM SE

OBRAĐUJEPREKID

Sl. 4.13. Prekid glavnog programa

PIC 16F84 ima četiri vrste prekida :

1. Vanjski na nožici RB0/INT 2. Preljev timer-a TMR0 3. Prekid pri promjeni na RB4, RB5, RB6 i RB7 nožicama porta B 4. Prekid nakon završetka procesa upisivanja podataka u EEPROM memoriju

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.

EEIE

TOIE

RBIE

INTE

EEIF

TOIF

RBIF

INTFGIE

INTERUPT

Sl. 4.14. Shema prekida

47

Page 48: Procesna računala

4.10.1 INTCON registar

RBIom p

0IF

BI

0IE

EIE

GIE

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x

bit 0bit 7

INTFprek Tprek Rprom INTERB0 Tprek Enako

R – bit koji se može očitati U – neiskorišten bit, čita se kao «0»W – bit koji se može upisati n – vrijednost nakon reseta

F ( RB Port Change Interrupt Flag ) – bit koji nam govor

ijenio sta 0 = nije se desila promjena ni na jednom

ji nam govori da e došlo do vanjskog

1 = prekid se desio sio

( TMR0 Overflow Interrupt Flag ) – bit koji nam govori da je došlo do

je do prekoračenja

E ( RB Port Change Interrupt Enable ) – bit koji omogućava pojavu prekida na

rekida a

uje vanjski prekid sa pina

1 = prekid je omogućen n

( TMR0 Overflow Interrupt Enable ) – bit koji omogućuje prekid prilikom

Brojača TMR0 ogućen

n ( EEPROM Write Complete Interrupt Enable ) – bit koji omogućava prekid

n ( Global Interrupt Enable ) – bit koji dozvoljava ili zabranjuje sve prekide

i

i o promjeni na 4,5,6, ili 7-

nje inu porta B

1 = najmanje jedan pin je prom pinu

( INT External Interrupt Flag ) – bit koida

0 = prekid se nije de

oračenja TMR0 brojača 1 = došlo 0 = nije došlo do prekoračenja

jenu stanja 4, 5, 6 ili 7-og pina porta B 1 = omogućena pojava p 0 = onemogućena pojava prekid

( INT External Interrupt Enable ) – bit koji omoguć/INT

0 = prekid je onemoguće

oračenja 1 = prekid je om 0 = prekid je onemoguće

n završetka upisa u EEPROM memoriju 1 = prekid je omogućen 0 = prekid je onemoguće

1 = svi prekidi su omogućeni 0 = svi prekidi su onemogućen

48

Page 49: Procesna računala

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 STATUS,RP0 ;bank0 jer je EEADR na 09h Movlw 0x00 ;adresa lokacije koja se cita Movwf EEADR ;adresa se prebacuje u EEADR Bsf STATUS,RP0 ;bank1 jer je EECON1 na 88h Bsf EECON,RD ;citanje iz EEPROM-a Bcf STATUS,RP0 ;bank0 jer je EEDATA na 08h Movf EEDATA,W ;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 djela programa koji vrši upis podatka 0xEE u prvu lokaciju EEPROM memorije. Bcf STATUS,RP0 ;bank0 jer je EEADR na 09h Movlw 0x00 ;adresa lokacije u koju se pise Movwf EEADR ;adresa se prebacuje u EEADR Movlw 0Xee ;upisujemo vrijednost 0xEE Movwf EEDATA ;podatak ide u EEDATA registar Bsf STATUS,RP0 ;bank1 jer je EEADR na 09h Bcf INTCON,GIE ;svi prekidi se onemogucuju Bsf EECON1,WREN ;omogućuje se upis 1. movlw 55h 2. movwf EECON2 ;prvi kljuc 55h EECON2 3. movlw AAh 4. movwf EECON2 ;drugi kljuc AAh EECON2 5. bsf EECON1,WR ;inicira upis bsf INTCON,GIE ;prekidi se omogucuju

49

Page 50: Procesna računala

EEPROM memoriji se pristupa preko SFR registara a to su: EEDATA – 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 – fizički ne postoji, a 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.

EETE WRERR WREN WR RD

U-0 U-0 U-0 R/W-1 R/W-1 R/W-x R/S-0 R/S-x

bit 0bit 7

R

Wk W

Wu

EE

R – bit koji se može očitati U – neiskorišten bit, čita se kao «0»W – bit koji se može upisati n – vrijednost nakon reseta

enos podataka s adrese definirane EEADR u D ( Read Control ) – bit koji inicira prij EEDATA registar

1 = inicira čitanje 0 = ne inicira čitanje

R ( Write Control ) – bit koji inicira upis podataka iz EEDATA registra na adresu oja se nalazi u EEADR registru

1 = inicira upis 0 = ne inicira upis

REN ( EEP OM W ji omogućuje upis u EEPROM memoriju R rite Enable ) – bit ko 1 = upis je dozvoljen

0 = upis nije dozvoljen RERR ( EEPROM Error Flag ) – bit koji nam govori da je došlo do greške prilikom

pisa u EEPROM 1 = došlo je do greške 0 = do greške nije došlo

EIF ( EEPROM Write Operation Interrupt Flag ) – bit koji nam govori da je upis u EPROM završen

1 = upis je završen 0 = upis nije počeo ili nije završen

50

Page 51: Procesna računala

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č brojati ( 28 = 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.

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.

51

Page 52: Procesna računala

4.12.1 OPTION registar

Pp

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1

bit 0bit 7

Kdb

P Tb T Iv R

R – bit koji se može očitati U – neiskorišten bit, čita se kao «0»W – bit koji se može upisati n – vrijednost nakon reseta

i defi iraju faktor djeljenja S0, PS1, PS2 ( Prescaler Rate Select ) – bit-ovi koj nreskalera

oristimo li takt od 4 MHz jedan instrukcijski ciklus ( 4 interna takta ) traje 1 µs tako a broj u danoj tablici pokazuje na koliko mikrosekundi se uvećava TMR ili WDT rojač za jedan.

Bitovi TMR0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128

SA ( Prescaler Assignment ) – bit koji vrši dodjelu preskalera 1 = preskaler je dodijeljen WDT brojaču 0 = preskaler je dodijeljen TMR0 brojaču

0SE ( TMR0 Sorce Edge Select ) – bit kojim se bira ivica signala za okidanje

0CS

– bit kojim se bira ivica signala na koji se pojavljuje

rojača TMR0 1 = padajuća ivica 0 = rastuća ivica

TMR Clock ourc za TMR0 ( 0 S e Select ) – bit kojim se bira izvor taka 1 = vanjski preko RA4/TOCKI nožice

0 = interni takt ( ¼ takta oscilatora ) NTEDG ( Interrupt Edge Select ) anjski prekid s nožice RB0/INT

1 = rastuća ivica 0 = padajuća ivica

BPU ( PORB Pull-up Enable ) – bit koji uključuje ili isključuje pull-up tranzistore

0 = isključeni 1 = uključeni

52

Page 53: Procesna računala

5 Set instrukcija

5.1 Prijenos podataka Vrši se između radno registra ( W ) i « f » registra koji predstavlja bilo koju

lokaciju RAM-a. Prve tri instrukcije iz tablice 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 posle 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.

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 upiše 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.

53

Page 54: Procesna računala

Instrukcija Opis

Trajanje u strojnim ciklusima

Utječe na STATUS bit-ove

addwf f, d Zbrajanje akumulatora i registra f 1 C, DC, Z andwf f, d Logički I akumulatora i registra f 1 Z clrf f Brisanje registra f 1 Z clrw Brisanje akumulatora 1 Z comf f, d Komplement registra f 1 Z decf f, d Smanjenje registra f za 1 1 Z decfsz f,d Smanjenje registra f za 1, preskače sljedeću

instrukciju ako je rezultat 1 1(2) nijedan

incf f, d Povećanje registra f za 1 1 Z incfsz f, d Povećanje registra f za 1, preskače sljedeću

instrukciju ako je rezultat 0 1(2) nijedan

iorwf f, d Inkluzivni ILI akumulatora i f registra 1 Z movf f, d Premještanje sadržaja rgistra f 1 Z movwf f Premještanje sadržaja akumulatora u registar f 1 nijedan nop Nul-operacija 1 nijedan rlf f, d Rotiranje registra f u lijevo kroz Carry bit 1 C rrf f, d Rotiranje registra f u desno kroz Carry bit 1 C subwf f, d Oduzimanje akumulatora od registra f 1 C, DC, Z swapf f, d Zamjena riječi registra f 1 nijedan xorwf f, d Ekskluzivni ILI akumulatora i registra f 1 Z

Operacije nad bit-ovima bcf f, b Brisanje bit-a b registra f 1 nijedan bsf f, b Postavljanje bit-a b registra f 1 nijedan btfsc f, b Brisanje bit-a b registra f, preskače sljedeću

instrukciju ako je rezultat 0 1(2) nijedan

btfss f, b Postavljanje bit-a b registra f, preskače sljedeću instrukciju ako je rezultat 0

1(2) nijedan

Instrukcije nad konstantama i kontrolne instrukcije addlw k Zbrajanje akumulatora i konstante k 1 C, DC, Z andlw k Logički I akumulatora i konstante k 1 Z call k Poziv potprograma 2 nijedan clwrdt Brisanje sigurnosnog brojača 1 TO , PD goto k Grananje programa 2 nijedan iorlw k Inkluzivni ILI akumulatora i konstante k 1 Z movlw k Upisivanje konstante k u akumulator 1 nijedan retfie Povratak iz prekidne rutine 2 nijedan retlw k Povratak iz potprograma s vrijednošću k u

akumulatoru 2 nijedan

return Povratak iz potprograma 2 nijedan sleep Postavljanje mikrokontrolera u standby mode 1 TO , PD sublw k Oduzimanje akumulatora od konstante k 1 C, DC, Z xorlw Ekskluzivni ILI akumulatora i konstante k 1 Z

54

Page 55: Procesna računala

5.6 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: W = 0x10 Poslije instrukcije: 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: W = 0x17 REG = 0xC2 Poslije instrukcije: W = 0xD9 REG = 0xC2 C = 0 Primjer 2 ADDWF INDF, f

Prije instrukcije: W = 0x17 FSR = 0xC2 sadržaj adrese 0xC2 = 0x20 Poslije instrukcije: W = 0x17 FSR = 0xC2 sadržaj adrese 0xC2 = 0x37

55

Page 56: Procesna računala

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 Primjer 1

ANDLW 0x5F Prije instrukcije: W = 0xA3 ;1010 0011 (0xA3) Poslije instrukcije: W = 0x03 ;0101 1111 (0x5F) --------------------------- ;0000 0011 (0x03) Z = 0 (rezultat nije nula) Primjer 2 ANDLW 0x55

Prije instrukcije: W = 0xAA ;1010 1010 (0xAA) Poslije instrukcije: W = 0x17 ;0101 0101 (0x55) --------------------------- ;0000 0011 (0x03) Z = 1 (rezultat je nula)

56

Page 57: Procesna računala

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: W = 0x17, REG=0xC2 ;0001 0111 (0x17) Poslije instrukcije: W = 0x17, REG=0x02 ;1100 0010 (0xC2) --------------------------- ;0000 0010 (0x02) Primjer 2 ANDWF FSR, w

Prije instrukcije: W = 0x17, FSR=0xC2 ;0001 0111 (0x17) Poslije instrukcije: W = 0x02, FSR=0xC2 ;1100 0010 (0xC2) --------------------------- ;0000 0010 (0x02)

57

Page 58: Procesna računala

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: REG = 0xC7 ;0001 0111 (0x17) Poslije instrukcije: REG=0x47 ;1100 0010 (0xC2 Primjer 2 BCF INDF, 3

Prije instrukcije: W = 0x17 FSR=0xC2 sadržaj adrese (FSR) = 0x2F

Poslije instrukcije: 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: REG = 0x07 ;0000 0111 (0x07) Poslije instrukcije: REG=0x87 ;1000 0111 (0x87) Primjer 2 BSF INDF, 3 Prije instrukcije: W = 0x17

FSR=0xC2 sadržaj adrese (FSR) = 0x20

Poslije instrukcije: W = 0x17 FSR=0xC2 sadržaj adrese (FSR) = 0x28

58

Page 59: Procesna računala

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 jenak 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_01 BTFSC 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. 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_01 BTFSC 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.

59

Page 60: Procesna računala

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_01 CALL LAB_02 ;Pozovi podprogram LAB_02 : : LAB_02 . . . . . .

Prije instrukcije: PC = adresa LAB_01 TOS ( vrh stoga ) = x Poslije instrukcije: 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: TRISB = 0xFF Poslije instrukcije: TRISB = 0x00 Z = 1 Primjer 2 CLRF INDF

Prije instrukcije: FSR=0xC2 sadržaj adrese 0xC2 = 0x33

Poslije instrukcije: FSR=0xC2 sadržaj adrese 0xC2 = 0x00 Z = 1

60

Page 61: Procesna računala

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: W = 0x55 Poslije instrukcije: 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: WDT brojač = x

WDT preskaler = 1 : 128 Poslije instrukcije: WDT brojač = 0 TO = 1 PD = 1

WDT preskaler = 1 : 128

61

Page 62: Procesna računala

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 Primjer 1

COMF REG, w Prije instrukcije: REG=0x13 ;0001 0011 (0x13) Poslije instrukcije: REG=0x13 ;komplementiranje W = 0xEC ----------------------------- 1110 1100 (0xEC) Primjer 2 COMF INDF, f

Prije instrukcije: FSR=0xC2 Sadržaj adrese ( FSR ) = 0xAA

Poslije instrukcije: 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: REG=0x01 Z = 0 Poslije instrukcije: REG=0x00 Z = 1

62

Page 63: Procesna računala

Primjer 2

DECF REG, w

Prije instrukcije: REG=0x13 W = x

Z = 0 Poslije instrukcije: 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 Primjer MOVLW .10 MOVWF CNT ;CNT < -10 Loop ;Blok naredbi DECFSZ CNT, f ;Umanji sadržaj REG za jedan GOTO Loop ;Preskoči ovu liniju ako je = 0 LAB_03 ;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.

63

Page 64: Procesna računala

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_00 CALL LAB_01 ;Skoči na LAB_01 : : 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: REG=0xFF Z = 0 Poslije instrukcije: REG=0x00 Z = 1

Primjer 2 INCF REG, w

Prije instrukcije: REG=0x10 W = x

Z = 0 Poslije instrukcije: REG=0x10 W = 0x11 Z = 0

64

Page 65: Procesna računala

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_01 INCFSZ REG, f ;Uvećaj sadržaj REG za jedan LAB_02 . . . . . . ;Preskoči ovu liniju ako je = 0 LAB_03 . . . . . . ;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,

ukoliko je REG = 0 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: W = 0x9A Poslije instrukcije: W = 0xBF Z = 0

65

Page 66: Procesna računala

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: REG=0x13, W = 0x91 Poslije instrukcije: REG=0x13, W = 0x93 Z = 0 Primjer 2

IORWF REG, f Prije instrukcije: REG=0x13, W = 0x91 Poslije instrukcije: REG=0x93, W = 0x91 Z = 0

66

Page 67: Procesna računala

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: FSR = 0xC2

W = 0x00 Poslije instrukcije: W = 0xC2 Z = 0 Primjer 2

MOVF INDF, f Prije instrukcije: W = 0x17 REG=0xC2 sadržaj adrese 0xC2 = 0x00 Poslije instrukcije: 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

67

Page 68: Procesna računala

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: W = 0x40 Poslije instrukcije: OPTION_REG = 0x40 W = 0x40 Primjer 2

MOVWF INDF Prije instrukcije: W = 0x17 REG=0xC2 sadržaj adrese 0xC2 = 0x00 Poslije instrukcije: 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: PC = x Poslije instrukcije: PC = x + 1

68

Page 69: Procesna računala

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: PC = x GIE = 0 Poslije instrukcije: PC = TOS GIE = 1 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: W = x PC = x TOS = x Poslije instrukcije: W = 0x43 PC = TOS TOS = TOS – 1

69

Page 70: Procesna računala

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: PC = x TOS = x Poslije instrukcije: 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<n> ) d<n+1> , f<7> C , C d<0> Operand: 0 ≤ f ≤ 127 , d ∈ [0,1] Zastavica: C Broj riječi: 1 Broj ciklusa: 1

registar 1C

Primjer 1 RLF REG, w Prije instrukcije: REG = 1110 0110 C = 0 Poslije instrukcije: REG = 1110 0110 W = 1100 1100 C = 1 Primjer 2

RLF REG, f Prije instrukcije: REG = 1110 0110 C = 0 Poslije instrukcije: REG = 1100 1100 C = 1

70

Page 71: Procesna računala

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<n> ) d<n-1> , f<0> C , C d<0> Operand: 0 ≤ f ≤ 127 , d ∈ [0,1] Zastavica: C Broj riječi: 1 Broj ciklusa: 1

registar 1C

Primjer 1 RRF REG, w Prije instrukcije: REG = 1110 0110 W = x C = 0 Poslije instrukcije: REG = 1110 0110 W = 0111 0011 C = 0 Primjer 2

RRF REG, f Prije instrukcije: REG = 1110 0110 C = 0 Poslije instrukcije: REG = 0111 0011 C = 0

71

Page 72: Procesna računala

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 Primjer

SLEEP Prije instrukcije: WDT brojač = x

WDT preskaler = x Poslije instrukcije: 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: W = 0x01, C = x, Z = x Poslije instrukcije: W = 0x02, C = 1, Z = 0, rezultat je pozitivan

Prije instrukcije: W = 0x03, C = x, Z = x Poslije instrukcije: W = 0x00, C = 1, Z = 1, rezultat je nula

Prije instrukcije: W = 0x04, C = x, Z = x Poslije instrukcije: W = 0xFF, C = 0, Z = 0, rezultat je negativan

72

Page 73: Procesna računala

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: REG = 3, W = 2, C = x, Z = x Poslije instrukcije: REG = 1, W = 2, C = 1, Z = 0, pozitivan rezultat

Prije instrukcije: REG = 2, W = 2, C = x, Z = x Poslije instrukcije: REG = 0, W = 2, C = 1, Z = 1, rezultat je nula

Prije instrukcije: REG = 1, W = 2, C = x, Z = x Poslije instrukcije: REG = 0xFF, W = 2, C = 0, Z = 0, negativan

rezultat 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: REG = 0xF3 Poslije instrukcije: REG = 0xF3 W = 0x3F Primjer 2

SWAPF REG, f Prije instrukcije: REG=0xF3 Poslije instrukcije: REG=0x3F

73

Page 74: Procesna računala

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: W = 0xB5 ;1011 0101 (0xB5) Poslije instrukcije: W = 0x1A ;1010 1111 (0xAF) Z = 0 ---------------------------- ;0001 1010 (0x1A) Primjer 2 Konst equ 0x37 XORLW Konst

Prije instrukcije: W = 0xAF ;1010 1111 (0xAF) Konst = 0x37 ;0011 0111 (0x37) Poslije instrukcije: W = 0x98 --------------------------- Z = 0 ;1001 1000 (0x98) 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 Primjer 1

XORWF REG, f Prije instrukcije: REG = 0xAF, W = 0xB5; 1011 0101 (0xB5) Poslije instrukcije: REG = 0x1A, W = 0xB5; 1010 1111 (0xAF) ------------------------ ;0001 1010 (0x1A) Primjer 2 XORWF REG, w

Prije instrukcije: REG = 0xAF, W = 0xB5; 1010 1111 (0xAF) Poslije instrukcije: REG = 0xAF, W = 0x1A; 1011 0101 (0xB5) ------------------------ ;0001 1010 (0x1A)

74

Page 75: Procesna računala

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, asemblerski jezik je skup pravila po kojima se piše program za mikrokontroler.

Program.asm Program.hex

Programer

Prevodilac Programator

Edi

tor

PIC

16F8

4

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.

asm hex RETURN 00 0010 0000 1000

75

Page 76: Procesna računala

6.1.1 Elementi programskog jezika asembler Osnovni elementi su:

- Labele - Naredbe - Operandi - Komentari - Direktive

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

76

Page 77: Procesna računala

7. MPLAB IDE v6.60

7.1. MPLAB IDE MPLAB IDE (Integrated Development Environment) je integrirano razvojno okruženje za pisanje i razvoj programa Microchip-ovih PICmicro® MCU familije mikrokontrolera i dsPICTM 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).

77

Page 78: Procesna računala

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.

title "PIC16F877 brojac" PROCESSOR 16F877 #include <p16f877.inc> ;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 0x0020 ;sve tri adrese se DVAR equ 0x0021 ;nalaze u BANK0 DVAR2 equ 0x0022 ;GPS registra

org 0x00 ;početna adresa od koje mikrokontroler goto Main ; kreće nakon dovođenja napajanja

Main bcf STATUS,RP0 ;BANK0 bcf STATUS,RP1 clrw ;izbriši W registar movwf PORTB ;brišemo PORTB bsf STATUS,RP0 ;BANK1 movwf TRISB ;configuriramo PORTB kao izlazni

Init bcf STATUS,RP0 clrf COUNT ;brišemo count

IncCount

incf COUNT,F ;incrementiramo count movf COUNT,W ;CONT→W movwf PORTB ;prosljedi na PORTB call Delay ;pozivanje Timerskog potprograma goto IncCount ;petlja

Delay

movlw 0xFF ;vremensko trajanje petlje movwf DVAR2

D0 movwf DVAR

D1 decfsz DVAR,F goto D1 decfsz DVAR2,F goto D0 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.

78

Page 79: Procesna računala

Slika 1:

Pritisnitie Save.

Bilješka: 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 .

7.3.3 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 Pokretanje Čarobnjaka (Wizard)

1.  Čarobnjak se pokreće akcijom Project>Project Wizard . Prikazat će se «Welcome!» ekran. Odaberite Next tipku za nastavak (Slika 2.)

Slika 2.

79

Page 80: Procesna računala

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).

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.

80

Page 81: Procesna računala

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.)

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).

81

Page 82: Procesna računala

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.

82

Page 83: Procesna računala

Prozor projekta na radnoj površini bi trebao izgledati kao na slici 9.

Slika 9.

SAVJET: 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.

7.3.4. 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.

83

Page 84: Procesna računala

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 alat za pronalaženje pogreški, selektiranjem Debugger>Select Tool>MPLAB SIM (Slika 11).

84

Page 85: Procesna računala

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) Slika12.

85

Page 86: Procesna računala

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.

Slika13a.

86

Page 87: Procesna računala

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 ). Zelena strelica će pokazat na liniju kôda na kojoj je aplikacija zaustavljena. 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.

Vrijednost koju unosimo označava milisekunde po koraku [msecs]. To znači da će prije izvršenja sljedećeg koraka čekati 0,5 sekundi.

87

Page 88: Procesna računala

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: Da bi se generirala takva informacija prikazivanja varijable u

pojavljujućem(pop-up) prozorčiću program mora biti kompajliran i povezan.

7.3.6.3 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.

88

Page 89: Procesna računala

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.

89

Page 90: Procesna računala

Slika 16.

Napomena: 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.

90

Page 91: Procesna računala

7.3.6.4 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.

91

Page 92: Procesna računala

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.

92

Page 93: Procesna računala

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.

2.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.

93

Page 94: Procesna računala

Slika 21.

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.

94

Page 95: Procesna računala

Slika 23.

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 Point . Stop znak bi se trebao pojaviti na lijevoj margini pokraj te linije kôda (Slika 21.).

Slika 21.

95

Page 96: Procesna računala

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.

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.

96

Page 97: Procesna računala

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.

• 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)

97

Page 98: Procesna računala

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.

98

Page 99: Procesna računala

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 .

99

Page 100: Procesna računala

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.

100

Page 101: Procesna računala

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.

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.

101

Page 102: Procesna računala

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.

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.

102

Page 103: Procesna računala

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.

103

Page 104: Procesna računala

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.

Kad počne programiranje pojavit će se sljedeća slika:

104

Page 105: Procesna računala

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!

105

Page 106: Procesna računala

9. Opis razvojnog sustava

9.1. Napajanje

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.

106

Page 107: Procesna računala

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.

107

Page 108: Procesna računala

 

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.

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.

108

Page 109: Procesna računala

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!!!.

Izgled postavljenog LCD zaslona na port B. Izgled postavljenog LCD zaslona na port D.

109

Page 110: Procesna računala

9.5. Sedamsegmentni zaslon Sedamsegmentni zaslon se sastoji od četiri cifre čije se osvježavanje i ispis vrši preko porta B u kombinaciji sa portom A. Preko DIP prekidača SW2, definiraju se cifre koje će biti uključene, a koje ne. Npr. recimo da treba omogućiti prikazivanje krajnje lijeve cifre. Prebacivanjem četvrtog prekidača na SW2 u radni režim (ON) cifra sedamsegmentnog zaslona (DIS1, krajnje lijevo cifra) će pokazivati vrijednost koja je definirana vrijednostima pinova porta B (slika 18.). Slično se radi kada su u pitanju cifre DIS2, DIS3 i DIS4. Naredna slika prikazuje način povezivanja sedamsegmentnih zaslona sa mikrokontrolerom.

110

Page 111: Procesna računala

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.

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.

111

Page 112: Procesna računala

9.7. RS232 komunikacija RS232 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.

112

Page 113: Procesna računala

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 20. ilustrirano je povezivanje digitalnog termometra i mikrokontrolera na razvojnom sustavu.

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.

113

Page 114: Procesna računala

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 (pull-down). 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 desno, a shematski je predstavljeno slikama ispod.

114

Page 115: Procesna računala

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.

115

Page 116: Procesna računala

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.

116

Page 117: Procesna računala

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 PIC16F877, 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 3.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 PIC16F877. 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: LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu imati logičku nulu da bi dioda svjetlila.

117

Page 118: Procesna računala

10.2 Makro naredbe Makro naredbe se definiraju preko direktive macro u okviru koje se zadaje ime makroa i po potrebi argumenti.

Ime_makroa macro argument1,arg2,… niz instrukcija niz instrukcija endm 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.

RP1:RP0 Bank 00 0 01 1 10 2 11 3

bank.inc (Spremiti kao "bank.inc" notepad-u). BANK0 macro bcf STATUS,RP0 bcf STATUS,RP1 endm BANK1 macro bcf STATUS,RP0 bsf STATUS,RP1 endm BANK2 macro bsf STATUS,RP0 bcf STATUS,RP1 endm BANK3 macro bsf STATUS,RP0 bsf STATUS,RP1 endm 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.

118

Page 119: Procesna računala

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.

119

Page 120: Procesna računala

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 ;deklaracija i konfiguracija procesora #include "p16f877.inc" ;memorijske adrese u slovima #include "bank.inc" ;ukljucivanje makroa umjesto bsf __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC BANK1 ;bcf STSTUS,RP1 ; bsf STSTUS,RP0 movlw 0x00 ;upisi 0 u radni spremnik movwf TRISB ;upisi u reg. TRISB-definiramo ;pinove portaB kao izlazne

BANK0 ;bcf STATUS,RP0 movlw 0xFF ;b'11111111' movwf PORTB ;svi pinovi porta B odlaze u 1 Petlja 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 bcf STASTUS,RP1 bsf STASTUS,RP0;BANKA 1 movlw 0x00 ;upisi 0 u radni spremnik movwf TRISB ;upisi u reg. TRISB-definiramo ;pinove portaB kao izlazne

bcf STATUS,RP0 ;BANKA 0 movlw 0xFF ;b'11111111' movwf PORTB ;svi pinovi porta B odlaze u 1 Petlja goto Petlja ;labela petlje End ;nakon reseta su svi pinovi ulazni

120

Page 121: Procesna računala

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 0x00 goto Main BANK1 movlw b'00000000' movwf TRISB movlw b'11111111' movwf TRISC BANK0 Main btfss PORTC,0 ;kontrola 1 na RC0 bcf PORTB,0 ;ako je nula resetira RB0 btfsc PORTC,0 ;kontrola 0 na RC0 bsf PORTB,0 ;ako je jedinica setira RB0 btfss PORTC,1 ;kontrola 0 na RC1

bsf PORTB,1 ;ako je nula setira RB1 btfsc PORTC,1 ;kontrola 1 na RC1

bcf PORTB,1 ;ako je jedinica setira RB1 goto Main end

121

Page 122: Procesna računala

10.4.4 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 0x00 goto Main Main clrf FSR clrf INDF movlw .65 ;65→w addlw . .120 ;65+120=185→w sublw .150 ;150-185=.221 ili 0xdd→w addlw .120 ;35+221=85→w movf 0x20,0 ;Vrijednost sa adrese 0x20 ;u w. 0x20=.0 addlw .12 ;0+12→w movlw 0x21 ;0x21→w movwf FSR ;0x21→FSR movf INDF,0 ;Vrijednost reg. INDF→w

;INDF sadrži vrijednost :registra 0x21, a reg. FSR ;sadrži njegovu adresu

addlw .20 ;0+20=.20→w goto Main end 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 sto i 56 +(-34) 56 00111000 34 00100010

prvi komplement 11011101 + 1

drugi komp. (-34) 11011110 +56 00111000 22 100010110

122

Page 123: Procesna računala

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 0x00 BANK1 movlw b'11111111' movwf TRISB clrf TRISC BANK0 clrf PORTC goto Main Main movlw .100 subwf PORTB,0 ;W=potrb-100 btfsc STATUS,Z ;da li je rez=0 bsf PORTC,0 ;portb=100, setiramo RC0 btfsc STATUS,C ;da li je portb>100 bsf PORTC,1 ;portb>100, setiramo RC1 btfsc STATUS,C ;da li je portb>100 bcf PORTC,2 ;portb>100, resetiramo RC2

btfss STATUS,C ;da li jeportb<100, bcf PORTC,1 ;portb>100, resetiramo RC1 btfss STATUS,C ;da li je portb<100 bsf PORTC,2 ;portb<100, setiramo RC2 goto Main end Primjer sa mogućim stanjem PortB registra

Prije instrukcije: PortB = 3, W = 2, C = x, Z = x Poslije instrukcije: PortB = 3, W = 1, C = 1, Z = 0 pozitivan rezultat

Prije instrukcije: PortB = 2, W = 2, C = x, Z = x Poslije instrukcije: PortB = 2, W = 0, C = 1, Z = 1 rezultat je nula

Prije instrukcije: PortB = 1, W = 2, C = x, Z = x Poslije instrukcije: PortB =1, W = 0xFF, C = 0, Z = 0 negativan rezultat

123

Page 124: Procesna računala

10.4.6 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 & _WDT_OFF & _PWRTE_ON & _XT_OSC org 0x00 goto Main Main BANK1 Clrf TRISB Movlw b'11111111' ;ili 0xff Movwf TRISC BANK0 Clrf PORTB Btfsc PORTC,0 ;RC0 uvećava PortB Incf PORTB Btfsc PORTC,1 ;RC1 smanjuje PortB Decf PORTB Goto Main end 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.

PROCESSOR 16f877 #include "p16f877.inc" #include "bank.inc" __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org 0x00 BANK1 Movlw 0xff Movwf TRISC ;definiranje portova BANK0 Movlw .12 ;.12→w Movwf 0x20 ;prvi slobodan GPR registar u BANK0 Goto Main Main btfsc PORTC,0 ;Ispituje stanje RC0 Decfsz 0x20 ;Dekrementira, preskače sljedeću ;instrukciju kada dođe do nule

goto Main bsf 0x20,4 ;setira 4 bit - ekvivalentno .16 goto Main end

124

Page 125: Procesna računala

10.4.7 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 STATUS, RP0 ; BCF STATUS, RP1 ; Bank0 CLRF PORTA ; Inicijalizacija PORTA tako

; da prvo očistimo izlazne ; rezultate podataka

BSF STATUS, RP0 ; Bank 1 MOVLW 0x06 ; Konfiguriranje svih MOVWF ADCON1 ; pinova kao digitalne MOVLW 0xCF ; Vrijednost korištena

; da odredimo koji su ; ulazno/izlazni pinovi

MOVWF TRISA ; RA<3:0> kao ulazni ; RA<5:4> kao izlazni ; TRISA<7:6>su uvijek ; čitani kao ’0’.

MOLW B'00000111' ;Pinovi RE<2:0> se jedino MOVWF TRISE ;mogu koristiti kao u/i pinovi

;Ovom vrijednošću su definirani ;kao ulazni

Napomena:

Na razvojnom sustavu su na testne LED diode priključeni sljedeći pinovi PORTA RA<5:0> i PORTE RE<1:0>.

125

Page 126: Procesna računala

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 STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVF ADDR, W ; Adresa s koje MOVWF EEADR ; ćemo čitati BSF STATUS, RP0 ; Bank 3 BCF EECON1, EEPGD ;Pokazuje na memoriju ; podataka EEPROM BSF EECON1, RD ; Početak operacije čitanja BCF STATUS, RP0 ; Bank 2 MOVF EEDATA, W ; W = EEDATA

10.4.9 EEPROM - upis podatka u memoriju

BSF STATUS, RP1 ; BSF STATUS, RP0 ;Bank 3 BTFSC EECON1, WR ;Čeka na GOTO $-1 ;završetak upisa BCF STATUS, RP0 ;Bank 2 MOVF ADDR, W ;Adresa na koju MOVWF EEADR ; ćemo pisati MOVF VALUE, W ;Podatak koji MOVWF EEDATA ; ćemo upisati BSF STATUS, RP0 ;Bank 3 BCF EECON1, EEPGD ;Pokazuje na memoriju ; podataka EEPROM BSF EECON1, WREN ;Omogućuje upis

;/Onemogućuje prekide BCF INTCON, GIE ;- ako su već ranije omogućeni, ;\ u suprotnom izbacite tu liniju MOVLW 0x55 ;Upisuje vrijednost 55h MOVWF EECON2 ; u registar EECON2 (prvi ključ) MOVLW 0xAA ;Upisuje vrijednost AAh MOVWF EECON2 ; u reg. EECON2 (drugi ključ) BSF EECON1, WR ;Počinje operacija upisa

;/Omogućuje prekide BSF INTCON, GIE ;- ako ih koristimo,

;\ u suprotnom izbacite BCF EECON1, WREN ;Onemogučuje pisanje

126

Page 127: Procesna računala

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

Čitanje se vrši na sljedeći način:

BSF STATUS, RP0 ;Bank 2 MOVF ADDRL, W ;Upisujemo MOVWF EEADR ; adresu sa MOVF ADDRH,W ; koje ćemo MOVWF EEADRH ; čitati podatak BSF STATUS, RP0 ;Bank 3 BSF EECON1, EEPGD ;Pokazuje na FLASH ; programsku memoriju BSF EECON1, RD ;Početak operacije čitanja NOP ;Potrebna su mu dva NOP (ciklusa) NOP ; BCF STATUS, RP0 ;Bank 2 MOVF EEDATA, W ;DATAL = EEDATA MOVWF DATAL ; MOVF EEDATH,W ;DATAH = EEDATH MOVWF DATAH ;

127

Page 128: Procesna računala

10.4.11 FLASH programska memorija - upisivanje podataka

BSF STATUS, RP1 ; BCF STATUS, RP0 ;Bank 2 MOVF ADDRL, W ;Upisujemo adresu MOVWF EEADR ; željene lokacije MOVF ADDRH, W ; u programskoj MOVWF EEADRH ; memoriji MOVF VALUEL, W ;Upisujemo vrijednost MOVWF EEDATA ; u program MOVF VALUEH, W ; na željenoj memorijskoj MOVWF EEDATH ; lokaciji BSF STATUS, RP0 ;Bank 3 BSF EECON1, EEPGD ;Pokazuje na FLASH ; programsku memoriju BSF EECON1, WREN ;Omogućuje upis

;/Onemogućuje prekide BCF INTCON, GIE ;- ako su već ranije omogućeni, ;\ u suprotnom izbacite tu liniju MOVLW 0x55 ;Upisuje 55h u MOVWF EECON2 ;registar EECON2 MOVLW 0xAA ;Upisuje AAh u MOVWF EECON2 ; registar EECON2 BSF EECON1, WR ;Počinje operaciju upisa NOP ;Mikrokontroleru su potrebna NOP ; dva NOP-a da se spremi za ; upis

;/Omogućuje prekide BSF INTCON, GIE ;- ako ih koristimo,

;\ u suprotnom izbacite tu liniju

BCF EECON1, WREN ;Onemogućuje upis

128

Page 129: Procesna računala

10.4.12 Zbrajanje dva 16 bitna broja

PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC LSB1 equ 0x20 ;Argument 1, niži bajt MSB1 equ 0x21 ;Argument 1, viši bajt LSB2 equ 0x22 ;Argument 2, niži bajt MSB2 equ 0x23 ;Argument 2, viši bajt org 0x00 ;Reset vektor goto Main Main

movf LSB1,w addwf LSB2,f ;zbroji i spremi u lsb2 btfsc STATUS,C ;Kontrola carry bita, preskoci

;za nula incf MSB2,1 ;inkrementiraj i spremi u MSB2 movf MSB1 addwf MSB2,f ;zbroji ga sa msb2 end

10.4.13 Oduzimanje dva 16 bitna broja PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC LSB1 equ 0x20 MSB1 equ 0x21 LSB2 equ 0x22 MSB2 equ 0x23 movf LSB1,W subwf LSB2,1 ;oduzmi i spremi u lsb2 btfss STATUS,C ;kontrola carry bita decf MSB2,1 ;dekrementiraj i spremi u MSB2 movf MSB1 subwf MSB2,1 ;zbroji ga sa msb2 end

129

Page 130: Procesna računala

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 movwf rsort ;interacija snimanja movlw 0x30 ;sprema h'30' u w movwf asort ;početna adresa sortiranja poc movlw .9 ;9 w movwf bi ;broj interacija traženja najvećeg movlw 0x20 movwf nadr ;početna adresa najvećeg = h'20' movwf FSR ;spremanje u FSR registar,broj 0x20 movf INDF,0 movwf sort ;Podatak se sprema u sort, početna ;najveća vrijednost prva clrf 0x20 ;cisti spremnik incf FSR ;sljedeća adresa : 0x21 subwf INDF,0 ;0x21 - 0x20 indirektno →w btfsc STATUS,C ;usporedba carry bita bsf 0x2a,0 ;upis statusa u pomoćni registar 0x2a subwf INDF,0 ;vrijednost lokacije 0x21 u w btfsc 0x2a,0 goto naj ;upisivanje najvećeg broja decfsz bi goto prva goto upis naj movf FSR,0 ;indirektno, u njega guramo adresu, upis movwf nadr ;upis u nadr movf INDF,0 ;sprema vrijednost u sort movwf sort ;upis u sort decfsz bi ;dekrement goto prva goto upis upis movf nadr,0 movwf FSR ;upis najvećeg u FSR clrf INDF ;cisti najveću vrijednost movf asort,0 ;asort u FSR ->0x30 movwf FSR ;na novu adresu movf sort,0 movwf INDF ;upis najvećeg na 1. adresu 0x30 incf asort ;uvećavanje adrese decfsz rsort ;umanjivanje broja interacija

goto poc end

130

Page 131: Procesna računala

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 0x00 goto Main org 0x04 ;interupt vektor goto Inter Main clrf TMR0 BANK1 movlw B'01000000' ;unosimo bin podatak movwf OPTION_REG ;interrupt preko RB0 na ; rastuci brid BANK0 ;setira bitove za E prekida bsf INTCON,7 ;global E bsf INTCON,T0IE ;brojac E bsf INTCON,INTE ;vanjski E bsf INTCON,RBIE ;port change E Petlja

movf PORTB,0 ;stalno upisuje .10 samo da vrti movwf 0x20 ;i čekamo prekid movlw .10 movwf 0x0d goto Petlja Inter

bcf INTCON,GIE ;0 na GIE-globalni interupt movlw 0xff ;prekid movwf 0x0d ;prekid bcf INTCON,T0IF ; \ bcf INTCON,INTF ;- ponistava prekide bcf INTCON,RBIF ; / retfie ;naredba RETURN, vraca program ;na mjesto prekida end Kada dođe do prekida, program skače na vektor/adresu prekidne rutine i onemogućuju se daljnji prekidi.

131

Page 132: Procesna računala

10.4.16 Preskaler - rad sa TMR0 Prvo napravimo makro WAIT. Spremimo ga kao wait.inc . CONSTANT PRESCstd = .1 WAIT macro timeconst_1 movlw timeconst_1 call WAITstd endm WAITX macro timeconst_2,PRESCEXT ;upisi u spremnik movlw timeconst_2 ;timeconst_2→w movwf WCYCLE movlw PRESCEXT

call WAIT_X endm WAITstd movwf WCYCLE movlw .1 ;prescaler 1:4 (ili PRESCstd) WAIT_X clrf TMR0 BANK1 movwf OPTION_REG BANK0 WAITa bcf INTCON,T0IF ;brise bit WAITb btfss INTCON,T0IF ;preskoci sljedeću liniju ;ako je 1 inače goto goto WAITb ;vrti se 255 puta decfsz WCYCLE,1 ;dekrementira .100 u .99 goto WAITa RETURN ;vraca 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.

132

Page 133: Procesna računala

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&_PWRTE_ON&_XT_OSC cblock 0x20 WCYCLE, PRESC wait endc BANK1 clrf TRISC BANK0 petlja btfsc PORTB, 0 bsf PORTC, 0 WAIT .100 ;poziv macro

bcf PORTC, 0 goto petlja

end

133

Page 134: Procesna računala

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 TRISB BANK0 m1 btfsc PORTA,0 ;kontrola T1 goto prva btfss PORTB,0 ;ili M1 goto resetm1 prva btfsc PORTA,2 ;i nije STOP goto resetm1 btfsc PORTB,1 ;i nije M2 goto resetm1 bsf PORTB,0 ;ukljuci M1 m2 btfsc PORTA,1 ;kontrola T2 goto druga btfss PORTB,1 ;ili M2 goto resetm2 druga

btfsc PORTA,2 ;i nije STOP goto resetm2 btfsc PORTB,0 ;i nije M1 goto resetm2 bsf PORTB,1 ;ukljuci M2 goto m1 resetm1

bcf PORTB,0 ;iskljuci M1 goto m2 resetm2

bcf PORTB,1 ; iskljuci M2 goto m1

end

134

Page 135: Procesna računala

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

org 0x00

goto main org 0x04 goto prekid con equ 0x20 main BANK1 movlw b'11111101' movwf TRISA BANK0 bsf PORTA,1 ;dioda svijetli BANK1 movlw b'00000100' ;preskaler 100 movwf OPTION_REG ;inkrementiranje ; TMR0 svake 32 µs movlw b'10100000' movwf INTCON ;dozvola tajmerskog prekida clrf con petlja goto petlja ;čekanje prekida prekid

movlw b'10100000' ;Dozvola sljedećeg prekida, movwf INTCON ;jer prilikom prekida GIE ode ; u nulu

incf con movlw .244 ;prekid se treba desiti 244 puta,jer

;je 32*256*244=1998848 µs subwf con,0 btfss STATUS,Z retfie clrf con ;postavljanje con varijable ponovno

;u nulu BANK0 Btfss PORTA,1 ;test da li je dioda svijetlila ili

;nije goto skok

135

Page 136: Procesna računala

BANK1

Movlw b'00000011' Movwf OPTION_REG BANK0 Bcf PORTA,1 retfie skok BANK1 movlw b'00000100' movwf OPTION_REG BANK0

Bsf PORTA,1 retfie

end 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 0x00 goto main org 0x04 goto main cblock 0x0c aa,bb,cc endc main BANK1 movlw b'11111101' movwf TRISA ;RA1 definiramo kao izlazni pin BANK0 ponovo

bsf PORTA,1 ;dioda svijetli ;cekanje 2 sekunde

PET2 movlw .78 movwf cc pet2 call PET1 decfsz cc,1 goto pet2 goto dalje PET1 movlw .116 movwf bb pet1 call PET0 decfsz bb,1 goto pet1 return

136

Page 137: Procesna računala

PET0 movlw .108 movwf aa pet0 decfsz aa,1 goto pet0

return ;kraj petlje od dvije sekunde ;gasenje diode dalje bcf PORTA,1 ;dioda ne svijetli ;cekanje 1 sekundu PETl2 movlw .127 movwf cc petl2 call PETl1 decfsz cc,1 goto petl2 goto daljel PETl1 movlw .183 movwf bb petl1 call PETl0 decfsz bb,1 goto petl1 return PETl0 movlw .19 movwf aa petl0 decfsz aa,1 goto petl0 return

;kraj petlje od 1 sekunde daljel

goto ponovo end

137

Page 138: Procesna računala

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 Loop1 local dechi local Delay1ms local Loop2 local Kraj movlw high arg1 ;Viši bajt argumenta ide u HIcnt movwf HIcnt movlw low arg1 ;Niži bajt argumenta ide u LOcnt movwf LOcnt Loop1

movf LOcnt,f ;Testira svoju vrijednost i ako je btfsc STATUS,Z ;nula, setira se bit Z goto dechi call Delay1ms decf LOcnt,f goto Loop1 dechi movf HIcnt,f btfsc STATUS,Z goto Kraj call Delay1ms decf HIcnt,f decf LOcnt,f goto Loop1 Delay1ms: ;Delay1ms realizira kašnjenje od movlw .100 ;100*10µs=1ms movwf LOOPcnt Loop2: nop nop nop nop nop nop nop decfsz LOOPcnt,f ;Dekrementiraj goto Loop2 ;Trajanje jednog izvršavanja Loop2 ;petlje je 10µs return Kraj endm

138

Page 139: Procesna računala

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 Cblock 0x20 ;Pocetak RAM-a HIcnt ;Registri koje koristi makro pausems LOcnt LOOPcnt endc ORG 0x00 ;Reset vector goto Main ORG 0x04 ;Interapt vector goto Main ;nema interapt rutine Main ;Pocetak programa banksel TRISB ;Selektiraj banku u kojoj je TRISB clrf TRISB ;Port B je izlazni banksel PORTB ;Selektiraj banku u kojoj je PORTB Loop movlw 0x00 ;Iskljuci diode na portu B movwf PORTB pausems .500 ;Sacekaj 500 milisekundi (0.5sec) movlw 0xff ;Ukljuci diode na portu B movwf PORTB pausems .500 ;Sacekaj 500 milisekundi (0.5sec) goto Loop ;Skoci 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.

139

Page 140: Procesna računala

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 ORG 0x00 bcf STATUS,RP0 bcf STATUS,RP1 ;BANK0 movlw 0x2f ;0x30-1 adresa podatka movwf FSR ;w u FSR movlw 0x40 movwf 0x22 ;početna adresa sortiranja goto petlja petlja

movlw 0x39 ;Kada vrijednost FSR subwf FSR,0 ;inkrementirajući dođe do btfsc STATUS,Z ;vrijednosti 0x39, idi goto prekid ; na labelu prekid. incf FSR ;pokazuje na adresu 0x30 movf 0x20,0 ;vrijednost sa adrese u w subwf INDF,0 ;vrijednost sa 0x30-w btfss STATUS,Z ;testira bit Z goto petlja ;ako nisu isti, goto petlja goto upis ;jednaki su upis movf FSR,0 ;Adresa u w movwf 0x21 ;w u 0x21 movf 0x22,0 ;vrijednost sa adrese 0x22 ; (0x40) u w movwf FSR ;(0x40) u FSR movf 0x21,0 ;vrijednost registra 0x21 u w movwf INDF ;Spremamo na lokaciju na koju ; pokazuje FSR incf 0x22 ;Inkrementira vrijednost reg. ; 0x22 (0x40+1) movwf FSR ;w u FSR goto petlja prekid end 0x21, 0x22 su pomoćni registri za privremeno spremanje podataka.

140

Page 141: Procesna računala

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 0x00 goto main org 0x04 goto prekid cblock 0x20 brojac,v1 endc main BANK1 movlw b'00000010' movwf TRISC ;RC1 kao ulazni pin (dolaze impulsi) movlw b'00000000' movwf TRISB ;portb kao izlazni movlw b'00000101' movwf OPTION_REG ;timer se inkrementira svake 64µs movlw b'10100000' movwf INTCON ;dozvola timerskog prekida

clrf brojac clrf v1

BANK0 skok1

btfss PORTC,1 goto skok1 ;tu se vrti petlja dok ne dođe jedinica na RC1 incf brojac ;povećam brojač,što znaci da je došao 1 impuls skok2

btfsc PORTC,1 ;Kada dođe nula idemo na ponovno goto skok2 ; čekanje impulsa

goto skok1 prekid

BANK1 movlw b'10100000' movwf INTCON ;ponovna dozvola prekida incf v1 ;Inkrementiranje pomoćne varijable v1 da ;vidimo koliko se desilo prekida movlw .156 ;156*64 = 9984 µs tj. 1ms subwf v1 btfss STATUS,Z ;Ako se desilo 156 prekida idem dalje, retfie ; ako nije nastavljam s prekidima movf brojac,0 ;Ovaj dio u prekidnoj rutini dešava se ;100 puta u sekundi clrf brojac ;brojač natrag u nulu clrf v1 ;v1 natrag u nulu BANK0 movwf PORTB

retfie end

141

Page 142: Procesna računala

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 org 0x00 goto main org 0x04 goto main main

BANK1 ;TRISC je u bank1 movlw b'11111101' movwf TRISC ;RC1 izlazni pin movlw b'11111111' movwf TRISB ;PORTB ulazni BANK0 ;PORTC & PORTB u bank0 petlja

movlw .102 subwf PORTB,0 btfss STATUS,C ;c=1,vece od 0 tj. temperatura ; veća od 20 bsf PORTC,1 ;pali movlw .108 subwf PORTB,0 btfsc STATUS,C ;Kad je C=1 on mora zagasiti ;grijač tj. temp. veća od 22 bcf PORTC,1 ;Gasi goto petlja end 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

142

Page 143: Procesna računala

10.4.23 Pretvorbe a) Binarni u EXCESS-3 PROCESSOR 16F877 #include "p16f877.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC org 0x00 goto main org 0x04 goto main cblock 0x20 bin,ex3 endc main

movlw .11 movwf bin movlw .3 addwf bin,0 movwf ex3 petlja goto petlja end

b) EXCESS-3 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 bin,ex3 endc main

movlw .11 movwf ex3 movlw .3 subwf ex3,0 movwf bin petlja goto petlja end

143

Page 144: Procesna računala

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 oz1 clrf oz2 clrf oz3 prva movlw .64 subwf bin,1 btfsc STATUS,C incf oz1 btfsc STATUS,C goto prva movlw .64 addwf bin,1 dva movlw .8 subwf bin,1 btfsc STATUS,C incf oz2 btfsc STATUS,C goto dva movlw .8 addwf bin,0 movwf oz3 petlja

goto petlja

end

144

Page 145: Procesna računala

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 ;oz2,oz1,oz0 - oktalne znamenke

endc ; con - kontrolna varijabla za petlje main clrf con clrf STATUS clrf bin

;mnozenje sa 64 pet2 movf oz2,0 ;premještamo oz2 u w reg addwf oz2,1 ;Zbrajanje oz2 i w i spremanje

;rezultata u oz2 incf con movlw .6 subwf con,0 btfss STATUS,Z goto pet2

;mnozenje sa 8 clrf con clrf STATUS pet1 movf oz1,0 ;premještamo oz1 u w reg addwf oz1,1 ;zbrajanje oz1 i w i spremanje rezultata

;u oz1 incf con movlw .3 subwf con,0 btfss STATUS,Z goto pet1

;zbrajanje oz2+oz1+oz0 movf oz0,0 addwf bin,1 movf oz1,0 addwf bin,1 movf oz2,0 addwf bin,1

;binarni zapis je u bin registru petlja goto petlja end

145

Page 146: Procesna računala

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 arg0 local Pon0

local Exit1 local Exit2 local Pozitiv local Negativ

clrf Dig1 clrf Dig2 clrf Dig3 Pozitiv movf arg0,w movwf Digtemp movlw .100 Pon0 incf Dig1,f ;Izračunavanje znamenke stotice subwf Digtemp,f btfsc STATUS,C goto Pon0 decf Dig1,f addwf Digtemp,f Exit1

movlw .10 ;Izračunavanje znamenke desetice incf Dig2,f subwf Digtemp,f btfsc STATUS,C goto Exit1 decf Dig2,f addwf Digtemp,f Exit2 movf Digtemp,w ;Izračunavanje znamenke jedinice movwf Dig3 endm Na sljedećoj stranici je primjer za izdvajanja cifre iz broja.

146

Page 147: Procesna računala

PROCESSOR 16F877 #include "p16f877.inc"

#include "digbyte.inc" __CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC

cblock 0x20 REZ Digtemp Dig1 ;Dig1 - stotica Dig2 ;Dig2 - desetica Dig3 ;Dig3 - jedinica endc

org 0x00 ;adresa reseta goto Start

Start movlw 0xff ;w=255 movwf REZ ;REZ=255 Main

digbyte REZ ;poziv makroa Petlja goto Petlja ;ostani ovdje end Poslije izvođenja programa sadržaj u registrima Dig1, Dig2, Dig3 će biti ovakav: Dig1 Dig2 Dig3

0x20 0x21 0x22

.2 .5 .5

naravno, u binarnom obliku.

147

Page 148: Procesna računala

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 main clrf con clrf bin clrf bcd2 clrf bcd1 clrf bcd0 movlw .3 movwf bin prvi movlw .10 subwf bin,1 btfss STATUS,C goto drugi incf bcd1 goto prvi drugi

movlw .10 addwf bin,1 movf bin,0 movwf bcd0 drugi1

movlw .10 subwf bcd1,1 btfss STATUS,C goto tri incf bcd2 goto drugi1 tri movlw .10 addwf bcd1,1 petlja

goto petlja end

148

Page 149: Procesna računala

10.4.25 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 EQU 0x20 org 0x00 goto Main org 0x04 goto Prekid ;u slučaju interrupta skače na tu labelu Main BANK1 movlw b'11000001' ;Uključeni pull up otpori na ;PORTB, prekid na rastući brid, TMR0/4 movwf OPTION_REG bcf TRISA,0 ;pin RA0 je izlazni movlw b'11111111' movwf TRISB ;svi pinovi PORTB su ulazni bsf OPTION_REG,0 BANK0 movlw b'10001000' ;Uključivanje interrupata: GIE ; i INTE movwf INTCON Stand_by bcf INTCON,RBIF ;Reset interrupt flag-a RBIF ;ako je prethodno bio setiran) bsf INTCON,GIE ;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 Prekid ;Kada se dogodi interrupt, pokreće se

;ovaj potprogram movfw PORTB movwf Ulaz ;kopira sadržaj PORTB u registar

;Ulaz (0x20) call Kontrola ;Poziva potprogram koji kontrolira je ;li podatke na PORTB bcf Ulaz,7 ;Ako je RB7 setran, resetira ga (potrebni ;su nam samo podaci RB6:RB0)

movfw Ulaz ;Uzima sadržaj registra Ulaz

149

Page 150: Procesna računala

addwf Ulaz,1 ;i zbroji ih same sa sobom (množenje sa

;2) call Izlaz ;Poziva potprogram za Izlaz(upravljanje

;motorom) goto Stand_by ;Vraća program iz prekidne rutine Timer ;Početak vremenske petlje koja odbrojava

;500 µs movlw .135 movwf TMR0 ;upisuje vrijednost .135 u TMR0 Tloop btfss INTCON,T0IF ;provjerava je li TMR0 prekoračio 255 goto Tloop ;Ako nije vraća program na Tloop dok ;TMR0 ne prekorači bcf INTCON,T0IF ;Kada TMR0 prekorači resetira T0IF ;interrupt flag

return ;Izlazi iz Timer podprograma Izlaz bsf PORTA,0 ;Uključuje relej spojen na RA0 nop ;Prazni ciklusi da se dobije na vremenu nop nop nop call Timer ;Pozivanje Timer potprograma (mjeri se ;vrijeme prve poluperiode freq 1kHz) bcf PORTA,0 ;Isključuje relej spojen na RA0 nop call Timer ;Pozivanje Timer podprograma (mjeri se ; vrijeme druge poluperiode freq 1kHz) decfsz Ulaz ;Umanjuje sadržaj registra Ulaz za 1 i ;ako registar Ulaz nema vrijednost 0, goto Izlaz ;ponavlja ovaj potprogram dok Ulaz ne

;bude 0 return ;Kada se registar Ulaz isprazni, vraća se ;iz potprograma

Kontrola btfss Ulaz,7 ;ako se prekid nije dogodio na RB7 goto Stand_by ;vraća se u Stand_by bcf Ulaz,7 ;Resetira bit 7 registra Ulaz, jer

;nadalje nije potreban movf Ulaz btfss STATUS,Z ;ako je sadržaj registra Ulaz 0, return ;vraća se iz potprograma Kontrola goto Stand_by ;u protivnom se vraća u Stand_by

end

150

Page 151: Procesna računala

11. PRILOZI

11.1 Pregled instrukcija

151

Page 152: Procesna računala

11.2 Sadržaj STATUS, OPTION i INTCON registara

152

Page 153: Procesna računala

11.3 PIC16F877 28/40-Pin 8-Bit CMOS FLASH Mikrokontroleri

153

Page 154: Procesna računala

11.4 Ključne značajke

154

Page 155: Procesna računala

11.5 Blok dijagram 16F877

155

Page 156: Procesna računala

11.6 Opis priključaka(pinova) PIC16F877 a)

156

Page 157: Procesna računala

b) nastavak

157

Page 158: Procesna računala

11.7 Memorijska mapa PIC16F877 File registara

158

Page 159: Procesna računala

11.8 Pregled Registra specijalne namjene (Special Function Register) a) Bank 0

159

Page 160: Procesna računala

b) Bank 1

160

Page 161: Procesna računala

c) Bank 2 i Bank 3

161