Download as pdf or txt
Download as pdf or txt
You are on page 1of 137

TEHNIČKO VELEUČILIŠTE U ZAGREBU

ELEKTROTEHNIČKI ODJEL

Mikrokontrolerski sustavi

Goran Malčić, dipl.ing.

mr. sc. Velimir Rajković, dipl.ing.


SADRŽAJ

1 Uvod................................................................................................................ 5

2 Podjela računala ............................................................................................ 6

2.1 ''Off line'' računala ............................................................................................... 6


2.2 ''On line'' računala................................................................................................ 6

3 Osnovni sklopovski elementi za ''on line'' način rada .............................. 10

3.1 Senzori i izvršni organi.......................................................................................10


3.2 Analogna obrada signala ...................................................................................11
3.3 Multipleksori........................................................................................................11
3.4 Sample & Hold sklop (S&H)................................................................................12
3.5 Analogno digitalni pretvarač..............................................................................13
3.6 Digitalno analogni pretvarač ..............................................................................20
3.7 Međusklop (Interface) .........................................................................................21
3.8 Paritetni sklop .....................................................................................................24
3.9 Povezivanje računala sa procesima ..................................................................24
3.10 Računalo..............................................................................................................25
3.10.1 Mikroprocesor ...............................................................................................25
3.10.2 Mikrokontroler ...............................................................................................25
3.10.3 Arhitektura računala ......................................................................................27
3.10.4 Razlika između mikroprocesora i mikrokontrolera .........................................29
3.10.5 Memorijska jedinica.......................................................................................30
3.10.6 Adresno polje mikroračunala .........................................................................30
3.10.7 CPU (Central Processing Unit) ......................................................................31
3.10.8 Sabirnica .......................................................................................................32
3.10.9 U/I jedinica ....................................................................................................33
3.10.10 Serijska komunikacija....................................................................................33
3.10.11 Slobodni brojač .............................................................................................34
3.10.12 Sigurnosni brojač (Watchdog timer) ..............................................................34

4 Mikrokontroler PIC 16F84............................................................................ 35

4.1 Osnovne karakteristike mikrokontrolera PIC 16F84 .........................................35


4.1.1 Karakteristike mikrokontrolera .......................................................................35
4.1.2 Karakteristike ulazno/izlaznih sklopova .........................................................35
4.1.3 Specijalne karakteristike mikrokontrolera ......................................................35
4.1.4 Karakteristike CMOS Flash/EEPROM tehnologije.........................................36
4.2 Kratak opis mikrokontrolera ..............................................................................36
4.3 Raspored nožica .................................................................................................37

1
4.4 Generatori takta ..................................................................................................37
4.5 Takt / instrukcijski ciklus....................................................................................39
4.6 Obrada instrukcija ..............................................................................................39
4.7 Reset....................................................................................................................40
4.7.1 Reset kod pada napona napajanja (Reset on Brown-Out).............................40
4.8 Ulazno / izlazni sklopovi .....................................................................................41
4.8.1 PORTA i TRISA ............................................................................................41
4.8.2 PORTB i TRISB ............................................................................................41
4.9 Organizacija memorije........................................................................................42
4.9.1 Programski brojač (Program Counter) ...........................................................43
4.9.2 Stog (Stack) ..................................................................................................44
4.9.3 Status registar ...............................................................................................44
4.9.4 Direktno adresiranje ......................................................................................45
4.9.5 Indirektno adresiranje....................................................................................45
4.9.6 Relativno adresiranje.....................................................................................45
4.10 Prekidi (Interrupts)..............................................................................................46
4.10.1 INTCON registar ...........................................................................................47
4.11 Podatkovna EEPROM memorija ........................................................................48
4.11.1 EECON1 registar ..........................................................................................49
4.12 Slobodni brojač TMR0 ........................................................................................49
4.12.1 OPTION registar ...........................................................................................50

5 Set instrukcija .............................................................................................. 52

5.1 Prijenos podataka ...............................................................................................52


5.2 Aritmetika i logika ...............................................................................................52
5.3 Bit operacije ........................................................................................................52
5.4 Upravljanje tokom programa..............................................................................52
5.5 Opis pojedinih instrukcija ..................................................................................54

6 Razvojni alati za PIC 16F84 ......................................................................... 69

6.1 Asembler .............................................................................................................69


6.1.1 Elementi programskog jezika asembler .........................................................69

7 MPLAB IDE v6.60 ......................................................................................... 71

7.1 MPLAB IDE ..........................................................................................................71


7.2 Zahtjevi sustava ..................................................................................................71
7.3 Izrada jednostavnog projekta.............................................................................71
7.3.1 Uvod .............................................................................................................71
7.3.2 Pisanje izvornog koda ...................................................................................71
7.3.3 Izrada projekta ..............................................................................................73

2
7.3.4 Izgradnja projekta..........................................................................................77
7.3.5 Pokretanje simulatora....................................................................................78
7.3.6 Provjera rada aplikacije .................................................................................79

8 Programiranje mikrokontrolera PIC 16F877 .............................................. 90

8.1 Uvod.....................................................................................................................90
8.2 Instalacija sustava pri programiranju programskim paketom IC-PROG .........90
8.3 Programiranje mikrokontrolera programskim paketom IC-PROG...................91

9 Opis razvojnog sustava............................................................................... 96

9.1 Napajanje.............................................................................................................96
9.2 Led diode.............................................................................................................96
9.3 Tipkala .................................................................................................................97
9.4 LCD zaslon (display)...........................................................................................98
9.5 Sedamsegmentni zaslon ....................................................................................99
9.6 Analogno-digitalni pretvarač (A/D converter) .................................................100
9.7 RS-232 komunikacija ........................................................................................101
9.8 Digitalni termometar - DS1820 .........................................................................102
9.9 Pull-up/pull-down otpornici na portovima.......................................................103
9.10 Direktan pristup portovima ..............................................................................105

10 Primjeri ....................................................................................................... 106

10.1 Uvod...................................................................................................................106
10.2 Makro naredbe ..................................................................................................106
10.3 Potprogrami ......................................................................................................107
10.4 Primjeri ..............................................................................................................108
10.4.1 Program za aktiviranje porta B ....................................................................108
10.4.2 Način upisivanja konstanti ...........................................................................109
10.4.3 Naredbe uvjeta............................................................................................109
10.4.4 Zbrajanje i oduzimanje, indirektno adresiranje.............................................109
10.4.5 Usporedba (komparacija) ............................................................................110
10.4.6 Inkrementiranje i dektrementiranje ..............................................................111
10.4.7 Inicijalizacija Porta A i Porta E.....................................................................112
10.4.8 EEPROM - čitanje podataka sa memorije ...................................................113
10.4.9 EEPROM - upis podatka u memoriju...........................................................113
10.4.10 FLASH programska memorija - čitanje podataka ........................................113
10.4.11 FLASH programska memorija - upisivanje podataka ...................................114
10.4.12 Zbrajanje dva 16 bitna broja ........................................................................115
10.4.13 Oduzimanje dva 16 bitna broja....................................................................115
10.4.14 Sortiranje sa indirektnim pristupom .............................................................115
10.4.15 Interupt........................................................................................................116
10.4.16 Preskaler - rad sa TMR0 .............................................................................117

3
10.4.17 Dvosmjerna vrtnja motora ...........................................................................119
10.4.18 Dioda ..........................................................................................................119
10.4.19 LED diode na portu B ..................................................................................122
10.4.20 Usporedba - indirektnim adresiranjem .........................................................123
10.4.21 Protok..........................................................................................................124
10.4.22 Regulacija temperature ...............................................................................125
10.4.23 Pretvorbe ....................................................................................................126
10.4.24 Servo motor.................................................................................................130

11 Popis pojmova i kratica:............................................................................ 133

12 Popis korištene literature:......................................................................... 136

4
1 Uvod

Primjenom mikroprocesorskih i mikrokontrolerskih struktura u elektroničkim uređajima postiže se


sve više i više hardverska sličnost, dok specifičnost funkcija uređaja određuje programska podrška.
Pomoću sveprisutnih mikrokontrolera i mikroprocesora povećana je pouzdanost i preciznost
upravljanja pojedinim sustavom. Sustav oplemenjen mikrokontrolerom može u potpunosti zamijeniti
čovjeka, smanjuje dimenzije uređaja i potrošnju energije. Zbog jednostavnosti i širokog spektra
uporabe proširili su krug ljudi koji se bave elektronikom.
U ovom udžbeniku je obrađen veći dio predavanja i vježbi iz kolegija Elektronička računala i
računalna oprema koji se održava na Elektrotehničkom odjelu Tehničkog veleučilišta u Zagrebu.
Koristit će studentima s Informatičkog odjela TVZ-a, Studija računarstva na kolegijima sličnog
sadržaja, kao i svima koji ulaze u svijet upravljanja pomoću mikrokontrolera. Uz opći prikaz
mikrokontrolerskih i mikroprocesorskih struktura objašnjen je i princip rada sa mikrokontrolerom PIC
16F84 tvrtke Microchip koja je jedna od vodećih u proizvodnji mikrokontrolera.
U drugom dijelu je opisana izrada izvornog kôda i njegovo implementiranje u projekt, editiranje i
ispravljanje pogrešaka, kao i simuliranje njegovog rada na računalu uz mnogo primjera sa vježbi. Za
sve to korišten je programski paket MPLAB IDE tvrke Microchip koji je danas jedan od ponajboljih u
tom području i što je još važnije svima dostupan (freeware).

5
2 Podjela računala

Na slici 2.1. prikazano je djelovanje čovjeka s obzirom na okolinu, tj. djelovanje s obzirom na
informacije koje dobija od svojih osjetila. Na sličnom principu koristimo računala u procesnoj tehnici.

Sl.2.1. Načelo djelovanja čovjeka

Računalo u procesnoj tehnici može poslužiti samo za njegov nadzor ili za automatsko upravljanje
cjelokupnim procesom. Koji od ovih načina će se primijeniti ovisi o načinu unosa podataka u računalo
te njihove obrade i načinu upotrebe dobivenih rezultata za upravljanje procesom. Dakle, treba
razlikovati nadzor nad procesom (očitavanje relevantnih parametara) i upravljanje s njim (podešavanje
parametara) bilo izravno (automatski) ili neizravno. Prema načinu unosa podataka u računalo te
njihove uporabe za upravljanje tijekom procesa razlikuju se:

Off - line sustavi


On- line sustavi

Nadzor – pojam vezan uz one sustave u kojem prevladavaju otvorene petlje


Upravljanje – pojam vezan uz one sustave u kojima prevladavaju zatvorene petlje (automatizirani
sustavi)

2.1 ''Off line'' računala

Off-line prijenos podataka odvija se u dvije faze. U prvoj se podaci iz izvora zapisuju na neki
prijenosni medij (disketa, priručna memorija, optički mediji i drugo), pa se tek potom sa tih medija
prenosi ili upisuje u računalo. Vrijeme između skupljanja podataka i unosa je po potrebi, za sat ili dva,
tjedan, mjesec, godinu dana ili nikad. Naravno ovakav sustav nepogodan je za brz i izravan nadzor
nad procesima.

2.2 ''On line'' računala

Računala koja rade ″on line″ (slika 2.2) unose podatke automatski kada su generirani. Podatke
generiraju razni senzori koji su električnim vodičima spojeni na računalo. Vrijeme potrebno da se ti
podaci prebace u računalo mjeri se uglavnom u milisekundama. Za takve sustave kažemo da rade u
realnom vremenu, zbog toga što je vrijeme potrebno za obradu podataka definirano

Sl. 2.2. On-line sustav

6
Osnovni razlog uporabe on-line sustava jest brzina rada i velike mogućnosti obrade podataka
kojom raspolaže digitalno računalo. Dakle nadzor sustava gdje se procesi vrlo brzo mijenjaju gotovo je
nemoguć bez primjene digitalnog računala. Osim toga u realnom vremenu mogu se pratiti i predvidjeti
tendencije koje se u procesu mogu pojaviti. Na taj način lako je intervenirati i izbjeći alarmantne
situacije. Za razliku od navedenog, kod off-line obrade koja bi trajala dugo dobiveni rezultati bili bi
gotovo nekorisni.
Kvaliteta intervencije u sustavu ovisiti će o kvaliteti algoritma koji su razvijeni za upravljanje
procesom i zatim uneseni u obliku programske potpore u računalo. Kod vrlo složenih sustava može se
dogoditi da tim programom nisu obuhvaćene baš sve moguće situacije do kojih u životu i radu može
doći. Ne može se baš sve predvidjeti. Iz navedenog razloga ponekad se on-line sustav izbjegava, a
stanje procesa samo se prikazuje voditelju (osobi) koji odlučuje što treba učiniti. No može se dogoditi
da voditelj donese neadekvatan zaključak unatoč kvalitetnim informacijama koje mu se predočuju. Da
bi se to izbjeglo sve se više uvode ekspertni sustavi, odnosno digitalna računala s programskom
potporom koja se služe bazom znanja koncipiranom od tima vrhunskih stručnjaka za proces koji se
nadzire. Takav sustav koji može i ne mora biti on-line pomaže voditelju da u kritičnim situacijama
donese najbolju odluku. Osnovno načelo rada ekspertnog sustava prikazano je na slici 2.3.

Sl. 2.3. Načelna shema ekspertnog sustava

Dakle, neki se procesi ne mogu nadzirati bez on-line sustava nadzora s digitalnim računalom, jer
nikakvo drugo sredstvo nema takvu brzinu rada i moć kao računalo koje može na brze novonastale
promjene u procesu smjesta reagirati.
Elementi inteligentnog ponašanja vrlo su značajno svojstvo ovih sustava. Pod tim se misli na
prilagodljivost i snalaženje sustava (računala) u promijenjenoj situaciji u odnosu na programski
prepoznatljivu i definiranu, a to znači da sustav mora prepoznati promjenu van definiranih okvira,
prilagoditi se i donijeti više ili manje adekvatno rješenje da bi se sustav ponašao unutar definiranih
granica. Znači u takvim situacijama ne traži se idealno rješenje već prvo prihvatljivo.
Kao primjer navest ćemo nekoliko kontrolora procesa:

1.) SCADA (Supervisory Control And Data Acquisition) razvojni sustavi su tijekom prošlih nekoliko
godina tehnološki brzo napredovali i pratili razvoj ostalih segmenata informatičke industrije. Napredak
tehnologija SCADA sustava je vidljiv u nekoliko segmenata.
Najznačajniji napredak je napravljen na polju tehnologija veznih uz internet. Današnji SCADA
razvojni sustavi omogućavaju povezivanje SCADA sustava s web serverom što omogućava nadzor i
upravljanje sustava s udaljenih lokacija korištenjem interneta i web preglednika.
Veliki problem SCADA sustava je bio u povezivanju računala s mjernom i upravljačkom opremom
zbog nestandardnih programskih sučelja takve opreme prema SCADA sustavima što je rezultiralo
ograničavanjem mogućnosti odabira opreme, odnosno SCADA razvojog sustava. Uvođenjem
standardnog programskog sučelja mjerne i upravljačke opreme – OPC (OLE for Process Control),
baziranog na Microsoft OLE (Object Linking and Embedding) tehnologiji za komunikaciju između
programskih modula u Windows okolini, omogućena je upotreba šireg spektra mjerne i upravljačke
opreme i SCADA sustava uz pojednostavljen rad.
Daljnji napredak je vidljiv u proširenju postojećih mogućnosti i povećavanju pouzdanosti.

7
2.) FPGA (field-programmable gate array) je poluvodička naprava koja sadrži programabilne logičke
komponente i programabilne međuspojeve. Programabilne logičke komponente mogu biti
programirane da poboljšaju funkcionalnost osnovnih logičkih operacija (kao što su AND, OR, XOR,
NOT) ili složenijih kombinacijskih sklopova kao što su dekoderi i jednostavne matematičke operacije.
Večina FPGA sadrži i memorijske elemente najčešće flip-flop (bistabilne multivibratore) ili više blokova
memorije. Hijerarhija programabilnih međuveza dopušta logičkim blokovima u FPGA-u da budu
međusobno povezani ako je to potrebno i sa sistemskim projektantom, nešto kao one-chip
programabilni model. Ti logički blokovi kao i međuveze mogu biti programirani i poslije tehnološke
proizvodnje preko projektanta tako da FPGA može obavljati logičke operacije koje se u tom trenutku
od njega zahtjevaju.
3.) ASIC (application-specific integrated circuit) je integrirani sklop projektiran za za opću upotrebu
(npr. čip dizajniran isključivo za mobilni telefon bio je ASIC). Kako je tehnologija iz godine u godinu
napredovala maksimalna složenost ASIC-a je također rasla (od 5000 logičkih vrata do nekoliko
milijuna). Moderni ASIC-i često uključuju 32-bitni procesor, memorijske blokove uključujući ROM,
RAM, EEPROM, Flash itd. Dizajneri ASIC-a koriste se HDL-om (hardware description language) kao
što su Verilog ili VHDL kako bi opisali funkcionalnost ASIC-a.
4.) PLC Prvi programibilni logički kontroleri (PLC) razvijali su inženjeri General Motors-a 1968., kada
su pokušali pronaći alternativnu zamjenu za složene relejne kontrolne sustave.
Novi kontrolni sustav morao je zadovoljiti slijedeće zahtjeve:

• Jednostavno programiranje,
• Programske izmjene bez sistemskih intervencija (bez mijenjanja ožičenja),
• Manje, jeftinije i pouzdanije komponente od relejnih kontrolnih sustava,
• Jednostavno i jeftino održavanje

Postupnim razvojem došlo se do sustava koji je omogućio jednostavnije povezivanje binarnih


signala. Uvjeti pod kojim su ovi signali trebali biti povezani, bili su određeni u kontrolnom programu. S
novim sustavima bilo je po prvi puta moguće iscrtati signale na ekranu, te ih pohraniti u vidu datoteke
u elektronsku memoriju.
Po definiciji Programibilni logički kontroleri su:

Prema DIN EN61131-1 (1994.) programabilni logički upravljač (kontroler) jest digitalni elektronički
sustav za uporabu u industrijskom okolišu s programabilnom memorijom za internu pohranu u primjeni
orijentiranih upravljačkih naredbi kod implementiranja specifičnih funkcija kao što su npr. logičko
upravljanje, slijedno upravljanje, funkcije odbrojavanja, funkcije brojenja i aritmetičke funkcije,
Osnovna namjena PLCa je upravljanje, putem digitalnih ili analognih ulaznih i izlaznih signala,
različitim vrstama strojeva ili procesa.
Glavni djelovi PLC-a su:

• mikroprocesor s dodatnim električkim sklopovima,


• sklop za opskrbu električnom energijom procesora koji pretvori upravljački istosmjerni napon od
24V u takozvani logički napon (5V),
• kvarc za davanje takta procesoru,
• prekidač za uključivanje i isključivanje rada procesora,
• memorija (sistemska, radna, programska).

Preko sabirnog priključka spaja se centralna jedinica (mikroprocesor) s ulazno - izlaznim


elementima (modulima - karticama).
Ulazni modul treba osigurati:

• priključke na koje se priključuju senzori,


• prilagodbu napona,
• zaštitu centralne jedinice od napona,
• zaštitu centralne jedinice od smetnji,
• sigurno razlikovanje signala 1/0.

8
Izlazni modul također posreduje između centralne jedinice i automata. Njegove zadaće su:

• povezivanje s izvršnim elementima,


• prilagodba napona,
• zaštita centralne jedinice,
• pojačanje snage,
• zaštita od kratkog spoja.

Karakteristike programabilnog logičkog kontrolera:

• omogućava direktan priključak binarnih senzora i aktuatora,


• odgovara zahtjevima industrijskog okoliša u odnosu na otpornost na povišenu temperaturu,
vibracije i elektro-magnetska zračenja,
• operacijski sustav je razvijen za optimalnu obradu Boolove logike
• operacijski sustav potpomognut programskim i dijagnostičkim alatima dopušta direktan pristup
na binarne ulaze i izlaze kao i na interne binarne i digitalne memorije (flag, registre, brojače,
tajmere),
• operacijski sustav omogućava komunikaciju sa računalom.

Komunikacijsko sučelje prema


uređaju za programiranje ili
operatorskom panelu (HMI)
te mrežna komunikacija
Ulazne stezaljke

Izlazne stezaljke

Centralna
procesorska
jedinica
p

MEMORIJA
Program Podaci
Optoizolacija Optoizolacija

Mrežni modul napajanja

Sl. 2.4. Blok shema PLC-a

9
3 Osnovni sklopovski elementi za ''on line'' način rada

Shematski prikaz sustava koji radi u ″on line″ načinu rada prikazan je slikom 3.1. Proces je sredina
koja se mjeri te upravlja računalom. Računalo služi za obradu podataka prikupljenih iz procesa.
Središnji dio služi za povezivanje procesa i računala, koji ćemo sada razmotriti.

Sl. 3.1. Shematski prikaz on-line sustava

3.1 Senzori i izvršni organi

Senzori mjere razne fizikalne veličine (temperatura, pritisak, vlažnost, protok, kut zakreta, brzina,
itd.) te ih pretvaraju u odgovarajuće električne veličine (napon, struja, frekvencija, faza itd.). Mjeriti se
mogu različite pojave kao što je vodostaj rijeke, brzina toka iste, temperatura kotla termoelektrane,
rastezanje željeza pri zagrijavanju, itd. Senzori se još i nazivaju mjerni pretvornici. Osobitosti o kojima
treba voditi računa pri korištenju senzora je točnost, sposobnost približavanja pravoj vrijednosti
fizikalne veličine, a koja se ogleda u sljedećim parametrima:

• Statička greška - odstupanje između pokazane i stvarne vrijednosti fizikalne veličine kada se
ova ne mijenja. Obično se daje u postocima prema najvećoj vrijednosti koja se može mjeriti.
• Dinamička greška - koliko senzor "kasni" za promjenama fizičke veličine. Svaki senzor
posjeduje dinamičku grešku. Ova greška nestaje kad se fizikalna veličina prestane mijenjati.
• Greška ponovljivosti - je najveće odstupanje od srednje vrijednosti pri ponovljenom mjerenju
nepromijenjene fizikalne veličine.
• Mrtvo vrijeme - predstavlja vrijeme potrebno da se promjene fizikalne veličine počnu iskazivati i
na izlazu iz senzora.
• Mrtva zona - je najveća promjena fizikalne veličine do koje se na izlazu iz senzora još uvijek ne
očitavaju promijene.

Od senzora se u osnovi traži da ne djeluju na svojstva ili ponašanje sredine u kojoj se nalaze. U
on-line sustavima se nalazi mnogo analognih veličina stoga signal treba filtrirati, ispraviti (linearizirati) i
kondicionirati da bi se analogni signal mogao digitalizirati u A/D pretvorniku.
Postoje dva načina rada. Prvi je da se mjerene veličine prikazuju čovjeku te on odlučuje kako će
reagirati i drugi način je kada računalo samo djeluje u procesu. To znači da računalo iz samog
procesa preko senzora uzima željene informacije te od dobivenih mjernih veličina pomoću određenih
algoritama donosi zaključke, a nakon tih zaključaka djeluje na sustav preko izvršnih organa. Izvršni
organi mogu biti prekidač, elektromotor koji upravlja ventilom, regulator izgaranja na ložištu itd.
Senzori i izvršni organi za svaki sustav su specifični.Više o tome smo rekli kod on-line sustava na str.
7.

10
3.2 Analogna obrada signala

Električni signali koji dolaze iz senzora imaju različite oblike. S druge strane za analogno-digitalni
pretvarač signali su standardnh veličina (0 - 5 VDC, 0 - 10 VDC, –10 do +10 VDC, 0 - 20 mA, 4 - 20
mA), standardizirani. Da bi se to postiglo potrebna je elektronička obrada signala. Signal je potrebno
propustiti kroz elektronički sklop koji će mu dati oblik i veličinu, no ne smije se oštetiti informacija koju
taj signal nosi. Signal je potrebno linearizirati, pojačati i filtrirati. Da bi signal doveli u željeno analogno
područje često koristimo pojačala s povećanjem većim od 1, ali i s povećanjem manjim od 1. Zadatak
pojačala je da promjeni vrijednost analognih veličina i prenese ih u novo područje naponskih
vrijednosti, a da ne pokvari njihovu analognu informaciju (normiranje). Često se koriste i razni filtri
kojima je zadatak odstraniti šum. Karakteristika signala se može poboljšavati i na digitalan način, tako
da se senzoru doda mikroračunalo koje posebnim algoritmima oblikuje signal pa tek tada prenosi u
″glavno″ računalo.

3.3 Multipleksori

Da bi se upravljalo procesom potrebno je puno različitih senzora, rijetko kada nam je dovoljan
samo jedan. Mjerena veličina svakog senzora bit će prvo podvrgnuta analognoj obradi. Zatim svaka
mjerna veličina bi mogla imati svoj A/D pretvarač i svoj interface. Takvo rješenje bi bilo preskupo u
sustavima gdje se koristi nekoliko desetaka pa i nekoliko stotina senzora, pa se upotrebljava samo
jedan A/D pretvarač i interface. Kod takvog rješenja mora postojati multipleksor (slika 3.2b).
Multipleksor (engl. Multiplexer) ili selektor (engl. Data selector) je sklop kojim se podatak sa jednog od
više ulaza usmjerava (prenosi) na izlaz. S kojeg ulaza će se odabrati podatak i prenjeti na izlaz ovisi o
stanju posebnih ulaza za odabiranje (slika 3.2a). Broj ulaza za podatke N ovisi o broju ulaza za
odabiranje M.

N = 2M

D0

DN −1
S0 − S M −1

Sl. 3.2a. Opći prikaz djelovanja multipleksora

Na slici 3.2b. prikazana je logička shema multipleksora s četiri ulaza. Kada je potrebno odabrati
jedan od četiri ulazna podatka tada multipleksor treba imati dva ulaza za odabiranje podataka. Podaci
sa ulaza dovode se na sklopove ″I″. Koji sklop ″I″ će prenjeti podatak s ulaza na izlaz, preko sklopa
″ILI″ ovisi o kombinaciji na ulazima za odabiranje podataka S0 i S1 . To se može prikazati i tablicom
stanja slika 3.2b.

11
S1 S0

D0

D1
Y
D2

D3

Sl. 3.2b. Logička shema i tablica stanja multipleksora

Naravno postaje upitno kojim redom će se signali obrađivati. Samo po sebi se nalaže rješenje
redom kojim dolaze no to se rijetko primjenjuje. Brzina promjene pojedinih mjernih veličina je različita
pa tako i njihova gustoća uzimanja uzoraka ne može biti ista. Tako se npr. temperatura prostorije ne
može promijeniti u vremenu manjem od desetak sekundi, dok se promjena tlaka u parogeneratoru
mora mjeriti u milisekudama pa čak i češće (frekvencija uzorkovanja). Stoga se uzorci signala uzimaju
prema potrebi obrade mikroračunala. Znači mikroračunalo bira redoslijed obrade podataka prema
programu koji izvodi, šaljući adresu ulaznog podatka multipleksoru.

3.4 Sample & Hold sklop (S&H)

Sample & Hold sklop ima zadaću da u trenutku uzorkovanja očita vrijednost analognog signala na
ulazu te da ga zadrži sve do sljedećeg uzorkovanja. Na neki način djeluje kao memorija za pamćenje
analogne vrijednosti između uzorkovanja kako se na ulazu u A/D sklop ne bi mijenjala vrijednost
tijekom pretvorbe.
Stvarni Sample & Hold sklop uz sklopku i kondenzator, sadrži i serijski otpor sklopke i vodiča ali i
unutarnji otpor izvora signala R1, te paralelni otppor R2 (slika 3.3.). Vremenska konstanta R1C mora
biti puno manja od vremena T0N, kada je sklopka S zatvorena, a vremenska konstanta R2C mora biti
puno veća od intervala uzorkovanja TS.

R1C << T0N, R2C >> TS

T0N - sklopka zatvorena


TS - interval uzorkovanja

Sl. 3.3. Stvarna shema Sample&Hold sklopa

12
Sl. 3.4. Shema S&H sklopa

Sl. 3.5. Signal pri S&H obradi

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

3.5 Analogno digitalni pretvarač

Digitalni sustavi koji služe za mjerenje, regulaciju ili automatizaciju na svome će ulazu i izlazu u
pravilu imati analognu veličinu. Najveći je broj procesa u prirodi analogan, a to vrijedi i za mnoge
veličine u tehničkim sustavima. Da bi računalo moglo obrađivati te signale potrebno ih je kodirati,
diskretizirati po vremenu i amplitudi, tek tada kada su pretvoreni u binarne brojeve mogu se unositi u
računalo. Zbog toga je potrebno imati uređaje za automatsko pretvaranje između tih dvaju načina
prikaza veličina. Proces kvantizacije predstavljat će mjerni proces u kojemu se konstatira koliko
standardnih mjernih jedinica sadrži mjerna veličina. Idealna karakteristika A/D pretvorbe prikazana je
na slici 3.6. kao i blok shema A/D pretvarača. Pretvorba analogne veličine u digitalnu (i obratno)
inherentno je diskontinuirani proces. Proces pretvorbe sastoji se u tome da se ulaznoj veličini koja se
nalazi u nekom određenom naponskom intervalu pridruži određeni broj n. U idealnom slučaju
naponski su intervali (ili koraci) jednake širine U K i ponekad se nazivaju kanalima. Jedna je od
osnovnih karakteristika A/D i D/A pretvorbe broj koraka odnosno kanala koji određuju rezoluciju.

13
Rezolucija ili razlučivanje je širina kanala kao postotak maksimalnog ulaznog napona ili
jednostavno njihov omjer. Ako je nM maksimalni broj koji odgovara maksimalnom ulaznom naponu
UM, onda je širina koraka jednaka UM/nM, pa se rezolucija svodi na 1/nM. Budući da je broj n izražen
k
binarno sa k bita, maksimalni je broj 2 – 1, pa je uobičajeno da se rezolucija jednostavno izražava
kao broj bita što ih ima ulazni ili izlazni podatak.

ua - ulazni napon
n - broj bita
nM - maksimalni broj bita
UM - maksimalni ulazni napon
UK - naponski interval (korak)

Sl. 3.6. Idealna karakteristika A/D pretvarača i blok shema

Analogno-digitalni pretvarač ne pretvara u digitalnu vrijednost cjelokupni analogni signal, već


samo njegove uzorke u vremenu (slika 3.7.).

Sl. 3.7. Uzorkovanje analognog signala u vremenu

14
Da ne bi signal previše izobličili A/D pretvorbom potrebno je dobro provesti diskretizaciju. To znači
da koraci kojima se uzima signal kod diskretizacije moraju biti gusti po vremenu da se ne izgubi ni
jedan harmonik ulaznog signala, a po amplitudi treba imati dovoljnu veliku razlučivost da bi razlikovala
male promjene amplitude. A/D pretvorba je povremeno mjerenje vrijednosti signala ako se promatra
kao proces. Kako je signal promjenjiv moramo u određenom trenutku uzeti uzorak (sample) signala i
tu vrijednost privremeno pohraniti (hold). S & H izvodimo jer mjerenje nije moguće izvesti trenutno već
ima određeno trajanje. Shannonov teorem govori da se pri uzimanju uzoraka iz nekog kontinuiranog
signala uzorci moraju uzimati barem dvostruko većom frekvencijom nego što je frekvencija najvišeg
harmonika koji se uzima u obzir pri razmatranju.
Imamo dvije osnovne vrste A/D pretvarača:

a) A/D pretvarači s vremenskim ekvivalentom


b) A/D pretvarači sa sukcesivnom aproksimacijom
c) Sigma-delta A/D pretvarači

a) A/D pretvarači s vremenskim ekvivalentom

A/D pretvarač s vremenskim ekvivalentom naziva se još i Wilkinson-ov A/D pretvarač.

ua

up

Sl. 3.8. Wilkinson-ov A/D pretvarač

A/D pretvarač koji ulazni analogni napon pretvara najprije u odgovarajući vremenski interval
prikazan je na slici 3.8. Ulazna analogna veličina ua nalazi se na jednom od ulaza naponskog
komparatora K. Na drugom ulazu je napon 0, pa je izlaz komparatora na niskoj razini. Proces
pretvorbe započinje impulsom START koji postavlja bistabil u 1. Time se otvara ulaz u brojilo i brojilo
počinje brojati impulse iz generatora impulsa. Istovremeno je pobuđen i generator pilastog napona koji
je spojen na drugi izlaz komparatora. Rad sklopa može se pratiti pomoću dijagrama na slici 3.9. Kada
pilasti napon naraste do vrijednosti ulaznog napona, izlaz iz komparatora odlazi na visoku razinu i
vraća bistabil u stanje 0. Time završava pretvorba napona u vrijeme. Za vrijeme T dok je ″I″ sklop
otvoren impulsi iz generatora pokreću brojilo, a nakon završetka pretvorbe stanje brojila pokazuje
traženu digitalnu veličinu u koju je pretvoren ulazni napon.Treba napomenuti da točnost pretvorbe
ovisi o stabilnosti frekvencije generatora impulsa i o linearnosti i stabilnosti pilastog napona.

15
Sl.3.9. Princip rada Wilkinson-ovog A/D pretvarača

b) A/D pretvarači sa sukcesivnom aproksimacijom

Pretvarač radi tako da se produženi ulazni napon iz produživača uspoređuje s naponom u obliku
stepenica (slika 3.12.). Pri tome prva stepenica ima veličinu Umax/2, druga Umax/4, treća Umax/8, itd.
Gdje je Umax najveći ulazni napon koji se može pretvarati. Zbog takvog načina rada taj tip A/D
pretvarača zove se i A/D pretvarač sa sukcesivnom aproksimacijom. Ako je stepeničasti napon, koji
predstavlja sumu svih stepenica, manji od produženog ulaznog napona, onda do tada generirane
stepenice ostaju. Kada stepenasti napon postane veći, briše se doprinos stepenice koja se pojavila
posljednja i izazvala prekoračenje ulaznog napona. Tako na kraju usporedbe ostaju samo one
stepenice čija je suma približno jednaka veličini ulaznog napona, odnosno neznatno niža od njega.
Generiranjem svake naponske stepenice upravlja jedan bistabil, propuštajući kroz zajednički otpornik
struju proporcionalnu težinskoj vrijednosti toga bistabila u binarnom brojevnom sustavu. Tako bistabil
najmanje težinske vrijednosti B0 upravlja strujom I0 stvarajući najmanju stepenicu napona, sljedeći po
redu bistabil B1, upravlja strujom 2I0 stvarajući tako dvostruko veću stepenicu, itd. Bistabili se
postavljaju u stanje 1 nizom uzastopnih impulsa. Prvi od tih impulsa postavi u stanje prvi bistabil
najveće težinske vrijednosti, koji ukljući odgovarajuću struju, i napravi najveću stepenicu Umax/2. Zatim
se uključuje sljedeći bistabil po težinskoj vrijednosti, koji stvori stepenicu Umax/4, itd.Kada suma
stepeničastog napona prekorači veličinu ulaznog napona, uspoređivač pošalje signal o
prekoračenju.Taj signal postavi u nulu bistabil koji je generirao posljednju stepenicu, zbog toga
prestane teći ona struja kojom upravlja taj bistabil pa nestane i njegova stepenica. Kada se tako
izredaju svi bistabili i njihove stepenice, pretvorba je završena, a stanje bistabila u obliku binarnog
podatka predočavaju na digitalni način veličinu ulaznog napona.

16
Sl. 3.12. A/D pretvarač sa sukcesivnom aproksimacijom

Sl. 3.13. Graf signala sukcesivnog A/D pretvarača

17
c) Sigma-delta A/D pretvarači

Sl.3.13.a Blok shema Sigma-delta A/D pretvarača

Na gornjoj slici ulazni naponski signal VIN je doveden na integrator, čiji izlaz se preko komparatora
uspoređuje s referentnom naponskom nulom pretvarača. D-bistabil kontrolira preklopnik s kojim
uključujemo/isključujemo referentni napon na ulazu u integrator. Kako ulazni napon raste ili pada,
komparator uključuje ili isključuje referentni napon, koji se oduzima od ulaznog signala, s težnjom da
zadrži nulu na izlazu integratora.

Brojač C1 konstantno broji impulse dobivene iz generatora takta, dok brojač C2 samo broji
impulse kada je preklopnik zatvoren. Pretpostavimo da je kapacitet brojača C1 1000. Nakon svakog
perioda od 1000 impulsa, broj u brojaču C2 je proporcionalan srednjoj vrijednosti ulaznog signala.

Sigma-delta modulacijska tehnika je vrlo uspješno u upotrebi u analogno-digitalnoj pretvorbi


(ADC) nešto više od 20 godina. Iako sigma-delta postoji od polovice prošlog stoljeća, tek skorašnje
prednosti VLSI tehnologija je omogućila uporabu da proteče generiran bit sa 1 bitnim ADC-om.

Posljedica visoke rezolucije sigma-delte tehnologije je brzina – sklopovlje treba funkcionirati sa


većim brojem uzoraka, mnogo većim od pojasne širine maksimalnog signala, te zahtjeva veliku
složenost digitalnih strujnih krugova. Zbog ovih ograničenja, ovi pretvarači tradicionalno prikazuju
visoku rezoluciju, vrlo niskog frekvencijskog zahtjeva, i u zadnje vrijeme govor, zvuk i umjerene brzine
(100 kHz i 1 MHz).

Digitalno filtriranje prikazuje rezultate u dugoj prikrivenosti između početka ciklusa uzorka i prvog
ispravnog digitalnog izlaza. Značajno zaostajanje između digitalnog izlaza i njegovog trenutnog
pratećeg uzorkovanja. Ove karakteristike sprječavaju korištenje ovih pretvarača u složenim sistemima
– nakon prebacivanja iz jednog kanala u drugi zahtjeva se mnogo vremenskih ciklusa za postavljanje
digitalnog filtriranja.

18
Razlike u odnosu na alternativne tehnologije:

• Većina strujnih krugova u sigma-delta pretvaračima je digitalna. To upućuje da se izvođenje neće


značajnije promjeniti s vremenom i temperaturom. Također, izvedivo je postavljanje pretvarača u
jedan integrirani sklop sa dodanim strujnim krugom, kao što su D/A pretvarač, DSP (Procesor
Digitalnog Signala), mikrokontroler. Konačno, njena izvedba nije skupa i cijena je stalno u padu.
• Oni su sami po sebi monotoni, odnosno promjena digitalnog izlaza je uvijek ista tj. padu ili rastu
digitalnog ulaza. To je izrazito značajno u zatvorenim kružnim kontrolnim sustavima, gdje
nedostaje interpretacija smjera promjena mjerene varijable, gdje može uzrokovati nestabilni
sustav.
• Oni su sami po sebi linearni, te predočavaju manju diferencijalnu nelinearnost.
• Ne zahtjevaju dodatni Sample & Hold strujni krug, tijekom velike ulazne brzine uzorkovanja i
male točnosti A/D pretvorbe.
• Zahtjevi za analogne protupreklapajuće (anti-aliasing) filtere su minimalni, u većini slučajeva je
dovoljan jednostavni jednopolni RC filter. Za razliku od ostalih gdje su zahtjevi osrednji, za visoke
rezolutne zahtjeve koriste se druge vrlo sofisticirane (ne preuzorkovane) tehnologije, drugačije
dizajnirane, veće i skuplje.
• Razina smetnje, koji određuje SNR (Signal-To-Noise Ration – omjer snage signala i smetnje), je
neovisana o razini ulaznog signala.
• Do tada je stanje digitalnog filtriranja dio nakon A/D pretvaranja, smetnje ubačene kroz
pretvarački proces se mogu vrlo uspješno kontrolirati. Ustvari, filter može biti podešen do
minimalne razine smetnje sa vrlo specifičnim karakteristikama (npr. 50 Hz).
• Prije svega, oni sami po sebi čine ove uređaje jeftine i pristupačne. U višekanalnoj primjeni,
arhitekture jedan pretvarač po kanalu, često će biti efikasniji, ali i skuplji od jednog pretvarača za
multipleksirane ulaze.

19
3.6 Digitalno analogni pretvarač

Digitalni signal ima mnoge svoje prednosti, ali je ipak analogni signal u mnogo slučajeva pogodniji.
Na primjer, u regulacijskoj tehnici zbog izvršnog sklopa analogne prirode potrebno je digitalne signale
pretvoriti u analogne.

2n−1

U iz

20

Sl. 3.14. D/A pretvarač

D/A pretvarač nam je potreban da bi digitalni signal dobiven iz računala pretvorili u odgovarajući
analogni signal najčešće napon ili struju. On nam je potreban za prikaz podataka na CRT monitoru.
D/A pretvarač radi tako da svaki bit binarnog podatka upravlja određenim iznosom električne struje
proporcionalnog težinskoj vrijednosti tog bit-a. Tako bit najmanje težinske vrijednosti B0 upravlja
strujnim iznosom I0, B1 upravlja strujom 2I0, B2 strujom 3I0, itd. Sve struje teku u istu točku te je
konačan iznos određen binarnim brojem zbroj svih struja. Propuštanjem te struje kroz otpornik dobije
se napon. Šiljci prijelaznog napona vezani su uz kontinuiranost veličine (slika 3.15.).

n
1000

0111

Šiljak prijelaznog napona stvarni


očitani

Sl. 3.15. Graf signala

20
3.7 Međusklop (Interface)

Međusklop (eng. interface) služi za povezivanje računala sa vanjskim uređajima. Vanjski sklopovi
imaju drugačiji način rada koji je neovisan o načinu rada digitalnog računala. Zadatak međusklopova
je da ta dva različita načina rada uskladi tako da čine cjelinu. Pošto su vanjski sklopovi jako različiti,
međusklopovi trebaju biti sastavljeni od standardnih elektroničkih dijelova. Mikroračunala imaju
posebne LSI-komponente za prijenos podataka između mikroprocesora i vanjskih jedinica, koje se
programski prilagođavaju specifičnim vanjskim jedinicama. To omogućava fleksibilnost i jednostavnost
međusklopova. Treba spomenuti da postoje standardni LSI-sklopovi za ulazno – izlazni prijenos. Ti
LSI-sklopovi se rade za standardne vanjske jedinice kao što su disketna jedinica, tipkovnica, itd.
Neposredni ulazno – izlazni prijenos se vrši paralelno, znači da se svi bit-ovi jedne riječi prenose od
jednom (to su međusklopovi u užem smislu).
Uređaji za povezivanje udaljenih jedinica s računalom koriste serijsku vezu jer paralelna nije
praktična zbog broja vodiča, znači prenosi se bit po bit. Najprije treba paralelne podatke pretvoriti u
serijske te se na prijemnom mjestu opet pretvaraju u paralelne. Svi potrebni sklopovi za povezivanje
na daljinu se također zovu interface, mada bi bilo prikladnije reći interface u širem smislu, jer oni
sadrže interface u užem smislu, paralelno/serijsku i serijsko/paralelnu pretvorbu.
Uređaji koji koriste serijsku komunikaciju koriste dvije vrste kabela i to: DCE (Data
Communications Equipment) i DTE (Data Terminal Equipment). DCE koriste modemi, printeri i sl. dok
se DTE koristi za vezu između PC korisnika.
U/I kanali su priključci ili ulazno/izlazni sklopovi koji omogućuju povezivanje računala sa različitim
vanjskim uređajima ili s uređajima unutar kučišta sustava.

Sl. 3.16. Sučelje DTE-DCE i komunikacijski kanal

Dva su osnovna tipa prijenosa podataka putem U/I kanala:

a) parelelni
b) serijski

a) Paralelni prijenos podataka ukazuje na istovremeni prijenos bitova preko više komunikacijskih
vodova. Sklopovi su standardni i direktno su povezani sa sve tri sabirnice. Sklop ima svoj registar
(privremenu memoriju) koja ima svoju adresu pa mikroprocesor lako na njega prenese podatke.
Nečelo paralelnog prijenosa prikazan je na slici 3.17.

21
Sl. 3.17. Načelna shema osam bitnog paralelnog prijenosa

Prikazani sustav paralelnog prijenosa podataka razvila je tvrtka CENTRONICS, pa se često tako i
naziva. Kako bitovi prolaze istovremeno, prijenos je brži od serijskog prijenosa, ali je neprikladan za
udaljene veze zbog velikog broja vodiča u spojnom kabelu. Efikasna duljina je 10 m.

Sl. 3.18. Shema jedinice za paralelni prijenos

b) Serijski prijenos podataka. Za razliku od paralenog prijenosa, kod serijskog se podaci šalju po
jednoj žici. Da bi se podaci sa sabirnice mogli redosljedno poslati preko serijskog sučelja, u sklopu
sučelja obavezno su ugrađeni registri posmaka koji omogućavaju pretvorbu paralelnog prihvata u
serijsko odašiljanje i obratno.

Sl. 3.19. Načelo rada serijskog prijenosa podataka

22
Sl. 3.20. UART

Najčešći tip prijenosnog puta u procesima je RS-232C. Postoje i RS-422 (baziran na strujnoj petlji
od 4 do 20mA). RS-232C baziran je na naponskom prijenosu, ali na izlazu i ulazu su različiti naponi.
Na izlazu se napon kreće od -15 do +15V, na izlazu od -3 do +3V. Brzine prijenosa su do 20Kb/s. RS-
422 podržava vodove do kilometra i veće brzine prijenosa (do 100Kb/s).
Postoje dva tipa prijenosa s obzirom na vremensku usklađenost prijenosa:

• Sinkroni
• Asinkroni

Asinkroni način prijenosa podataka najčešće se upotrebljava pri malim brzinama prijenosa tj. kada
se prenosi relativno malo bitova u sekundi, jer su tada prihvatljive veće međusobne razlike taktnih
signala, odašiljača i prijemnika. Za veće brzine prijenosa upotrebljava se sinkroni prijenos koji mogu
prenositi nekoliko puta više bitova u sekundi. Pri asinkronom načinu prijenosa odašiljač i prijemnik
imaju odvojene izvore taktnih signala pa je potrebno relativno velika usklađenost, odnosno točnost tih
signala. Pri sinkronom prijenosu to nije problem jer isti taktni signali određuju mjesto svakog bita koji
se prenosi i u odašiljaču i u prijemniku. Inače je način rada pri sinkronom serijskom prijenosu sličan
radu pri asinkronom prijenosu. Postoji odašiljač koji paralelne podatke pretvara u serijske, i prijemnik
što dolazeće impulse prihvaća i formira podatak spreman za daljnji paralelni prijenos.
Kod asinkronog prijenosa podataka nema informacije o taktu uključenog u samoj poruci, već se
koristi česta resinkronizacija koristeći se start i stop bitovima.
Prijenos podataka počinje start bitom, a završava stop bitom. Osim start i stop bita može se slati i
paritetni bit, koji štiti od jednostruke pogreške. Također ne može detektirati koji je bit krivo poslan, a ne
može detektirati ni višestruke pogreške.

Sl. 3.21. Primjer RS-232 signala

23
3.8 Paritetni sklop

Paritetni sklop koristi se kao generator i ispitivač pariteta pri prijenosu digitalnih signala. Za
siguran prijenos kodiranih podataka u digitalnim sustavima vrlo često se koristi metoda pariteta.
Svakoj binarnoj kombinaciji, kojom se pokazuje podatak, dodaje se tzv. paritetni bit kako bi ukupan
broj jedinica bio uvijek paran (metoda parnog broja jedinica) ili neparan (metoda neparnog broja
jedinica).
Na mjestu odakle se odašilje digitalni signal paritetni sklop djeluje kao generator paritetnog bita.
Sklop ispituje broj jedinica u podatku i generira paritetni bit. Ako 4-bitni podatak ima parni broj jedinica
generator pariteta na izlazu daje stanje 0, ako podatak sadrži neparan broj jedinica, generator pariteta
daje na izlazu stanje 1. Time se postiže da je ukupan broj jedinica podataka i paritetnog bita uvijek
paran (slika 3.22.).

Sl. 3.22. Primjena paritetnog sklopa

3.9 Povezivanje računala sa procesima

Da bi se računala mogla primjeniti u vezi sa različitim procesima, karakteristične mjerne veličine


(parametri procesa) moraju se unositi u računalo koje te podatke obrađuje, izvodeći karakteristične
programe, specifične samo za taj proces. Izvođenje tih programa omogućuje da se pomoću računala
nadzire odvijanje procesa, da se mjere izvorne ili izvedene veličine tog procesa ili da se procesom
upravlja pomoću računala. Najprije treba razraditi odgovarajuće upravljačke, mjerne ili nadzorne
algoritme kojima se na adekvatan (primjeren) način rješava postavljeni zadatak. Taj algoritam se
zatim ubacuje u računalo pomoću programa napravljenih upotrebom nekog programskog jezika.
Tokom rada na procesu ti se programi izvode u računalu, omogućavajući upravljanje procesom,
mjerenje ili nadzor procesa. Da bi računalo moglo raditi sa procesom, potrebni su i u samom procesu
odgovarajući sklopovi, karakteristični upravo za taj proces. To mogu biti različiti sklopovi. Oni povezuju
proces sa elektroničkim i računalnim sustavom i mogu se podjeliti u dvije osnovne kategorije: Senzore
(mjerne pretvarače, osjetila) i izvršne organe. Senzori izražavaju različite parametre procesa, najčešće
u obliku električnih analognih signala (veličina napona ili struje). Izvršni organi služe za djelovanje na
proces, ako se obradom ulaznih podataka ustanovi da to treba učiniti. Parametri procesa koji će se
upotrijebiti za rad ovise o vrsti procesa i mogu biti različite fizikalne veličine kao što su tlak, protok,
temperatura, radioaktivno zračenje itd. Budući da ima puno različitih parametara koji se mogu mjeriti, s
većom ili manjom točnošću, postoji i veliki broj različitih senzora. Većina tih senzora izražava
parametre (mjerne veličine) procesa u analognom obliku, odnosno u obliku veličine napona ili struje,
zato ih prvo treba pretvoriti u digitalni oblik koji je pogodan za unos u računalo. Postoji dakako
mogućnost, iako manja, da senzori izražavaju neke parametre procesa direktno u digitalnom obliku.
Takve veličine nije potrebno pretvoriti u digitalni oblik, nego se mogu bez pretvorbe unositi u računalo.

24
3.10 Računalo

Računalo je ''mozak'' jednog ″on line″ sustava. Ono omogućava brzu reakciju i korekciju u
sustavu. Tako na primjer, na temelju prikupljenih meteoroloških podataka računalo danas izračunava
vremensku prognozu za sutra, za to bi ljudima koristeći meteorološke algoritme trebalo možda mjesec
dana i tada bi ti podaci bili nevažni. Koristeći računalo ti podaci mogu biti obrađeni u vrlo kratkom
vremenu pa ta vremenska prognoza postaje upotrebljiva. Računala tako mogu biti korištena u različite
svrhe, a to im omogućuje programibilnost. Program koji je unesen u računalo prilagođava računalo
određenom sustavu. Gotovo za svaki sustav računalo je sklopovski isto, moguće su male modifikacije.

3.10.1 Mikroprocesor

Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske


instrukcije i na osnovu njih obrađuje podatke. Naziv ''mikro'' koristi se zbog malih dimenzija. Današnji
mikroprocesori sadrže preko stotinu milijuna tranzistora ukomponiranih na silicijskoj pločici upakiranoj
u kućište.
Prvi mikroprocesor proizvela je tvrtka Intel 1971. godine. To je bio 4-bitni mikroprocesor s brzinom
od 6000 operacija u sekundi, zvao se 4004. Nakon tog uviđa se velika prednost mikroprocesora, te se
počinju naglo razvijati. Prvi jači mikroprocesor bio je Intelov 8008 i Motorolin 6800 koji su bili 8-bitni
procesori. Razvoj mikroprocesora se do danas nije zaustavio, no osnova njihovog rada je u principu
ista.
Uz mikroprocesor se može pridodati i matematički koprocesor koji procesoru potpomaže u
računskim operacijama. Koprocesor radi paralelno s mikroprocesorom i može preko njemu usmjerenih
instrukcija izvršiti vrlo moćne operacije s pokretnim zarezom. Svi noviji procesori imaju integriran
koprocesor u kućište s mikroprocesorom.

Značajke mikroprocesora:

• velika prilagodljivost (univerzalnost)


• niska cijena
• male dimenzije
• velika pouzdanost

3.10.2 Mikrokontroler

Mikrokontroler je elektronički uređaj koji, slično kao i računalo, ima zadaću da zamjeni čovjeka u
kontroli dijela proizvodnog procesa ili gotovo cijelog proizvodnog procesa. Iz svakodnevne prakse pri
uporabi računala opće namijene tip PC-a već je poznato da je standardni ulaz tipkovnica i miš
(eventualno upravljačka palica), dok je standardni izlaz monitor ili pisač. Teško je definirati što će biti
standardni ulaz i izlaz mikrokontroleru. Razlog tome je što su mikrokontroleri uglavnom dizajnirani za
specifične zadaće vrlo raznolike od slučaja do slučaja. Primjera ima mnogo, od jednostavne regulacije
osvjetljenja, alarmnih sustav, pa dao upravljanja robotima u industrijskim pogonima. Ulazi mogu biti
vrlo jednostavne izvedbe kao na primjer prekidač u sklopu plovka za nadzor najvećeg ili najnižeg
nivoa tekućine u spremniku. Mikrokontroler tada ima za obradu samo dva stanja koje opisuje jedan bit.
Složenije je praćenje ako treba pratiti stvarnu razinu nivoa tekućine u spremniku. Tada treba definirati
koliko će se nivoa pratiti i tu će se upotrijebiti nekakav potenciometarski sklop koji će mikrokontroleru
predati određenu analognu vrijednost koju će ovaj potom pomoću A/D pretvornika obraditi i isporučiti
odredištu. Ako je pak povezan s fotoćelijom za brojanje predmeta po načelu prekidanja svjetlosnog
snopa radi se o izravnom brojanju impulsa tijekom rada neovisno o vremenu.
Dakle, ulazi mogu biti analogne i digitalne prirode i u suštini podatke će isporučivati nekakav
mjerni pretvornik (senzor).

25
Izlazi iz mikrokontrolera također mogu biti analogne i digitalne prirode. Analogni izlazi, bilo
naponski ili strujni, mogu se elektromehaničkim sklopovima pretvoriti u neku korisnu radnju kao
promjena položaja nekog predmeta, povećanje brzine vrtnje motora i slično. Najjednostavniji primjer je
lampica upozorenja koja upozorava čovjeka na promjenu ili neispravnost. Složeniji izlaz biti će kada
se želi pratiti veličina promjene bilo kao analogni ili digitalni prikaz.
Naravno, ulaz i izlaz mikrokontrolera nije isključivo vezan na komunikaciju sa strojem. Uglavnom
kontroler ima neki vid komunikacije prema korisniku, na primjer s lampicama ili s digitalnim
pokazivačem. No nisu rijetki slučajevi da se za komunikaciju s čovjekom koristi računalo tipa PC.
Iz navedenog može se zaključiti da se mikrokontroleri prema načinu izrade i komunikacije s
okolišem mogu svrstati u jednu od dvije osnovne kategorije:

• Mikrokontroler kao samostalna upravljačka jedinica


• Mikrokontroler kao osobita kartica u jednom od utora PC računala

U suštini mikrokontroler radi na načelu vrlo bliskom računalu. On je uistinu malo računalo, a
složenost mu ovisi o složenosti zadaće koju ima nadzirati.

Sl. 3.23. Pojednostavljeni model mikroprocesora

26
- Aritmetičko-logička jedinica (izvršna jedinica) ALU izvršava osnovne aritmetičke i logičke
operacije (+, -, posmak, komplementiranje, logičke operacije I i ILI)
- Akumulator A služi za privremeno pohranjivanje jednog od operanada (podataka nad kojima
se obavlja aritmetička ili logička operacija). Rezultat operacije se najčešće ponovo pohranjuje
u akumulator. Akumulator sudjeluje i u prijenosu podataka između procesora i ostalih
komponenti računala, odnosno vanjskog svijeta.
- Programsko brojilo PC (engl. Program Counter) je registar koji sadrži adresu sljedeće
instrukcije koja će se izvesti. Upravljačka jedinica ga automatski inkrementira.
- Instrukcijski registar IR je registar u kojem je zapisan operacijski kod čije je izvršavanje u
tijeku. Operacijski kod je binarni kod kojim je pojedina instrukcija prikazana i zapisana u
memoriji računala.
- DC (engl. Data Counter) je registar u kojem je zapisana adresa memorijske lokacije na kojoj
se nalazi operand, pa se taj registar naziva brojilo podataka.
- Privremeni registar WR (Work Registar) je povezan s jednim od ulaza u aritmetičko-logičku
jedinicu i služi za privremeno pohranjivanje jednog od podataka koji sudjeluju u aritmetičkoj ili
logičkoj operaciji. Ovaj privremeni registar nije element programskog modela mikroprocesora.
- Interna sabirnica – skup linija za prijenos podataka koje su izvedene na samom
mikroprocesorskom čipu. Omogućava prijenos podataka između pojedinih registara,
aritmetičko-logičke jedinice i upravljačke jedinice. Interna sabirnica je preko međuregistara,
odnosno sabirničkog sučelja povezana s vanjskom sabirnicom.
- Upravljačka jedinica – sastoji se od sklopova za dekodiranje instrukcije i upravljačkih
sklopova. Upravljački sklopovi u skladu s operacijskim kodom instrukcije koja se izvršava
generiraju niz upravljačkih signala. Ti signali upravljaju prijenosom podataka između registara
i aritmetičko-logičke jedinice, aktiviraju promjenama vrijednosti programskog brojila,
omogućavaju prijenose podataka između procesora i memorije i sl. Sve operacije unutar
mikroprocesora sinkroniziraju se signalom vremenskog vođenja (takt). Događaji u
mikroprocesoru odvijaju se u točno utvrđenim diskretnim vremenskom trenucima.

Registre u procesoru dijelimo na:

a) registri opće namjene (služe za privremenu pohranu podataka koji se obrađuju, odnosno
operanada, međurezultata, rezultata, pohranjuju kazala koja upućuju na pojedine memorijske
lokacije)
b) namjenski registri (programsko brojilo [program counter], kazalo stoga [stack pointer],
registar stanja programa [program status word, statusni registar])
c) namjenski registri kojima korisnik ne može pristupiti (IR – registar instrukcija, privremeni
registar)

3.10.3 Arhitektura računala

Postoje dvije dominantne arhitekture procesora, a to su:

• CISC (engl. Complex Instruction Set Computer)


• RISC (engl. Reduced Instruction Set Computer)

CISC arhitektura (slika 3.25.) je starija arhitektura od RISC, osmislio ju je Von Neumann 1945.
godine. Sustavno je opisao osnovnu građu i djelovanje računala, a na njegovom se modelu temelje i
današnja računala (slika 3.24.).

27
Sl. 3.24. Van Neumannov model računala

Da bi popravili performanse CISC arhitektura pokušava smanjiti broj instrukcija koje program mora
pozivati. Da bi to napravili moraju imati velik broj mikro instrukcija koje pokrivaju velik raspon
zadataka. Jedna mikroinstrukcija, kad se dekodira u procesoru može postati nekoliko zadataka (tasks)
koje procesor mora izvršiti. Kao posljedica, instrukcije su varijabilne duljine i često zahtjevaju više od
jednog takta za njihovo izvršavanje. Kao što vidimo na slici 3.25. CISC arhitektura koristi samo jednu
sabirnicu koja služi kao podatkovna i kao adresna sabirnica.

Sl. 3.25. Pojednostavljena shema CISC arhitekture ili Von Neumann-ove arhitekture

Najznačajnije karakteristike CISC mikroprocesora:

• proširenje instrukcije
• kompleksne strojne instrukcije
• dekodiranje instrukcija
• razni načini adresiranja memorije
• relativno malo registara
• viši radni takt

RISC arhitektura (slika 3.26.) računala nastala je na Sveučilištu Harvard. RISC arhitektura
pokušava poboljšati performanse reduciranjem broja taktova potrebnih za izvršavanjem zadatka.
Imaju mali set pojednostavljenih instrukcija, izvršavajući cijeli mikro kôd odjednom. Ovo znači da
zadatak treba više instrukcija koje su jednake duljine i obično trebaju jedan takt za izvršavanje. Zbog
ovoga, RISC sustavi su sposobni procesirati više instrukcija paralelno (pipelining). Procesor radi više
instrukcija odjednom, počevši drugu instrukciju prije završetka prve. Ovo značajno povećava
propusnost i čini RISC bržim od CISC-a. Vidimo na slici 3.26. da ova koncepcija koristi dvije sabirnice.
Time se postiže veći protok informacija. Odvajanjem sabirnica omogućava se da instrukcije mogu biti
veće od 8 bit-a. PIC16F84 koristi 14 bit-a za instrukcije što dozvoljava da sve instrukcije budu od
jedne riječi i svaka instrukcija se izvršava u jednom ciklusu osim instrukcija skoka i grananja.

28
Sl. 3.26. Pojednostavljena shema RISC arhitekture ili Harvard-ske arhitekture

Najznačajnije karakteristike RISC mikroprocesora:

• smanjen instrukcijski set


• manje kompleksne, jednostavne instrukcije
• nije potrebna kontrolna jedinica za dekodiranje instrukcija
• maksimalno četiri načina adresiranja memorije
• puno registara
• manji radni takt

3.10.4 Razlika između mikroprocesora i mikrokontrolera

Sa rastom snage mikroprocesora rasla je i njegova primjenjivost. Zato se na čip veličine


mikroprocesora stavlja cijelo računalo – mikrokontroler. Mikrokontroleri su uglavnom dizajnirani za
specifične zadatke vrlo raznolike od slučaja do slučaja. U suštini mikrokontroler je malo računalo, a
složenost mu ovisi o složenosti zadaće koju mora obavljati. Od namjene mikrokontrolera ovisiti će broj
U/I portova, odnosno broj digitalnih i analognih ulaza/izlaza.
PODATKOVNA SABIRNICA
MEMORIJA

Sl. 3.27. Shema mikrokontrolera s njegovim osnovnim elementima

29
Svim mikrokontrolerima su zajednička sljedeća svojstva:

• Relativno mali radni takt (reda 10 MHz)


• Mali broj jednostavnih instrukcija (red veličine oko 100)
• Radna memorija (RAM - reda KB)
• Stalna memorija s programskim kodom (u EPROM izvedbi)
• Brojači različitih namjena kao sat, brojač impulsa, BCD brojač...
• Brojač za nadzor ispravnog rada – WDT (Watch Dog Timer)
• Ulazno/izlazni portovi za prihvat i slanje podataka
• A/D i D/A pretvornici razlučivosti prema namjeni (uobičajeni 8-bit)
• Širok raspon napona napajanja (2V – 6V)

3.10.5 Memorijska jedinica

Dio mikrokontrolera koji je zadužen za čuvanje podataka. Memorija mora biti u mogućnosti da čita
i zapisuje podatke. Zato postoji linija Č/P, ako je Č/P = 1 onda se vrši čitanje u suprotnom vršimo upis.

Sl. 3.28. Model memorijske jedinice

3.10.6 Adresno polje mikroračunala

• Adresno polje – sve moguće lokacije koje neka procesorska jedinica može adresirati (ne moraju
biti iskorištene baš sve adrese)
• Sa prvi bajt može se adresirati 256 lokacija, dok se sa dva bajta može adresirati i do 64 K
lokacija
• Moćno mikroračunalo mora imati različite načine adresiranja

Adresiranje memorije vršimo na više načina:

• neposredno – naredba sadrži sam podatak s kojim se radi. Podatak može biti 8 ili 16 bitni. Za
dohvat 2 bajta podatka dovoljna su tri zahvata u memoriju. To je vrlo brz način adresiranja.

30
• direktno (izravno) – prvi bajt je operacijski kod koji govori koja se operacija radi sa podatkom, a
drugi i treći bajt naredbe pokazuju lokaciju memorije gdje se nalazi podatak koji se želi obraditi.
Ovakvim načinom adresiranja može se doduše adresirati bilo koja lokacija u adresnom polju, ali
za dobivanje samo adrese operanda potrebna su dva zahvata u memoriju, to je vrlo spor način
adresiranja.
• indirektno (posredno) – drugi i treći bajt naredbe pokazuju adresu lokacije(pointera) gdje se
nalazi adresa podatka koji se obrađuje. To je vrlo neekonomično adresiranje, jer za dohvat
podatka treba puno zahvata u memoriju. Prednost je da se stvarna adresa operanda može
programski mjenjati, mjenjanjem sadržaja pointera tijekom izvođenja programa bez potrebe
mijenjanja glavnog programa.
• segmentno – zasniva se na činjenici da se programi većinom vrte u jednom dijelu (segmentu)
memorije.

MMU (jedinica za upravljanje memorijom) - zadatak Memory Management Unit je da podjeli memoriju
na više segmenata. Tako podijeljena memorija se adresira segmentno.

3.10.7 CPU (Central Processing Unit)

Mikroprocesor (CPU) je najvažniji elektronički sklop računala, koji preuzima programske naredbe i
na osnovu njih obrađuje podatke. Naziv ''mikro’’ koristi se zbog malih dimenzija. Sadrži do nekoliko
milijuna tranzistora ukomponiranih na silicijskoj pločici upakiranoj u plastično kućište.
Vrijeme izvođenja instrukcija je reda mikrosekunde, a broj instrukcija i veličina binarnog podatka
osnovni su parametri koji definiraju kvalitetu mikroprocesora. Mikroprocesori koji se u računalnim
sustavima opće namjene koriste dizajnirani su za rad s podacima duljine 4, 8, 16, 32 i 64 bit-a.

Sl. 3.29. Primjer centralne procesorske jedinice sa tri registra

Na slici 3.29. prikazan je primjer centralne procesorske jedinice sa tri registra, registri su dakle
memorijske lokacije čija je uloga da pomognu pri obavljanju raznih matematičkih operacija ili bilo kojih
drugih operacija sa podacima gdje god da se oni nalazili. Imamo dvije nezavisne cjeline (memoriju i
CPU) koje nisu međusobno povezane , čime je spriječena bilo kakva razmijena podataka. Ako
naprimjer želimo zbrojiti sadržaj dvije lokacije iz memorije i njihov rezultat ponovo vratiti u memoriju
potrebna nam je veza između memorije i CPU, tj. moramo imati neki ″put″ preko kojeg podaci idu iz
jednog bloka u drugi, a ti ″putevi″ se zovu sabirnice.

31
3.10.8 Sabirnica

Prijenos podataka između sklopova unutar mikroprocesora i unutar računala vrlo je značajan dio
posla, a obavlja se preko SABIRNICA (BUS), višežilnim prenosnim putevima između pojedinih
sklopova. Broj vodova sabirnice ovisi o broju bit-a koji opisuju podatke koje je potrebno prenjeti. U
suštini prijenos podataka je paralelan.
Dakle postoje dva osnovna sustava sabirnica:

1.) Unutrašnje sabirnice - veze unutar mikroprocesora.


2.) Vanjske sabirnice - veze u računalu izvan mikroprocesora.

Međusobno su odvojene međusklopovima jer se često promet na njima ne odvija istom brzinom.
Razmjena podataka u mikroprocesoru obavlja se višestruko brže nego između sklopova računala, te
ih je stoga potrebno odvojiti. O prijenosu podataka između unutrašnje i vanjske sabirnice brinu se
posebni upravljači (controller).
Unutarnja i vanjska komunikacija odvija se preko tri odvojene sabirnice:

1.) Podatkovne sabirnice – dvosmjerna


2.) Adresne sabirnice – jednosmjerna
3.) Upravljačke sabirnice – jednosmjerna

Naravno, komunikacija posredstvom triju sabirnica ubrzava sustav. Podatku, koji je na sabirnici
podataka, preko adresne sabirnice određuje se mjesto na koje će se uputiti, a upravljačka sabirnica će
prijenos odobriti.

MEMORIJSKA LOKACIJA 0

MEMORIJSKA LOKACIJA 1

MEMORIJSKA LOKACIJA 2 REGISTAR 1

REGISTAR 2

REGISTAR 3

MEMORIJA PODACI

ADRESE

Kontrolne linije
MEMORIJSKA LOKACIJA n
Č/P CPU

Sl. 3.30. Primjer komunikacije memorije i centralne procesorske jedinice pomoću sabirnica

Na slici 3.30. prikazana je komunikacija centralne procesorske jedinice sa memorijom. Memorija


se sastoji od 16 memorijskih lokacija koja sa centalnom procesorskom jedinicom komunicira preko
podatkovne sabirnice (koja je dvosmjerna). Podatkovna sabirnica sastoji se od onoliko linija koliko
memorije želimo adresirati, a služi za prijenos adrese od CPU do memorije, dok adresna sabirnica
(koja je jednosmjerna) povezuje sve blokove unutar mikrokontrolera.

32
3.10.9 U/I jedinica

Ove memorijske lokacije se nazivaju portovi. Portovi mogu biti ulazni, izlazni ili dvosmjerni. Kod
rada s portovima potrebno je prvo odabrati port s kojim se radi.

ULAZNI
REGISTAR PODACI

IZLAZNI
REGISTAR PODACI

PODACI

U/I
jedinica

Sl. 3.31. Primjer U/I jedinice

3.10.10 Serijska komunikacija

Ovime smo mikrokontroleru omogućili povezivanje na daljinu. Paralelni prijenos nije pogodan za
velike udaljenosti zbog većeg broja vodiča. Da bi prijenos funkcionirao treba odrediti skup pravila po
kojima će se odvijati, skup pravila po kojem se vrši prijenos podataka nazivamo protokol. Serijski
prijenos podataka dijelimo na sinkroni i asinkroni. Sinkroni prijenos između dva uređaja radi pod
zajedničkim taktom. Asinkroni prijenos koristimo kad ne znamo frekvencijski takt drugog uređaja, ovu
vrstu prijenosa koristimo za slanje manjih podataka.

Sl. 3.32. Serijska jedinica

33
3.10.11 Slobodni brojač

To je registar čija se vrijednost uvećava u pravilnim vremenskim razmacima. Omogućava nam


mjerenje vremena.

Sl. 3.33. Slobodni brojač

3.10.12 Sigurnosni brojač (Watchdog timer)

Program u njega upisuje 0 svaki put kad kada se pravilno izvrši. Ako signal izostane, neće doći
do upisivanja 0 (znači da se mikrokontroler vrti u beskonačnoj petlji ), vrijednost brojača će se
povećavati do svoje maksimalne vrijednosti kada će sam resetirati mikrokontroler.

Sl. 3.34. Sigurnosni brojač

Na taj način onemogućava se duži nepravilan rad mikrokontrolera bez obzira na uzrok
neispravnosti. Ova metoda višestruko povećava sigurnost sustava kojeg mikrokontroler
nadzire/upravlja.

34
4 Mikrokontroler PIC 16F84

4.1 Osnovne karakteristike mikrokontrolera PIC 16F84

4.1.1 Karakteristike mikrokontrolera

• samo 35 jednorječnih instrukcija


• sve su instrukcije jednociklusne, osim instrukcija grananja programa i programskog skoka
• radni takt; 4MHz, trajanje instrukcijskog ciklusa: 1µs (4 takta vanjskog oscilatora za jednu
instrukciju) – mogućnost nabave mikrokontrolera koji podnose 10 MHz i 20 MHz vanjski takt
• 14 b veličina riječi instrukcijskog koda
• 8 b podatkovna sabirnica
• 15 registara specijalne namjene
• hardverski stog dubok osam nivoa
• tri načina adresiranja:
-direktno
-indirektno
-relativno
• 1k programske memorije izvedene u Flash tehnologiji
• 68 B podatkovne RAM memorije
• 64 B podatkovne EEPROM memorije
• četiri izvora prekida:
- vanjski na nožici RB0/INT
- preljev timer-a TMR0
- prekid pri promjeni na RB4, RB5, RB6 i RB7 nožicama porta B
- prekid nakon završetka procesa upisivanja podataka u EEPROM memoriju
• oko 1 000 piši/briši ciklusa može podnijeti Flash programska memorija
• oko 10 000 000 piši/briši ciklusa može podnijeti EEPROM podatkovna memorija
• postojanost podataka u EEPROM podatkovnoj memoriji je više od 40 godina

4.1.2 Karakteristike ulazno/izlaznih sklopova

• 13 ulazno/izlaznih pojedinačno upravljivih nožica


• velika struja U/I sklopova za napajanje LED dioda:
- maksimalna ulazna struja po nožici je 25mA
- maksimalna izlazna struja po nožici je 20mA
• 8-bit-ni timer/brojač sa 8-bit-nim programibilnim djeliteljem frekfencije

4.1.3 Specijalne karakteristike mikrokontrolera

• serijsko In-System programiranje – preko dvije nožice


• Power-on Reset (reset pri uključenju)
• Power-up Timer (određeno kašnjenje nakon uključenja)
• Oscilatorski Start-up Timer (određeno kašnjenje od stabilizacije radne frekfencije)
• Watchdog Timer sa vlastitim integriranim RC oscilatorom za neovisan rad

35
• zaštita koda
• SLEEP način rada ( za štednju energije)
• odabir vrste oscilatora

4.1.4 Karakteristike CMOS Flash/EEPROM tehnologije

• mala potrošnja, velika brzina


• radni napon od 2.0V do 6.0V
• mala potrošnja energije:
- < 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

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 sažimanje koda i 4:1 veću
brzinu rada (na 20 MHz) od drugih 8-bit-nih mikrokontrolera iste klase. SLEEP način rada omogućuje
štednju energije. Iz takvog načina rada mikrokontroler se može vratiti u aktivno stanje putem prekida,
vanjskih ili unutarnjih, i/ili resetom. Te ima Watchdog timer sa vlastitim RC oscilatorom koji štiti od
softverskog ″zamrzavanja″ ili slučajne beskonačne petlje. Incircuit reprogramibilnost omogućuje
optimiranje programskog koda unutar sklopa, bez odvajanja mikrokontrolera od gotovog sklopa. To je
vrlo korisno u razvoju sklopova gdje mikrokontroler nije fizički dostupan, a prototip zahtjeva
optimizaciju.

MEM. ZA SLOBODNI
PODATKE BROJAČ
RAM

MEM. ZA
PODATKE CPU
EEPROM

PORT A PORT B

Sl. 4.1. Blok shema mikrokontrolera PIC 16F84

36
4.3 Raspored nožica

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

1. RA2 – druga nožica porta A


2. RA3 – treća nožica porta A
3. RA4/TOCKI – četvrta nožica porta A, 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 dvije različite konfiguracije oscilatora. A to su kristalni oscilator (XT) i RC
oscilator, radnog takta 4 MHz, 10 MHz ili 20 MHz ovisno o tipu mikrokontrolera. Slika 4.5. prikazuje
oblik signala dobiven iz oscilatora u trenutku uključenja, oscilatoru treba neko vrijeme ∆T da se
stabilizira na određenu frekvenciju.

37
C2

OSCI 1
XTAL
OSCI 2
C1

Sl. 4.3. Spajanje kristalnog oscilatora

Vdd

OSCI 1
C

OSCI 2

Sl. 4.4. Spajanje RC oscilatora

U
+5

t
T
Sl. 4.5. Oblik signala pri uključenju oscilatora

38
4.5 Takt / instrukcijski ciklus

Takt doveden s nožice OSC1 u mikrokontroleru se dijeli na četiri nepreklapajuća takta koje
nazivamo Q1, Q2, Q3 i Q4 koji skupa čine jedan instrukcijski ciklus npr. TCY1.
Instrukcijske cikluse dijelimo:

• Q1 – pozivanje instrukcije iz programske memorije


• Q2 – dekodiranje naredbe iz predhodnog instrukcijskog ciklusa
• Q3 – izvođenje naredbe iz predhodnog instrukcijskog ciklusa
• Q4 – spremanje instrukcije pozvane u Q1 u instrukcijski registar

Uzmimo za primjer instrukcijski ciklus TCY2. Na Q1 takt u instrukcijskom ciklusu TCY2 programski
brojač (PC) se uvećava za 1 te poziva instrukciju iz programske memorije. U sljedeća dva takta Q2 i
Q3 instrukcijskog ciklusa TCY2 instrukcija koja je bila pozvana i spremljena u instrukcijski registar u
prijašnjem TCY1 instrukcijskom ciklusu se dekodira i izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa
TCY2 se instrukcija pozvana na Q1 sprema u instrukcijski registar.

TCY1 TCY2 TCY3


Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
Q1
Q2

Q3
Q4
PC

Sl. 4.6. Vremenski dijagram izvršavanja instrukcije

4.6 Obrada instrukcija

Ciklusi povezivanja i izvršavanja instrukcija su tako povezani da je za pozivanje potreban jedan


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

39
4.7 Reset

Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se mikrokontroler
''smrzne'' ili smo ga tek uključili treba ga resetirati. Da bi spriječili slučajno dovođenje ''0'' na MCLR
nožicu, potrebno ju je preko otpornika spojiti na pozitivan pol napajanja Vdd, slika 4.7.

RA 2

Vdd RA 3

R RA 4

MCLR

Sl. 4.7.

PIC 16F84 ima više vrsta resetiranja:

1. Resetiranje pri dovođenju napajanja (Power-on Reset). Ovaj reset traje isto koliko treba
oscilatoru da stabilizira frekvenciju (∆T), slika 4.5. odnosno 72 ms
2. Dovođenje ″0″ na MCLR nožicu
3. Reset za vrijeme ″Sleep″ načina rada
4. Reset pri prekoračenju Watchdog timera

4.7.1 Reset kod pada napona napajanja (Reset on Brown-Out)

Ovaj impuls generira sam mikrokontroler ako napon napajanja padne ispod dozvoljene granice
koja je potrebna za normalan rad mikrokontrolera, te ga ″drži″ 72 ms u resetu koliko je potrebno da se
frekvencija stabilizira.

1.8 V
T
t
Sl. 4.8. Reset pri padu napona

40
4.8 Ulazno / izlazni sklopovi

PIC 16F84 ima dva porta, PORTA i PORTB. Portom nazivamo grupu ulazno/izlaznih nožica
(pinova) kojima možemo pristupati istovremeno. Fizički, port je registar koji je povezan s pinovima
mikrokontrolera. Svi pinovi portova se mogu definirati kao ulazni ili izlazni, prema potrebama sustava.
Definiraju se upisivanjem nule i jedinice u registru TRIS, upisivanjem ″1″ pin postaje ulazni a
upisivanjem ″0″ izlazni. Pošto imamo dva porta imamo i dva TRIS registra, TRISA i TRISB. PORTA i
PORTB se nalaze u banci 0 a TRISA i TRISB u banci 1.

4.8.1 PORTA i TRISA

Ovaj port ima pet pridruženih pinova, od RA0 do RA4. Pin RA4 može biti samo ulazni, jer se na
tom pinu nalazi i ulaz takta za brojač TMR0. Bitom T0CS u registru OPTION se bira funkcija (ulaz
takta ili standardni ulaz porta) ovog pina, točnije rečeno bira se izvor takta (vanjski ili nutarnji) brojača
TMR0.

Primjer konfiguriranja porta:

bsf STATUS, RP0 ;bank1


movlw b'11111100' ;definiranje ulaznih i izlaznih 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.

PORTA

RA2

RA3
1

TRISA
0

Sl. 4.9. PORTA koristi 5 bitova

4.8.2 PORTB i TRISB

PORTB ima 8 pridruženih pinova, od RB0 do RB7. Svaki pin ima pull-up tranzistor i njime se
definira linija na logičku jedinicu. Svim tranzistorima se upravlja pomoću samo jednog bita, RBPU
bitom OPTION registra. Četiri pina ovog porta mogu izazvati prekid RB4: RB7 i to samo ako su
konfigurirani kao ulazni.

Primjer konfiguriranja porta:

bsf STATUS, RP0 ;bank1


movlw 0x0F ;definiranje ulaznih i izlaznih pinova
movwf TRISB ;upis u TRISB registar
bcf STATUS, RP0 ;bank0

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

PORTB

RB1

RB2
1
RB3

TRISB
0

Sl. 4.10. PORTB koristi 8 bitova

4.9 Organizacija memorije

PIC16F84 ima dva odvojena memorijska bloka, jedan za podatke i drugi za program. Blok za
podatke čini EEPROM memorija, GPR i SFR registri u RAM memoriji a programski blok čini Flash
memorija.
Programska memorija je izrađena u Flash tehnologiji što omogućuje programiranje
mikrokontrolera više puta pa čak i kada bude ugrađen u sustav. Ima 1024 lokacije širine 14 bit-a. Nulta
lokacija je rezervirana za reset a četvrta lokacija za prekid (interrupt).
Memorija za podatke se sastoji od EEPROM i RAM memorije. EEPROM memorija ima 64 lokacije
širine 8 bit-a (sl. 4.11) kojima se pristupa indirektno preko EEADR i EEDATA registara, sadržaj ove
memorije se ne gubi pri prekidu napajanja. RAM memorija ima 68 osmobitnih lokacija koje zauzimaju
prostor u memorijskoj mapi od 0x0C do 0x4F lokacije. Lokacije RAM memorije se nazivaju GPR
(General Purpose Registrers) registri.
SFR (Special Function Registers) registri zauzimaju prvih 12 lokacija u banci 0 i banci 1. To su
registri specijalne namjene i oni su direktno vezani za rad mikrokontrolera.

42
Sl. 4.11. Organizacija memorije

Podatkovna memorija je još podijeljena na dvije banke, BANK0 i BANK1. Banke se biraju preko RP0
bit-a u Status registru.

Primjer:

Bcf STATUS, RP0 - odabrana je banka 0

Bsf STATUS, RP0 - odabrana je banka 1

4.9.1 Programski brojač (Program Counter)

Programski brojač (PC) je 13 bit-ni registar koji sadrži adresu instrukcije koja se izvršava. Fizički je
realiziran pomoću 5 bit-nog registra PCLATH koji predstavlja 5 najviših bit-ova adrese i 8 bit-nog
registra PCL koji predstavlja preostalih 8 bit-a adrese.

43
4.9.2 Stog (Stack)

PIC 16F84 ima 13-bitni hardverski stog dubok 8 nivoa. Memorijski prostor stoga nije dio ni
programske ni podatkovne memorije, a pokazivač stoga nije moguće čitati i u njega upisivati
vrijednosti. Njegova osnovna zadaća je da sačuva vrijednost PC-a nakon što se iz glavnog programa
skoči na adresu potprograma. Da bi se program znao vratiti odakle je počeo mora sa stoga vratiti
vrijednost PC-a. Sadržaj sa stoga vraća se u programsko brojilo kod izvršavanja instrukcija RETURN,
RETLW ili RETFIE, koje se izvršavaju na kraju potprograma.

4.9.3 Status registar

U status registru se upisuju aritmetički status ALU (C, DC, Z), reset status (TO, PD) i bit-ovi za
odabir memorijske banke (IRP, RP1, RP0). Ovaj registar može biti odredište za bilo koju instrukciju s
bilo kojim drugim registrom. Ako je status registar odredište instrukcije koja utječe na Z, DC ili C bit
tada je upis u ova tri bit-a je onemogućen.

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

IRP RP1 RP0 TO PD Z DC C


bit 7 bit 0

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

C (Carry) – bit na koji utječu operacije zbrajanja i oduzimanja, bit je setiran kada se oduzima manja
vrijednost od veće
1 = pojavio se prijenos najvišeg bit-a rezultata
0 = nema prijenosa najvišeg bit-a rezultata

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

Z (Zero) – bit je setiran kada je rezultat aritmetičko logičke operacije nula


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

TO (Time-out) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i SLEEP Instrukcije, a
resetira kad dođe do prekoračenja sigurnosnog brojača
1 = nije bilo prekoračenja sigurnosnog brojača
0 = došlo je do prekoračenja sigurnosnog brojača

RP1, RP0 (Register Bank Select) – bit-ovi za izbor memorijske banke, RP1 je uvijek «0»
01 = BANK 0
00 = BANK 1

IRP (Register Bank Select) – osmi bit za indirektno adresiranje RAM-a, ne koristi se kod PIC 16F84 i
ne smije biti setiran
0 = banka 2 i 3
1 = banka 0 i 1

44
4.9.4 Direktno adresiranje

Vrši se preko 9 bit-ne adrese koja se dobije povezivanjem sedmog bit-a direktne adrese iz
instrukcije i dva bit-a iz STATUS registra (RP1, RP0).

IRP1 IRP0 7 0

00 01
odabir
banke 00

odabir
lokacije

7F
BANK 0 BANK 1

Sl. 4.12 Direktno adresiranje

4.9.5 Indirektno adresiranje

Ovaj način adresiranja ne uzima adresu iz instrukcije, već je radi pomoću IRP bit-a STATUS
registra i FSR registra. Adresiranoj lokaciji se pristupa preko INDF registra koji zapravo nije fizički
registar već se njegova adresa nalazi u FSR registru, FSR je pokazivač. Npr. ako memorijska lokacija
05h sadrži vrijednost 10h i ako memorijska lokacija 06h sadrži vrijednost 0Ah, upišemo li vrijednost
05h u FSR registar, INDF registar vratit će vrijednost 10h. Inkrementiranjem FSR registra, INDF
registar vratit će vrijednost 0Ah.

Sl. 4.13. Indirektno adresiranje

4.9.6 Relativno adresiranje

Adresa operanda u postupku relativnog adresiranja ovisi o smještaju same naredbe unutar
memorije. Oblik naredbe koja koristi relativno adresiranje prikazano je na slici 4.14.
Adresa operanda izračuna se tako, da se adresi, na kojoj se nalazi kod postupka, pribroji pomak.
Naziv relativno adresiranje potječe upravo od činjenice, da je adresa operanda određena relativno
prema položaju, odnosno smještzaju same naredbe. Relativni pomak računa se kao dvojni
komplement, a to znači da on može biti pozitivan i negativan.Budući da na raspolaganju stoji 8 bitova,
to je moguće adresirati bilo koju memorijsku lokaciju, udaljenu +127 ili -128 memorijskih lokacija od
lokacija same naredbe.

45
Naredbe koje koriste relativno adresiranje su dužine dviju riječi, što ih čini prikladnim za upotrebu.
Mana relativnog adresiranja je u relativno kratkom dometu adrese (+127, -128 memorijskih lokacija),
te u potrebi za izračunavanjem relativnog pomaka prilikom pisanja programa. Formula po kojoj se
izračunava stvarna adresa glasi:
Stvarna adresa (operanda ili skoka) = adresa naredbe+relativni pomak.

Sl. 4.14. Oblik naredbe Relativnog adresiranja

4.10 Prekidi (Interrupts)

Prekid je mehanizam mikrokontrolera koji omogućava da se na neke događaje odgovori u trenutku


kada se oni dese, bez obzira što mikrokontroler radi u tom trenutku. Svaki prekid mijenja tok
izvršavanja programa, prekida ga, te nakon izvršenja prekidnog potprograma nastavlja na istom
mjestu (Slika 4.15). Kontrolni registar prekida naziva se INTCON i nalazi se na adresi 0Bh. Njegova
uloga je da omogući ili zabrani prekide, a u slučaju da su zabranjeni, registrira pojedinačne zahtjeve
prekida preko svojih bitova.

TOK
IZVRŠAVANJA
PROGRAMA

Vdd

PROGRAM
R
U KOM SE
OBRAĐUJE
RB0/INT PREKID
T

NASTAVAK
NORMALNOG
TOKA
IZVRŠAVANJA
PROGRAMA

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

46
GIE bit može zabraniti ili omogućiti sve prekide odjednom. To je vrlo korisno kod pisanja programa
jer omogućuje da se na neko vrijeme zabrane svi prekidi. Prekidi koji su ostali ne riješeni obrađuju se
nakon ponovnog setiranja GIE bit-a. Ako se obradi bilo koji od ovih prekida mora se resetirati bit koji je
izazvao prekid jer će se u suprotnom prilikom povratka u glavni program prekid ponovno obraditi.

EEIE EEIF

TOIE TOIF

RBIE RBIF

GIE INTE INTF

INTERUPT

Sl. 4.16. Shema prekida

Na slici 4.16. prikazana je opća shema prekida pomoću sklopki. Pomoću GIE sklopke
omogućujemo bilo koji od četiri moguća prekida. Koristeći sklopke EEIE, TOIE, RBIF, INTE
određujemo vrste prekida, dok nam sklopke sa desne strane EEIF, TOIF, RBIF, INTF pokazuju koji se
prekid dogodio nekom trenutku.

4.10.1 INTCON registar

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

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF


bit 7 bit 0

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

RBIF (RB Port Change Interrupt Flag) – bit koji nam govori o promjeni na 4,5,6, ili 7-om pinu porta B
1 = najmanje jedan pin je promijenio stanje
0 = nije se desila promjena ni na jednom pinu

INTF (INT External Interrupt Flag) – bit koji nam govori da e došlo do vanjskog prekida
1 = prekid se desio
0 = prekid se nije desio

T0IF (TMR0 Overflow Interrupt Flag) – bit koji nam govori da je došlo do prekoračenja TMR0 brojača
1 = došlo je do prekoračenja
0 = nije došlo do prekoračenja

RBIE (RB Port Change Interrupt Enable) – bit koji omogućava pojavu prekida na promjenu stanja 4, 5,
6 ili 7-og pina porta B
1 = omogućena pojava prekida
0 = onemogućena pojava prekida

INTE (INT External Interrupt Enable) – bit koji omogućuje vanjski prekid sa pina RB0/INT
1 = prekid je omogućen
0 = prekid je onemogućen

47
T0IE (TMR0 Overflow Interrupt Enable) – bit koji omogućuje prekid prilikom prekoračenja brojača
TMR0
1 = prekid je omogućen
0 = prekid je onemogućen

EEIE (EEPROM Write Complete Interrupt Enable) – bit koji omogućava prekid nakon završetka upisa
u EEPROM memoriju
1 = prekid je omogućen
0 = prekid je onemogućen

GIE (Global Interrupt Enable) – bit koji dozvoljava ili zabranjuje sve prekide
1 = svi prekidi su omogućeni
0 = svi prekidi su onemogućeni

4.11 Podatkovna EEPROM memorija

PIC 16F84 ima 64 bayt-a EEPROM memorijskih lokacija na adresama od 00h do 63h. Najvažnija
osobina ove memorije je da ne gubi sadržaj prilikom nestanka napona napajanja. Stoga ova memorija
služi za čuvanje parametaranekog procesa ili nekih važnih promjenjivih podataka.
Iz EEPROM memorije čitamo podatak tako da setiramo RD bit koji inicira prijenos podataka s
adrese koja se nalazi u registru EEADR u EEDATA registar. Za čitanje podatka nije potrebno neko
vrijeme kao za upis pa se taj podatak može koristiti već u sljedećoj instrukciji.

Primjer djela programa koji vrši čitanje podataka iz EEPROM-a.

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

48
EEPROM memoriji se pristupa preko SFR registara, a to su:

EEDAT A – sadrži podatak koji je pročitan ili ga treba upisati


EEADR – sadrži adresu EEPROM lokacije kojoj se pristupa
EECON1 – sadrži kontrolne bit-ove
EECON2 – služi da zaštiti EEPROM od slučajnog upisa

4.11.1 EECON1 registar

Bit-ovi 5, 6 i 7 se ne koriste i pri čitanju su uvijek nule.

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

EETE WRERR WREN WR RD


bit 7 bit 0

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

RD (Read Control) – bit koji inicira prijenos podataka s adrese definirane EEADR u EEDATA registar
1 = inicira čitanje
0 = ne inicira čitanje

WR (Write Control) – bit koji inicira upis podataka iz EEDATA registra na adresu koja se nalazi u
EEADR registru
1 = inicira upis
0 = ne inicira upis

WREN (EEPROM Write Enable) – bit koji omogućuje upis u EEPROM memoriju
1 = upis je dozvoljen
0 = upis nije dozvoljen

WRERR (EEPROM Error Flag) – bit koji nam govori da je došlo do greške prilikom upisa u EEPROM
1 = došlo je do greške
0 = do greške nije došlo

EEIF (EEPROM Write Operation Interrupt Flag) – bit koji nam govori da je upis u EEPROM završen
1 = upis je završen
0 = upis nije počeo ili nije završen

4.12 Slobodni brojač TMR0

Fizički brojač je registar čija se vrijednost stalno uvećava za jedan a kad dođe do 255 kreće sa
brojanjem ponovno od nule. PIC16F84 ima 8 bit-ni brojač, broj bitova određuje do koliko će brojač
8
brojati (2 = 256). Brojač nam omogućuje da mjerimo vrijeme, ako znamo vrijeme koje je potrebno
brojaču da napravi puni krug od 0 do 256 tada lako možemo izračunati vrijeme koje je proteklo za bilo
koje stanje brojača. Na slici 2.2. je prikazana pojednostavljena shema odnosa preskalera i brojača.
Nakon svakog prelaska brojača s 255 na 0 setira se bit T0IF u INTCON registru. Ako je dozvoljen
prekid, ovo se može iskoristiti za generiranje prekida. T0IF bit mora programer resetirat da bi
omogućio generiranje novog prekida. Stanje brojača može se uvećavati korištenjem unutarnjeg takta
ili vanjskog koji se uzima s nožice RA4/TOCKI. Izvor takta se bira pomoću bit-a T0CS u OPTION
registru. Izaberemo li vanjski takt tada je moguće birati i ivicu signala (rastuća ili padajuća) na koju će
brojač uvećavati svoju vrijednost.

49
Sigurnosni brojač (Wachdog timer) čuva mikrokontroler od ″smrzavanja″. Ako dođe do nepravilnog
rada mikrokontrolera, sigurnosni brojač ga nakon nekog vremena resetira, a program se počinje
izvršavati iz početka. Da bi spriječili resetiranje za vrijeme normalnog toka programa moramo upisati
nulu u WDT registar (instrukcijom CLRWDT) svaki put kad se približi svom prekoračenju.
Preskaler je naziv za dio mikrokontrolera kojim se dijeli instrukcijski ciklus prije nego dođe do
logike koja uvećava stanje brojača. Broj kojim se dijeli instrukcijski ciklus se definira pomoću prva tri
bit-a u OPTION registru, najveći djelitelj je 256, čime se omogućuje mjerenje duljih vremenskih
perioda. Preskaler se može pridružiti brojaču TMR0 ili sigurnosnom brojaču, dodjeljuje se pomoću bita
PSA u OPTION registru. Kada je preskaler dodijeljen TMR0 brojaču sve instrukcije upisa u TMR0
registar (CLRF TMR0, MOVWF TMR0, BSF TMR0…) će obrisati preskaler. Ako je preskaler dodijeljen
sigurnosnom brojaču samo instrukcija CLRWDT će obrisati preskaler u isto vrijeme kada i sigurnosni
brojač. Promjena preskalera je kompletno pod kontrolom programera i može se mijenjati u toku rada
programa.

4.12.1 OPTION registar

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

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0


bit 7 bit 0

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

PS0, PS1, PS2 (Prescaler Rate Select) – bit-ovi koji definiraju faktor djeljenja preskalera

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

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

PSA (Prescaler Assignment) – bit koji vrši dodjelu preskalera


1 = preskaler je dodijeljen WDT brojaču
0 = preskaler je dodijeljen TMR0 brojaču

T0SE (TMR0 Sorce Edge Select) – bit kojim se bira brid signala za okidanje brojača TMR0
1 = padajući brid
0 = rastući brid

T0CS (TMR0 Clock Source Select) – bit kojim se bira izvor taka za TMR0
1 = vanjski preko RA4/TOCKI nožice
0 = interni takt (¼ takta oscilatora)

INTEDG (Interrupt Edge Select) – bit kojim se bira brid signala na koji se pojavljuje vanjski prekid s
nožice RB0/INT
1 = rastući brid
0 = padajući brid

RBPU (PORB Pull-up Enable) – bit koji uključuje ili isključuje pull-up tranzistore
1 = uključeni
0 = isključeni

51
5 Set instrukcija

5.1 Prijenos podataka

Vrši se između radnog registra (W) i ″f″ registra koji predstavlja bilo koju lokaciju RAM-a (Sl. 3.23).
Prve tri instrukcije iz tablice (na strani 63) osiguravaju upis konstante u W registar (MOVLW je
skraćenica od MOVE Literal to W), zatim prijepis podataka iz W registra u RAM i prijepis podataka iz
RAM-a u W registar (ili u istu tu lokaciju RAM-a, pri čemu se mijenja stanje zastavice Z). Instrukcija
CLRF upisuje nulu u f registar, a CLRW upisuje nulu u W registar. SWAPF instrukcija unakrsno
zamjeni mjesta četverobitnim poljima unutar registra.

5.2 Aritmetika i logika

Od svih aritmetičkih operacija PIC kao i većina mikrokontrolera podržava samo zbrajanje i
oduzimanje. Zastavice C, DC i Z postavljaju se u ovisnosti rezultata te dvije operacije, ali sa izuzetkom
jer se oduzimanje vrši kao zbrajanje s negativnom vrijednošću, zastavica C je poslije oduzimanja
inverzna, znači setirana je ako je operacija moguća, a resetirana ako je veći broj oduzet od manjeg.
Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI, EX-ILI, negacije (COMF) i
rotiranja (RLF i RRF). Instrukcije koje rotiraju lijevo ili desno pomiču bitove kroz zastavicu C za po
jedno mjesto. Bit koji izlazi iz registra upisuje se u C zastavicu, te se upisuje u bit na suprotnoj strani
registra.

5.3 Bit operacije

Instrukcije BCF i BSF vrše setiranje ili resetiranje jednog bit-a bilo gdje u memoriji (tablica na
strani 63).

5.4 Upravljanje tokom programa

Za upravljanje toka programa nam služe instrukcije GOTO, CALL, RETURN. ''RETLW k''
instrukcija je identična RETURN instrukciji, samo što prije povratka iz podprograma u W registar upiše
konstantu koja je definirana operandom instrukcije. Ova funkcija nam omogućuje kreiranje Lookup
tabela. Instrukcija RETFIE služi za povratak iz podprograma a razlikuje se od RETURN po tome što
automatski setira bit GIE. BTFSC i BTFSS su uvjetne naredbe skoka, u zavisnosti od bit-a koji se
testira u ''f'' registru preskače se ili se ne preskače sljedeća naredba programa.

52
Trajanje Utječe na
u strojnim STATUS
Instrukcija Opis ciklusima 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 1(2) nijedan
instrukciju ako je rezultat 1
incf f, d Povećanje registra f za 1 1 Z
incfsz f, d Povećanje registra f za 1, preskače sljedeću 1(2) nijedan
instrukciju ako je rezultat 0
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
5.4.1.1.1 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 Preskače sljedeću instrukciju ako je rezultat 0 1(2) nijedan
btfss f, b 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 2 nijedan
akumulatoru
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

Tablica instrukcija za mikrokontroler PIC 16F84

53
5.5 Opis pojedinih instrukcija

ADDLW
Sintaksa: [labela] ADDLW k
Opis: Sadržaj W registra se zbraja s 8 bit-nom konstantom k i Rezultat se sprema u
W registar
Operacija: (W) + k Î W
Operand: 0 ≤ k ≤ 255
Zastavica: C, DC, Z
Broj riječi: 1
Broj ciklusa: 1

Primjer:
ADDLW 0X15

Prije instrukcije: 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

ANDLW

Sintaksa: [labela] ANDLW k


Opis: Vrši logičku operaciju I nad sadržajem W registra i konstante k, rezultat će bit
1 ako su oba odgovarajuća bit-a operanda 1-inice.
Rezultat se smješta u W registar.
Operacija: (W) .AND. k Î W
Operand: 0 ≤ k ≤ 255
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

54
Primjer 1:
ANDLW 0x5F

Prije instrukcije: 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)

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)

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 ;1100 0111 (0xC7)


Poslije instrukcije: REG = 0x47 ;0100 0111 (0x47)

55
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

BTFSC

Sintaksa: [labela] BTFSC f, b


Opis: Ako je bit b u registru f jednak 0-i onda se preskače sljedeća instrukcija. Ako
je bit b jednak nuli tokom izvršavanja tekuće instrukcije onemogućuje se
izvršavanje naredne i umjesto nje se izvršava NOP, čineći tekuću instrukciju
dvociklusnom.

Operacija: preskoči narednu instrukciju ako je ( f < b > ) = 0


Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7
Zastavica:
Broj riječi: 1
Broj ciklusa: 1 ili 2 u ovisnosti bit-a b

Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG
LAB_02. . . . . . ;Preskoči ovu liniju ako je = 1
LAB_03. . . . . . ;Ovdje skoči ako je = 0

Prije instrukcije: Programski brojač je bio na adresi LAB_01


Poslije instrukcije: Ako je u registru REG bit 1 resetiran, PC pokazuje na
adresu LAB_03. Ako je u registru bit 1 setiran PC pokazuje na adresu
LAB_02.

56
BTFSS

Sintaksa: [labela] BTFSS f, b


Opis: Ako je bit b u registru f jednak jedinici onda se preskače sljedeća instrukcija.
Ako je bit b jednak jedinici tokom izvršavanja tekuće instrukcije onemogućuje
se izvršavanje naredne i umjesto nje se izvršava NOP, čineći tekuću
instrukciju dvociklusnom.

Operacija: preskoči narednu instrukciju ako je ( f < b > ) = 1


Operand: 0 ≤ f ≤ 127 , 0 ≤ b ≤ 7
Zastavica:
Broj riječi: 1
Broj ciklusa: 1 ili 2 u ovisnosti bit-a b

Primjer:
LAB_01BTFSC REG, 1 ;Testiraj bit broj 1 u REG
LAB_02. . . . . . ;Preskoči ovu liniju ako je = 0
LAB_03. . . . . . ;Ovdje skoči ako je = 1

Prije instrukcije: Programski brojač je bio na adresi LAB_01


Poslije instrukcije: Ako je u registru REG bit 1 setiran, PC pokazuje na adresu
LAB_03. Ako je u registru bit 1 resetiran PC pokazuje na adresu LAB_02.

CALL

Sintaksa: [labela] CALL k


Opis: Instrukcija poziva podprogram. Prvo se povratna adresa (PC+1) sprema u stog,
zatim se 11 bit-ni direktni operand k koji sadrži adresu potprograma smješta u
PC.
Operacija: (PC) + 1 Î vrh stoga (TOS – Top Of Stack)
k Î PC <10 : 0>, (PCLATH <4 : 3>) Î PC <12 : 11>
Operand: 0 ≤ k ≤ 2047
Zastavica:
Broj riječi: 1
Broj ciklusa: 2

Primjer:
LAB_01CALL LAB_02 ;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

57
Primjer 2:
CLRF INDF

Prije instrukcije: FSR = 0xC2


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

CLRW

Sintaksa: [labela] CLRW


Opis: Sadržaj W registra se izjednačava s nulom, zastavica Z se setira u jedan.
Operacija: 0 Î W
Operand:
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer:
CLRW

Prije instrukcije: 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

COMF

Sintaksa: [labela] COMF f, d


Opis: Komplementira sadržaj f registra
Ako je d = w rezultat se sprema u W registar
Ako je d = f rezultat se sprema u f registar
Operacija: ( f ) Î d
Operand: 0 ≤ f ≤ 127 , d ∈ [0,1]
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

58
Primjer 1:
COMF REG, w

Prije instrukcije: 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

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

59
Primjer:
MOVLW .10
MOVWF CNT ;CNT = 10
Loop
: ;Blok naredbi
:
DECFSZ CNT, f ;Umanji sadržaj registra CNT 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.

GOTO

Sintaksa: [labela] GOTO k


Opis: Bezuvjetni skok na adresu k.
Operacija: k Î PC <10:0>, (PCLATH <4:3>) Î PC <12:11>
Operand: 0 ≤ k ≤ 2047
Zastavica:
Broj riječi: 1
Broj ciklusa: 2

Primjer:
LAB_00CALL LAB_01 ;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

60
INCFSZ

Sintaksa: [labela] INCFSZ f, d


Opis: Uvećava sadržaj f registar za jedan
Ako je d = w rezultat se sprema u W registar
Ako je d = f rezultat se sprema u f registar
Ako je rezultat = 0 naredna instrukcija se izvršava kao NOP čineći instrukciju
dvociklusnom.
Operacija: (f) + 1 Î d
Operand: 0 ≤ f ≤ 127, d ∈ [0,1]
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer:
LAB_01INCFSZ REG, f ;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. Ako je REG = 0,
tada PC pokazuje na adresu labele LAB_03. U suprotnom PC pokazuje adresu
naredne instrukcije LAB_02.

IORLW

Sintaksa: [labela] IORLW k


Opis: Vrši logičku operaciju ILI nad sadržajem registara W i 8 bit-nom konstantom k,
rezultat se sprema u W registar.
Operacija: (W) .OR. (k) Î W
Operand: 0 ≤ k ≤ 255
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer:
IORLW 0x35

Prije instrukcije: W = 0x9A


Poslije instrukcije: W = 0xBF
Z=0

IORWF

Sintaksa: [labela] IORWF f, d


Opis: Vrši logičku operaciju ILI nad sadržajem registara W i f
Ako je d = w rezultat se sprema u W registar
Ako je d = f rezultat se sprema u f registar
Operacija: (W) .OR. (f) Î d
Operand: 0 ≤ f ≤ 127, d ∈ [0,1]
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer 1:
IORWF REG, w

Prije instrukcije: REG = 0x13, W = 0x91


Poslije instrukcije: REG = 0x13, W = 0x93
Z=0

61
Primjer 2:
IORWF REG, f

Prije instrukcije: EG=0x13, W = 0x91


Poslije instrukcije: REG=0x93, W = 0x91
Z=0

MOVF

Sintaksa: [labela] MOVF f, d


Opis: Sadržaj f registra smješta na lokaciju koju određuje operand d
Ako je d = w rezultat se sprema u W registar
Ako je d = f rezultat se sprema u f registar
Operacija d = 1 se koristi za testiranje sadržaja f registra jer izvršavanje ove
instrukcije utječe na zastavicu Z.
Operacija: (f) Î d
Operand: 0 ≤ f ≤ 127, d ∈ [0,1]
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer 1:
MOVF FSR, w

Prije instrukcije: 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

62
MOVWF

Sintaksa: [labela] MOVWF f


Opis: Sadržaj f registra prepisuje se u f registar.
Operacija: (W) Î f
Operand: 0 ≤ f ≤ 127
Zastavica:
Broj riječi: 1
Broj ciklusa: 1

Primjer 1:
MOVWF OPTION_REG

Prije instrukcije: W = 0x40


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

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

63
RETLW

Sintaksa: [labela] RETLW k


Opis: 8 bit-na konstanta k se smješta u W registar a u PC vrijednost s vrha stoga.
Operacija: (k) Î W, TOS Î PC
Operand: 0 ≤ k ≤ 255
Zastavica:
Broj riječi: 1
Broj ciklusa: 2

Primjer:
RETLW 0x43

Prije instrukcije: W=x


PC = x
TOS = x
Poslije instrukcije: W = 0x43
PC = TOS
TOS = TOS – 1

RETURN

Sintaksa: [labela] RETURN


Opis: Sadržaj TOS-a smješta u PC
Operacija: TOS Î PC
Operand:
Zastavica:
Broj riječi: 1
Broj ciklusa: 2

Primjer:
RETURN

Prije instrukcije: 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

C registar 1

Primjer 1: RLF REG, w

Prije instrukcije: REG = 1110 0110


C=0
Poslije instrukcije: REG = 1110 0110
W = 1100 1100
C=1

64
Primjer 2: RLF REG, f

Prije instrukcije: REG = 1110 0110


C=0
Poslije instrukcije: REG = 1100 1100
C=1

RRF

Sintaksa: [labela] RRF f, d


Opis: Sadržaj f registra se rotira za jedno mjesto u desno.
Ako je d = w rezultat se sprema u W registar
Ako je d = f rezultat se sprema u f registar
Operacija: (f<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

C registar 1

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

SLEEP

Sintaksa: [labela] SLEEP


Opis: Postavlja mikrokontroler u mod niske potrošnje. Zaustavlja oscilator, PD se
resetira a TO setiran. Sigurnosni brojač i preskaler su resetirani.
Operacija: 0 Î WDT
0 Î WDT preskaler
1 Î TO
1 Î PD
Operand:
Zastavica: TO , PD
Broj riječi: 1
Broj ciklusa: 1

65
Primjer:
SLEEP

Prije instrukcije: 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

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

66
SWAPF

Sintaksa: [labela] SWAPF f, d


Opis: Gornja i donja polovica f registra mijenjaju mjesta.
Ako je d = w rezultat se sprema u W registar.
Ako je d = f rezultat se sprema u f registar.
Operacija: f<0:3> Î d<4:7>, f<4:7> Î d<0:3>
Operand: 0 ≤ f ≤ 127, d ∈ [0,1]
Zastavica:
Broj riječi: 1
Broj ciklusa: 1

Primjer 1:
SWAPF REG, w

Prije instrukcije: REG = 0xF3


Poslije instrukcije: REG = 0xF3
W = 0x3F

Primjer 2:
SWAPF REG, f

Prije instrukcije: REG = 0xF3


Poslije instrukcije: REG = 0x3F

XORLW
Sintaksa: [labela] XORLW k
Opis: Vrši logičku operaciju isključivo ILI nad sadržajem registara W i 8 bit-nom
konstantom k, rezultat se sprema u W registar.
Operacija: (W) .XOR. k Î W
Operand: 0 ≤ k ≤ 255
Zastavica: Z
Broj riječi: 1
Broj ciklusa: 1

Primjer 1:
XORLW 0xAF

Prije instrukcije: 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

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

68
6 Razvojni alati za PIC 16F84

6.1 Asembler

Asemblerski jezik je jezik kojim čovjek i mikrokontroler komuniciraju. Asemblerski jezik je razumljiv
čovjeku, sastoji se od riječi i abecednih znakova. No program napisan u asemblerskom jeziku mora se
prevesti u niz nula i jedinica da bi ga mikrokontroler razumio. Razlikujemo pojam «asembler» i
«asemblerski jezik». Asembler je program prevodilac koji prevodi asemblerski jezik u jezik nula i
jedinica, a asemblerski jezik je skup pravila po kojima se piše program za mikrokontroler.

Sl. 6.1. Postupak programiranja mikrokontrolera

Program.asm predstavlja datoteku na disku računala koja je napisana po pravilima asemblerskog


jezika, Program.hex je datoteka koja je prevedena u jezik nula i jedinica i to heksadecimalnim
zapisom, ta datoteka se pomoću programatora upisuje u mikrokontroler. Program se u asemblerskom
jeziku može pisati u bilo kojem programu za obradu teksta koji može spremiti datoteku kao ASCII.

Primjer: ovako izgleda naredba RETURN prevedena asemblerom, dobije se 14 bit-ni niz nula i
jedinica koji je razumljiv mikrokontroleru.

asm hex

RETURN 00 0010 0000 1000

6.1.1 Elementi programskog jezika asembler

Osnovni elementi su:

- Labele
- Naredbe
- Operandi
- Komentari
- Direktive

69
Labela predstavlja tekstualnu verziju neke adrese u programskoj ili RAM memoriji. Dužina labele
može biti najviše 32 znaka, bitno je da počinje slovom ili donjom crtom ″_″. Labele se pišu u prvoj
koloni.
Naredbe su definirane upotrebom određenog mikrokontrolera i pri pisanju programa treba samo
poštovati način njihove upotrebe.
Operandi su elementi naredbi nad kojima se izvršava naredba. To su najčešće registri ,
promjenjive vrijednosti ili konstantne u memoriji.
Komentar je tekst koji programer piše nakon naredbe iz znaka ″ ; ″ da bi program bio jasniji i
pregledniji.
Direktiva je slična naredbi, ali je nezavisna od modela mikrokontrolera i predstavlja posebnost
samog asemblerskog jezika.
Direktiva koju ćemo koristiti glasi:

PROCESOR 16f84
#include ''p16f84.inc''
__CONFIG_CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

70
7 MPLAB IDE v6.60

7.1 MPLAB IDE

MPLAB IDE (Integrated Development Environment) je integrirano razvojno okruženje za pisanje i


® TM
razvoj programa Microchip-ovih PICmicro MCU porodice mikrokontrolera i dsPIC Digital Signal
Controllers. Sa MPLAB razvojnim okruženjem možemo:

• Izraditi i editirati izvorni kôd koristeći ugrađen (build-in) editor.


• Asemblirati, kompajlirati i povezivati izvorni kôd.
• Ispravljati završnu logiku tako da pratimo izvršavanje tijeka programa koristeći ugrađeni(build-in)
simulator ili u realnom vremenu sa emulatorima MPLAB ICE 2000 i 4000 ili sa MPLAB ICD 2
internim (in-circuit) pronalazačem grešaka (debagger).
• Vršiti vremenska mjerenje koristeći simulator ili emulator.
• Prikaz varijabli preko Prozora za gledanje (Watch windows).
® ®
• Programiranje firmware-a na uređaje koristeći MPLAB ICD 2, PICSTART Plus ili PRO MATE II
programatore uređaja.
• Velika podrška za pitanja preko MPLAB IDE pomoći (Help).

7.2 Zahtjevi sustava

Potrebna je sljedeća minimalna konfiguracija za rad MPLAB-a IDE:

• PC kompatibilno računalo
• Microsoft Windows 98 SE, Windows 2000 SP2, Windows NT SP6, Windows ME, Windows XP
• 64 MB radne memorije (128MB preporučeno)
• 45 MB slobodnog prostora na tvrdom disku
• Internet Explorer 5.0 ili noviji

7.3 Izrada jednostavnog projekta

7.3.1 Uvod

Da bi napravili kôd koji se može izvršavati koristeći ciljani PICmicro MCU mikrokontroler, izvorni
kôd se treba staviti unutar projekta i tada se kôd izgrađuje koristeći selektirane alate za prevođenje
(language tools): asemblere, kompajlere, itd.U MPLAB-u IDE, projekt menadžer se brine o tim
procesima.
Prvi korak je pisanje vrlo kratkog izvornog kôda koji spremamo u određenu datoteku. Tada
izrađujemo projekt, dodajemo izvorni kôd projektu, alati za prevođenje(language tools) kôda se
dodjeljuju projektu, i napokon kôd je izgrađen i testiran.
Pri pokretanju programa na ekranu će se pojaviti MPLAB IDE radna površina (desktop).

7.3.2 Pisanje izvornog koda

Krenite sa pisanjem kôda za aplikaciju koristeći MPLAB IDE editor. Odaberite File>New .U
radnom prostoru će se otvoriti prazan prozor za editiranje, pisanje. Unesite ovaj primjer gotovog kôda.
Preporuka Copy/Paste.

71
title "PIC16F877 brojac"
PROCESSOR 16F877
#include <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.

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

2. Odaberite PIC16F877 sa samo-padajućeg Device izbornika. To će biti PIC mikrokontroler


korišten u ovoj demonstraciji. Za sljedeći korak Čarobnjaka pritisnite Next (slika 3).

73
Slika 3.

3. Potvrdite lokaciju Microchip Toolsuite-a.


Pritisnite na MPASM Assembler (maasmwin.exe). Puna adresa od MPASM Assembler.exe
bi se trebala prikazati u polju Location of Selected Tool kao što je prikazano na slici. Ako je
netočna ili je prazna, pritisnite Browse za lociranjem mpasmwin.exe. Ako je MPLAB
instaliran u izvorni (default) direktorij, adresa bi se trebala prikazati kao na slici 4. Za sljedeći
korak Čarobnjaka pritisnite Next.

Slika 4.

4. Unesite ime projekta. Radi ove demonstracije, nazovite ga Brojac i pritisnite Browse da bi
odabrali projektni direktorij koji smo napravili ranije da bi spremili izvorni kôd, C:\Projekti (slika
5.)

74
Slika 5.

5. Pritisnite Next. Sada trebamo dodati postojeće datoteke vašem projektu. Pronađite mapu
C:\Projekti i odaberite brojac16f877.asm (Slika 6.).

Slika 6.

6. Pritisnite Add>> tipku da bi brojac16f84.asm dodijelili projektu. To je jedina datoteka koja je


potrebna za stvaranje projekta (sa iznimkom P16F877.H datoteke koja je «sadržana» u
brojac16f877.asm, i nije ju potrebno dodavati).

75
Slika 7.

7. Pritisnite Next za nastavak i dovršenje izrade Čarobnjaka. U ovom finalnom prozoru možemo
vidjeti i provjeriti parametre ovog projekta.

Slika 8.

8. Pritisnite Finish i završite Čarobnjak.

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

Slika 9.

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

77
Nakon uspješne izgradnje projekta generira se, alatima za prevođenje, izlazne datoteke. Te
datoteke sadrže objektni kôd koji se može upisati u PICmicro mikrokontrolere i informacije (debugging
information) koje služe za ispravljanje izvornog kôda i simbolično gledanje varijabla kôda preko
prozora za gledanje(Watch windows).

Važno: Generirana datoteka.HEX se sada može otvoriti u programu IC-Prog i upisati na PIC
16F877.

Bilješka: Velika korist od projekta se najviše vidi kada je mnogo datoteka koje se trebaju
kompajlirat\asemblirat i povezat da bi činile izvršnu aplikaciju – kao u stvarnim
aplikacijama. Projekti sve to prate. Opcije za izgradnju(build options), se mogu
namještati za svaku datoteku od koje svaka može pristupati drugim pogodnostima
alata za prevođenje(language tools), kao što su izlazna izvješća i optimizacija
kompajlera.

7.3.5 Pokretanje simulatora

Sada kad je projekt izgrađen, trebamo provjeriti da li funkcionira. Da bi to učinili trebamo odabrati
alat za pronalaženje pogrešaka (debug tool). To može biti hardwerski ili softwerski alat za inspekciju
kôda poslije izvršenja programa (u ovom slučaju brojac16f877.asm). U ovom vodiču ćemo koristiti
MPLAB SIM simulator.
Simulator je softwerski program koji radi na PC-u i simulira instrukcije od PICmicro
mikrokontrolera. Simulator ne radi u «realnom vremenu», zato što simulatorski program ovisi o brzini
PC-a, kompleksnosti koda, preljevom (overhead) operativnog sustava i koliko drugih zadaća (tasks)
obavlja. Ipak, simulator precizno mjeri vrijeme koje je potrebno da se kôd izvrši kao da radi u realnom
vremenu i u aplikaciji.

Bilješka: Ostali pronalazači pogreška (debuggers) sadrže MPLAB ICE 2000, MPLAB ICE 4000
i MPLAB ICD2. To su opcionalni hardwerski alati za testiranje kôda na PC platformi.
Većina operacija od MPLAB IDE alata za pronalaženje pogreški su iste kao i od
simulatora, ali za razliku od simulatora, ovi alati dozvoljavaju da ciljani PIC
mikrokontroler radi pri punoj brzini u stvarnoj ciljanoj aplikaciji.

Odaberite MPLAB SIM simulator, kao alat za pronalaženje pogreški, selektiranjem


Debugger>Select Tool>MPLAB SIM (slika 11).

Slika 11.

Poslije odabira MPLAB SIM, vidjet ćemo sljedeće promjene (vidi pripadajuće brojeve na slici 12).

1. Statusna traka (status bar) na dnu MPLAB IDE prozora će se promijeniti na «MPLAB SIM».
2. Dodatne meni opcije bi se trebale pojaviti u Debugger meniju.
3. Dodatne alatne ikone bi se trebale pojaviti koje služe za ispravljanje pogreški u kôdu
(Debugger Tool Bar).

78
Slika12.

7.3.6 Provjera rada aplikacije

Aplikacija je spremna za pokretanje. Na alatnoj traci će se pojaviti sljedeće ikone prečaca


Debugger menija:

Run
Halt
Animate
Step into

Reset

Sve te akcije služe za pregledavanje i ispitivanje ispravnosti kôda zajedno sa specijalnim


prozorima za gledanje kao što su File Reisters, Watch, Special Function registers i dr.
U prozorima se mogu pratiti promjene u registrima tijekom izvršavanja programa. Prozorima se
mogu pristupiti preko View menija. U nastavku teksta će biti objašnjeni.

7.3.6.1 Pokretanje kôda

Prvo odaberite Debugger>Reset (ili ikonu na alatnoj traci). Trebala bi se pojaviti zelena
strelica na lijevoj strani prozora izvornog kôda, pokazujući na prvu liniju izvornog kôda koja bi se
trebala izvršiti.

79
Slika13a.

Odaberite Debugger>Run (ili ikonu ) da bi pokrenuli aplikaciju. Tekstualna poruka «Running…»


će se pojaviti na statusnoj traci(status bar).

Da bi zaustavili izvršenje programa, selektirajte Debegger>Halt (ili ikonu ). 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.

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

7.3.6.2 Praćenje varijabli

Vrijednosti varijabla se mogu vidjeti u svakom trenutku tako da postavimo kursor miša iznad
imena varijable bilo gdje u izvornom kôdu. Pojavit će se mali prozorčić sa trenutnom vrijednošću
varijable.

Slika 14.

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

81
Slika 15.

Tri simbola bi se trebala nalaziti u prozoru za gledanje. Prva je ispisana adresa File registra, slijedi
ime simbola konačno vrijednost simbola. Korisnici mogu gledati kako se vrijednosti simbola mijenjaju
pri kretanju kroz program korak po korak.

1. Selektiraj Debugger>Reset i resetiraj aplikaciju.


2. Selektiraj Debugger>Step Into (ili klikni na odgovarajuću ikonu na alatnoj traci) dok ne dođete
do sljedeće programske linije:
incf COUNT,F ; uvećaj registar COUNT za 1
3. Koraknite još jednom i vidite da se vrijednost od COUNT u prozoru za gledanje promijenila iz 0
u 1.
4. Krenite dva koraka da bi vidjeli kako se vrijednost PORTB u prozoru za gledanje promijenila
iz 0 u 1.
5. Krenite još četiri koraka da bi vidjeli kako se vrijednost od DVAR u prozoru za gledanje
promijenila u FF. Možete primijetiti kako su vrijednosti u prozoru za gledanje crvene boje ako
su ih promijenile prethodne operacije izvršavanja, a crne boje ako ih nisu mijenjale prethodne
operacije izvršavanja.

Vidi sliku 16.

Slika 16.

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

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.

83
7.3.6.5 Prozor File registra (File Register)

Selektiranjem View>4 File Registers otvorit ćemo prozor za gledanje File registra (slika 19.).

Slika 19.

On pokazuje sve vrijednosti na adresama File registra. Pritiskom na tabular Symbolic (označen
crvenom bojom) dobit ćemo simbolični prikaz koji je razumljiviji (slika 20.).
Registri su sortirani po adresama. U ovom prozoru također možemo upisivati vrijednosti u registre
kao što je opisano u poglavlju 3.6.5.

Slika 20.

84
7.3.6.6 Upisivanje vrijednosti registara preko prozora

Preko ovog prozora, osim gledanja, možemo upisivati vrijednosti u registre. To možemo na dva
načina:

1. Dođemo do polja u koji ćemo upisati vrijednost i pritskom na Enter (na tipkovnici), ili
dvostrukim lijevim klikom miša, možemo upisati neku vrijednost.
2. Drugi način je da pritiskom desnog klika miša iznad određenog polja, kad se pojavi meni,
odaberemo opciju Fill Registers … .Pojavit će se prozor kao na slici 18.

Slika 18.

Tu određujemo od koje do koje adrese ćemo upisivati vrijednosti i koju vrijednost.

7.3.6.7 Simuliranje rada priključka (pinova) (Stimulus Controller)

Simuliranje pinova je korisna simulatorska opcija, posebice kad nam je u programu potrebno
izazvati prekid preko npr. RB0 pina ili kad su nam određeni portovi definirani kao ulazni i onda želimo
na njih dovesti odgovarajuće poticaje, da bi vidjeli kako naš program reagira na njih.
Selektirajte Debugger>Stimulus Controller . U prozoru koji se pojavio, pod tabularom Pin
Stimulus, pritisnite Add Row. Prikazat će nam se prozor kao na slici 21.

Slika 21.

85
Pod stupcem Type, pritiskom na polje Asynch, odabiremo sinkroni ili asinkroni oblik poticaja. Ako
odaberemo asinkroni oblik poticaja Asynch možemo odabrati koji pin želimo stimulirati (pod Pin
stupcem) i oblik akcije (stupac Action).

Slika 22.

Akcije:

• High - logička jedinica


• Low - logička nula
• Toggle - izmjenjivanje pri svakom pritiskom na Fire između logičke jedinice i nule
• Pulse - impulsni poticaj logičke jedinice

Pri završetku uređivanja pritisnite Edit Complete. Prilikom prolaska kroz kôd akcijama Step Into ili
Animate, stimulacija pina će se obaviti pritiskom na tipku Fire. Ako odaberemo sinkroni oblik poticaja
dobit ćemo poticaj u obliku takta.

Slika 23.

86
7.3.6.8 Postavljanje točaka za prekid (Setting Breakpoints)

Točke za prekid koristimo kada želimo da nam se kôd kreće do određene lokacije i tada zaustavi.
To se ostvaruje ovako:

1. Selektirajte Debugger>Reset i resetirajte aplikaciju.


2. Pronađite sljedeću liniju kôda i desnim klikom miša kliknite na nju:

movlw 0xFF ;vremensko trajanje petlje

3. Iz menija koji se pojavio nakon desnog klika miša, selektirajte Set Break Poin . Stop znak bi se
trebao pojaviti na lijevoj margini pokraj te linije kôda (slika 21.).

Slika 21.

4. Selektirajte Debugger>Run da bi startali aplikaciju. Trebala bi kratko raditi i zaustaviti se kod


linije gdje je postavljena za točka za prekid.

Slika 22.

Bilješka: Nakon zaustavljanja kod točke za prekid, zgodan način za kretanje do neke lokacije u
kôdu je da stavimo kursor na bilo koju instrukciju u kôdu i pritiskom desnog klika miša
odaberemo Run to Cursor. Trajna točka za prekid nije dodana toj liniji i simbol točke
za prekid se neće vidjeti – samo će se strelica kretati do te linije. Ako se ta instrukcija
slučajno neće nikad izvršiti, aplikacija će nastaviti raditi sve dok ne selektiramo
Debugger>Halt.

87
7.3.6.9 Praćenje kôda (Tracing Code)

Simulirano praćenje može se koristiti za snimanje izvršenja kôda. Ponekad je bolje, da umjesto
kretanja kroz linije kôda korak po korak, kôd snimimo u akciji. Omogućimo simulirano praćenje tako da
selektiramo Debugger>Settings i odaberemo «Trace/Pins» tabular.

Slika 23.

U Trace Option području se nalaze dvije kućice koje se mogu potvrditi kvačicom, a one
kontroliraju kakav ćemo dosje dobit simuliranim praćenjem. Kada je gornja kućica potvrđena,
simulator skuplja podatke kada simulator radi u «Run» modu. On skuplja podatke sve dok nije
zaustavljen točkom za prekid ili «ručno». On će ispisati posljednjih 8192 ciklusa. Ovaj mod je vrlo
koristan jer možemo vidjeti zapise instrukcija koje su izvršene do točke za prekid.
Ako potvrdimo i drugu kućicu, tada će memorija za praćenje skupiti 8192 ciklusa i prestati
skupljati, a aplikacija će biti zaustavljena na točki za prekid. Ovaj mod je koristan da bi vidjeli zapise
instrukcija nakon pritiska Run.
Selektirajte View>Simulator Trace (slika 20). Simulator praćenja ne prikazuje samo sekvencu
izvršene instrukcije nego i druge informacije. Prikazuje još vremensku bazu da svaki ciklus. Podaci
koji se čitaju ili upisuju u File registar će biti uhvaćeni i prikazani u SA, SD, DA i DD stupcima kao što
se vidi na slici 24.

Slika 24.

88
• Line - pokazuje brojeve ciklusa
• Addr - adresa programskog brojila (Program Counter)
• Op - vrijednost instrukcije strojnog kôda
• Label - prikazuje svaku labelu simbolično
• Instruction - prevedenu instrukciju (disassembled instruction)

Sljedeća četiri stupca prikazuju vrijednosti podataka koje se upisuju i čitaju u File registre:

• SA - adresa registra za operaciju čitaj (Source Address)


• SD - podatak pročitan sa registra (Source Data)
• DA - adresa registra za operaciju piši (Destination Address)
• DD - podatak upisan u registar (Destination Data)

Ako je koje polje označeno crticama to znači da pri toj instrukciju nije korišten taj registar.

• Cycles - pokazuje vremensku bazu za svaki ciklus. Može se koristiti za mjerenje vremena
koje je potrebno da se izvrši rutina. Vrijeme se računa na bazi frekvencije unesene u
Debugger>Settings , tabular Clock.

89
8 Programiranje mikrokontrolera PIC 16F877

8.1 Uvod

Programiranje mikrokontrolera 16F877, koji se nalazi na Easy-PIC razvojnom sustavu, se radi


preko programa IC-Prog.

Easy-PIC
• Sustav podržava 8, 18, 28 i 40 pinske mikrokontrolere (isporučuje se sa PIC16F877)
• Na ploči je jasno označen svaki kratkospojnik, element ili pin cime je znatno olakšan rad.
• Na sustavu je moguće isprobati većinu industrijskih potreba: temperaturne kontrolere, brojače,
tajmere...
• Primjeri asembleru cine sam početak rada vrlo efikasnim.

IC-Prog
Programski paket koji koristimo za programiranje mikrokontrolera. Program se nalazi na CD-u, ali
preporučamo da se «skine» novija verzija sa Interneta.

http://www.ic-prog.com/index1.htm pod Download .

Napomena: Korisnici Windows NT/2000/XP operativnog sustava morat će još «skinuti» datoteku
icprog.sys i kopirati je u istu mapu gdje i icprog.exe.

8.2 Instalacija sustava pri programiranju programskim paketom IC-PROG

Kratkospojnici (Jumperi) JP3, JP4 i JP5 MORAJU biti postavljeni!

Postupak (uz sliku 1.):

1. Prvo što treba uraditi je priključivanje sustava preko serijskog kabla na računalo. Na računalu
mora biti slobodan jedan COM port (najvjerojatnije COM 1 kod novijih računala ili COM2 kod
starijih modela) na kojeg se priključuje serijski kabel iz kompleta.
2. Sljedeći korak je priključivanje napajanja. Napajanje može biti i istosmjerno i izmjenično već
prema izboru od 9 do 12 Volti.
3. Kopirati ICprog.exe sa CD-a na tvrdi disk računala. Najbolje je napraviti mapu PIC i u njemu
posebnu mapu ICPROG čime će sve biti preglednije. (npr. C:\PIC\ICPROG ). Kopiranjem
programa u spomenutu mapu je završena njegova instalacija. Kopirajte datoteku icprog.sys u
mapu ako koristite Windows NT/2000/XP.

90
Slika 1.

8.3 Programiranje mikrokontrolera programskim paketom IC-PROG

(korišten IC-Prog verzija 1.05C)

1. Pokrenite IC-prog. Ukoliko je to prvo pokretanje ICPROG-a na računalu, pojavit će se prozor


kao na slici 2.

Slika 2.

91
Potrebno je definirati hardwer preko kojeg se mikrokontroler na ploči programira. Kako je na ploči
ugrađen JDM programator njega treba odabrati.
Opcija PORTS se bira na osnovu slobodnog porta na računalu korisnika. Obično je slobodan
COM1 , pa njega i treba selektirati. Pritisnite OK.

Slika 3.

Pojavit će se IC-Prog sučelje kao na slici 3.


Do opcije Hardware setting možemo doći selektiranjem Settings>Hardware, ako želimo nešto
naknadno promijeniti.

VAŽNO: Korisnici Windows NT/2000/XP OS moraju još namjestiti dodatne parametre za


normalan rad. Selektirajte Settings>Options i u tabularu Misc potvrdite prazni
prozorčić kod opcije Enable NT/2000/XP Driver kao na slici 4. Pritisnite OK.

Slika 4.

Program će se restartati i promjene će postati važeće.

92
2. Kada se definira hardwer, sljedeći korak je odabir mikrokontrolera koji ćemo programirati.
Klikom na Settings > Device> Mikrocip PIC bira se mikrokontroler PIC16F877 koji se koristi na
razvojnom sustavu PIC-easy kao na slici 5.

Slika 5.

3. Sljedeći korak je učitavanje HEX datoteke (mikrokontroler prima program u toj formi).
Selektirajte ikonicu Open (ili preko odabira File>Open) i pojavit će nam se prozor za
traženje i odabir datoteke (slika 6.).

Slika 6.

Učitavanje programa se vrši klikom miša na odgovarajuću datoteku (ime_datoteke.hex) i pritisnite


Open . Učitani program se pojavljuje u spremniku (buffer) i spreman je za prijenos u mikrokontroler.

Napomena: HEX datoteku pravi bilo koji asemblerski, BASIC ili C kompajler.

93
4. ISP prekidač na razvojnom sustavu prebaciti u položaj za upisivanje/programiranje (u modu
za upisivanje svijetli dioda PROGRAM MODE ON).

Slika 7.

5. Klikom na ikonu koja se nalazi na sredini alatne trake počinje programiranje


mikrokontrolera. Drugi način je da selektiramo sa menija Command>Program All (slika 8.)

Slika 8.

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

Slika 9.

6. Nakon što je programiranje završeno isključiti prekidač ISP (gornji desni ugao razvojnog
sustava), kao što je prikazano na slici ispod.

Slika 10.

Napomena: Ne treba vaditi serijski kabel iz konektora za programiranje, što je od velike


pomoći prilikom čestog programiranja!

95
9 Opis razvojnog sustava

9.1 Napajanje

Slika 11.

Za ispravan rad svih elemenata na razvojnom sustavu potrebno je osigurati stabilnih +5V. Kod
PIC-Easy sustava, to je postignuto upotrebom naponskog stabilizatora LM7805. Zbog povećane
disipacije do koje dolazi pri većem opterećenju, stabilizator je postavljen na odgovarajući hladnjak.

Slika 12.

9.2 Led diode

Sustav ima 32 diode koje su povezane na pinove porta A, B, C, D i E. Ove diode se obično koriste
u prvobitnoj fazi rada, ali i kasnije za indikacije dešavanja u programu. Svaka grupa dioda se
uključuje/isključuje preko prekidača SW3. Način povezivanja LED dioda sa mikrokontrolerom prikazan
je na narednoj slici.

Napomena: LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu
imati logičku nulu da bi dioda svjetlila.

96
Slika 13.

Slika 14.

9.3 Tipkala

Sustav posjeduje jedano RESET tipkalo i 24 tipkala za simuliranje komandnih ulaza sustava koji
su povezani na pinove RE0, RE1 i portove A, B i C. Shematski prikaz veze tipkala i mikrokontrolera
dat je na sljedećoj slici.

97
Slika 15.

Oznaka iznad svakog predstavlja naziv pina na koji je odgovarajuće tipkalo priključeno. Da bi se
tipkalo koristilo odgovarajući pin portova A, B, C i/ili E mora se definirati kao ulazni. Kratkospojnikom u
lijevom donjem kutu razvojnog sustava definira se da li je prilikom aktiviranja tipkala vrijednost
odgovarajućeg pina 5V ili 0V. Ako je kratkospojnik u gornjem položaju, onda će se prilikom aktiviranja
izvjesnog tipkala na odgovarajući pin doći logička jedinica, a ako je u donjem položaju logička nula.

Slika 16.

9.4 LCD zaslon (display)

Predviđen je klasičan LCD zaslon sa 2x16 karaktera. Ipak, to nije ograničenje jer se može koristiti
bilo koji zaslon koji ima isti tip komunikacije sa mikrokontrolerom.
Kontrast zaslona se regulira potenciometrom u donjem lijevom kutu razvojnog sustava. LCD
zaslon se može priključiti ili na port B ili na port D. Naredna slika prikazuje shemu povezivanja LCD-a
na port D i port B mikrokontrolera PIC16F877. Ako su pinovi LCD zaslona sa donje strane, korisnik
treba da zalemi kontakt letvicu na mjestu odgovarajućeg porta u dnu razvojnog sustava, u okviru
pravokutnika predviđenim za LCD zaslon!!!.

98
Slika 17.

Slika 18.

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

9.5 Sedamsegmentni zaslon

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

99
Slika 19.

Slika 20.

9.6 Analogno-digitalni pretvarač (A/D converter)

Mikrokontroler PIC16F877 koji se koristi na razvojnom sustavu, u sebi ima implementirane 10


bitne A/D pretvarače. U svrhu prezentacije izdvojena su dva pina RA2 i RA3 sa kojih se mogu
očitavati analogne vrijednosti napona koji se određuju potenciometrima P2 i P3.

100
Slika 21.

Ukoliko se želi očitavanje vrijednosti potenciometra P2 neophodno je staviti kratkospojnik iznad


odgovarajućeg potenciometra. Prekidač na RA2 na SW1 mora biti isključen (donji položaj). Primjer na
slici 19. pokazuje očitavanje vrijednosti napona na potenciometru P2 kao i položaj prekidača SW1 u
tom slučaju.

Slika 22.

9.7 RS-232 komunikacija

RS-232 komunikacija je namijenjena komunikaciji dva uređaja na udaljenosti ne većoj od 10 m.


Najčešće se preko nje komunicira sa računalom. Kratkospojnici RX i TX kontroliraju na koji pin se
komunikacija spaja. Ako se koriste DIP40 i DIP28 mikrokontroleri treba ih spojiti na RC6 i RC7, a u
slučaju DIP18 mikrokontrolera na RB1 i RB2. Slika 20. prikazuje vezu računala i razvojnog sustava.

101
Slika 23.

Slika 24.

9.8 Digitalni termometar - DS1820

Dallas-ov DS1820 digitalni termometar, sa mogućnošću mjerenja temperature od –55 do 125°C,


može poslužiti za mjerenje temperature okoline i eksperimentiranje. Vrlo je točan i lagan za
povezivanje. Postavlja se u podnožje sa tri pina neposredno ispod konektora za napajanje razvojnog
sustava. Na slici 26. ilustrirano je povezivanje digitalnog termometra i mikrokontrolera na razvojnom
sustavu.

102
Slika 25.

Digitalna vrijednost temperature se šalje ili na pin RA5 ili RE2 u zavisnosti od toga u kom položaju
se nalazi kratkospojnik koji se nalazi neposredno iznad čipa DS1820. U prikazanom primjeru
temperatura će se očitavati preko pina RA5. Polukrug oko tropinskog podnožja označava orijentaciju
DS1820 prilikom postavljanja u podnožje.

Slika 26.

9.9 Pull-up/pull-down otpornici na portovima

Stavljanjem kratkospojnika u gornji položaj pinovi odgovarajućeg porta se postavljaju na logičku


jedinicu (pull-up). Ukoliko je kratkospojnik u donjem položaju, pinovi porta su na logičkoj nuli (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 27., a shematski je predstavljeno slikama ispod.

103
Slika 27.

Slika 28.

Slika 29.

104
Port B je na PULL-DOWN otpornicima, što znači da su ti pinovi na logičkoj nuli sve dok se na
njih ne postavi željena vrijednost.

Port A je preko SW1 povezan na otpornu mrežu. Ako SW1 nije u ON položaju, odgovarajući pin
nema ni pull-up ni pull-down otpornik na sebi . Ovo je jako bitno jer omogućuje da se port A koristi u
analognom modu kao A/D pretvarač.
DIP prekidači na sustavu omogućavaju veliku fleksibilnost. Njihovim korištenjem pinovi portova se
povezuju sa različitim elementima sustava:

SW1 - uključuju / isključuju PULL-UP ili PULL-DOWN otpornike porta A i pinova RE0 i RE1
porta E.
SW2 - uključuje / isključuje sedamsegmentne zaslone
SW3 - uključivanje / isključivanje led dioda na portovima A, B, C, D i E.

9.10 Direktan pristup portovima

Svi pinovi PIC-a se mogu definirati kao ulazni ili kao izlazni. Pinovima portova moguće je pristupiti
direktno sa desne strane razvojnog sustava preko «flat» kabla. Na taj način se mogu očitavati ili
unositi odgovarajuće vrijednosti na portove sa vanjskih elemenata.

Slika 30.

105
10 Primjeri

10.1 Uvod

U ovom poglavlju su prikazani primjeri gotovih programa koji bi vam trebali pomoći da brže
savladate programiranje u asemlerskom programu. Svaki ovaj primjer možete isprobati u simulatoru
MPLAB IDE i preko programa IC-Prog upisati na mikrokontroler PIC 16F877, koji se nalazi na
razvojnom sustavu. Detaljni opis postupka je opisan u prethodnim poglavljima, ali evo jedan kratak
podsjetnik:

1. Pokrenite MPLAB IDE.


2. Selektirajte File>New, i u novom prozoru prenesite akcijom Copy/Paste primjer izvornog kôda.
3. Selektirajte File>Save, i spremite datoteku kao ime_datoteke.asm.
4. Izradite projekt preko Čarobnjaka za projekt (vidi poglavlje 7.3).
5. Izgradite projekt selektiranjem Project>Build All.

Nakon uspješne izgradnje kôda program se može ispitati u simulatoru ili ga možemo odmah
upisati na naš mikrokontroler PIC 16F877. Potrebna .hex datoteka je generirana u istoj mapi u kojoj
smo izradili projekt i možemo ju preko programatora IC-Prog upisati u PIC 16F877.

6. Pokrenite IC-Prog.
7. Selektirajte File>Open File i odaberite ime_datoteke.hex datoteku u radnoj mapi.
8. Nakon postavljanja radnih uvjeta razvojnog sustava, selektirajte Command>Program All.
9. Programiranje je time je završeno i potrebno je isključiti ISP prekidač.

Na razvojnom sustavu se mogu vidjeti rezultati. Prije primjera nalazi se kratak podsjetnik na
makroe i potprograme.

Napomena: LED diode se uključuju logičkom nulom. To znači da mikrokontroler mora na pinu
imati logičku nulu da bi dioda svjetlila.

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.

106
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.
U sljedećim primjerima će se koristiti samo banke 0 i 1, dok će se banka 3 i 4 koristiti samo kod
upisa podatka u EEPROM, odnosno FLASH programsku memoriju (raspored File registrima po
bankama se nalazi u prilogu 8.10).

10.3 Potprogrami

Potprogram predstavlja niz naredbi koji počinje labelom, a završava se naredbom return ili retlw.
Glavna razlika u odnosu na makro je to što se niz instrukcija potprograma nalazi samo na jednom
mjestu u okviru programske memorije. Ovaj niz instrukcija se izvršava svaki put kad se navede
naredba call Ime_potprograma. Kada program stigne do naredbe return nastavlja se izvršavati od
sljedeće naredbe u glavnom programu kod koje je potprogram bio pozvan. Definicija potprograma se
može nalaziti i prije i poslije mjesta poziva.

Labela ;poziv potpr. se obavlja sa "call Labela"


niz instrukcija
niz instrukcija
niz instrukcija
return ili retlw

Napomena: Osnovna razlika između makroa i potprograma je u tome, da se na mjesto


makroa uključuje njegov kôd (jednostavno se može reći da pomaže
programeru manje kucati) i da oni mogu imati svoje argumente dok
potprogram troši manje memorije, ali nema svoje argumente koje može
pozivati.

107
10.4 Primjeri

10.4.1 Program za aktiviranje porta B

U ovom primjeru definiramo pinove porta B kao izlazne, i na njegove pinove dovodimo u stanje
logičke jedinice.

PROCESSOR 16F877 ;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

108
10.4.2 Način upisivanja konstanti

binarno
movlw b'00101100'

heksadecimalno
movlw h'2c'
ili movlw 0x2c

decimalno
movlw d'44'
ili movlw .44

10.4.3 Naredbe uvjeta

Ovo je program koji testira ulazni pin RC0 i ako je u jedinici setira izlazni RB0, i ako je RC1 u nuli
setira RB1 i obratno.

PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

org 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

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

109
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 što i 56 + (–34)
56 00111000
34 00100010
prvi komplement 11011101
+ 1
drugi komp. (-34) 11011110
+56 00111000
22 100010110

10.4.5 Usporedba (komparacija)

Oduzimanjem konstante od sadržaja spremnika PORTB djelujemo na stanje STATUS registra,


odnosno na njegov CARRY i ZERO bit i to koristimo za upravljanje.

PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

org 0x00
BANK1
movlw b'11111111'
movwf TRISB
clrf TRISC
BANK0
clrf PORTC
goto Main

Main
movlw .100
subwf PORTB,0 ;W = portb - 100

110
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

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 & _W DT_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.

111
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

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

112
10.4.8 EEPROM - čitanje podataka sa memorije

Da bi pročitali neki podatak s neke adrese iz EEPROM-a, dovoljno je kopirati primjer ovog kôda:

BSF 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

10.4.10 FLASH programska memorija - čitanje podataka

Mikrokontroler PIC16F877 može koristiti FLASH programsku memoriju za spremanje podataka.


Ta opcija omogućuje čitanje i upisivanje 14-bitnog podatka u programsku memoriju. Taj podatak neće
smetati pri izvršavanju instrukcija u programskoj memoriji jer će se taj podatak, pri izvršenju
instrukcija, biti prepoznat kao nedopuštena/nepravilna instrukcija i biti će izvršena NOP operacija.
Registri:

EEADRH : EEADR: - 2 bajtna riječ


- sadrži 13-bitnu adresu lokacije

EEDATH : EEDATA: - sadrži 13-bitni podatak koji čitamo ili ćemo upisati u programsku memoriju

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

BSF 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

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

114
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, preskoči
;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

10.4.14 Sortiranje sa indirektnim pristupom

Podaci sa lokacija od 0x20 do 0x29 se uspoređuju i sortiraju po veličini. Najveći se upisuje na


lokaciju 0x30 i redom ostali po veličini do lokacije 0x39.

PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

cblock 0x40
bi,adr,nadr,rsort,sort,asort
endc
movlw .10 ;sprema 10 u w

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

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

116
Main clrf TMR0
BANK1
movlw B'01000000' ;unosimo bin podatak
movwf OPTION_REG ;interrupt preko RB0 na
;rastući brid
BANK0 ;setira bitove za E prekida
bsf INTCON,7 ;global E
bsf INTCON,T0IE ;brojač 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 ;- poništava prekide
bcf INTCON,RBIF ;/
retfie ;naredba RETURN, vraća program
;na mjesto prekida
end

Kada dođe do prekida, program skače na vektor/adresu prekidne rutine i onemogućuju se daljnji
prekidi.

10.4.16 Preskaler - rad sa TMR0

Prvo napravimo makro WAIT. Spremimo ga kao wait.inc.

CONSTANT PRESCstd = .1

WAIT macro 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 ;briše bit


WAITb btfss INTCON,T0IF ;preskoči sljedeću liniju
;ako je 1 inače goto

117
goto WAITb ;vrti se 255 puta
decfsz WCYCLE,1 ;dekrementira .100 u .99
goto WAITa
RETURN ;vraća ga u glavni program

Ovaj makro će pripremiti parametre koji će definirati dužinu pauze nakon pozivanja potprograma
WAIT ili WAIT_X. Pauza se dobiva tako da se broje prekoračenja TMR0 brojača (prijelaz iz .255 u .0).
Kod prekoračenja se u registru INTCON,T0IF (2 bit) javlja zastavica.
Prema tome da bi dobili vremenski član - Timer - nije potrebno ići u prekidnu rutinu i brojat prekide,
nego je dovoljno brojati zastavice (flag bit).
Ako negdje u programu pozovemo macro Wait tako da upišemo

WAIT .100

preskaler u OPTION registru će biti postavljen na '1' (omjer TMR0 1:4, što znači da će TMR0
inkrementirati svaki 4 takt – to je određeno konstantom PRESCstd) i brojat će (dekrementirat) 100
prekoračenja i vratiti se u glavni program.
Timer će trajati 4*100*256= 102400 ciklusa. Pri taktu od 4MHz, jedan ciklus traje 1µs. To iznosi
102,4 ms.
Ako negdje u programu pozovemo macro Wait tako da upišemo

WAITX .244, .3

preskaler u OPTION registru će biti postavljen na '7' (omjer TMR0 1:256, što znači da će TMR0
inkrementirati svaki 256 takt – to je određeno argumentom PRESCext) i brojat će (dekrementirat) 100
prekoračenja i vratiti se u glavni program.
Timer će trajati 16*244*256=999424 µs što je 0,999424 s. Približno ≈1s. Pri taktu od 4MHz kada
jedan ciklus traje 1µs.

Program.

PROCESSOR 16F877
#include "p16f877.inc"
#include "wait.inc"
#include "bank.inc"

__CONFIG _CP_OFF&_WDT_OFF&_PW RTE_ON&_XT_OSC

cblock 0x20
WCYCLE, PRESC wait
endc
BANK1
clrf TRISC
BANK0

petlja btfsc PORTB, 0


bsf PORTC, 0
WAIT .100 ;poziv macro
bcf PORTC, 0
goto petlja

end

118
10.4.17 Dvosmjerna vrtnja motora

Programom mijenjamo smjer vrtnje trofaznog motora (RA0 – tipkalo T1, RA1 – tipkalo T2, RA2 –
tipkalo STOP, RB0 – sklopnik M1, RB1 – sklopnik M2).

PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

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

10.4.18 Dioda

Na RA1 pin je spojena LED dioda koja svijetli 2 s, pa 1s ne svijetli, i onda opet svijetli 2 s itd.

1. NAČIN - vremensko kašnjenje na bazi interapta TMR0

PROCESSOR 16F877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC

119
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

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

120
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


;čekanje 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

PET0 movlw .108


movwf aa
pet0 decfsz aa,1
goto pet0

return
;kraj petlje od dvije sekunde
;gašenje diode
dalje bcf PORTA,1 ;dioda ne svijetli
;čekanje 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

121
10.4.19 LED diode na portu B

Program za paljenje i gašenje svih LED dioda na portu B u intervalima od 0,5ms. Prvo ćemo
izraditi makro koji generira pauzu.

Spremite kao pausems.inc

pausems macro arg1

local 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

Sada je dovoljno napisati kratak program koji će koristiti ovu pauzu.

PROCESSOR 16f877
#include "p16f877.inc"
#include "pause.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

122
Cblock 0x20 ;početak 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 ;početak 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 ;isključi diode na portu B
movwf PORTB
pausems .500 ;pričekaj 500 milisekundi (0.5sec)
movlw 0xff ;uključi diode na portu B
movwf PORTB
pausems .500 ;pričekaj 500 milisekundi (0.5sec)
goto Loop ;skoči na labelu Loop

end

U ovom primjeru na mjesto argumenta makro naredbe možemo unesti 16 bitni broj. To znači da
možemo napraviti pauzu od 65,535 s.

10.4.20 Usporedba - indirektnim adresiranjem

Podaci se nalaze od adrese 0x30 do 0x39. Treba ih usporediti sa podatkom na adresi 0x20. Ako
su jednaki adresu tog podatka stavi na 0x40 i svaki sljedeći dalje.

PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

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

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

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

124
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

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 RC1

goto petlja
end

125
Imamo 256 (0-255) mogućih stanja registra kojima moramo pridružiti raspon temperature od -20
do 80°C.

Raspon temperature: 80 – (–20) = 100°C


256/100 = 2,56 po °C
20°C:
raspon 20 – (–20) = 40*2,56 = 102,4 ≈ 102
22°C:
raspon 22 – (–20) = 42*2,56 = 107,52 ≈ 108

10.4.23 Pretvorbe

a) Binarni u EXCESS-3

PROCESSOR 16F877
#include "p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC

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


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

126
c) Binarni u oktalni

PROCESSOR 16F877
#include"p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC

org 0x00
goto main
cblock 0x20
oz1,oz2,oz3,bin
endc

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

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
;množenje sa 64
pet2 movf oz2,0 ;premještamo oz2 u w reg
addwf oz2,1 ;zbrajanje oz2 i w i spremanje

127
;rezultata u oz2
incf con
movlw .6
subwf con,0
btfss STATUS,Z
goto pet2
;množenje 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

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

128
addwf Digtemp,f
Exit2 movf Digtemp,w ;izračunavanje znamenke jedinice
movwf Dig3

endm

Sljedeći primjer izdvaja znamenke iz broja.

PROCESSOR 16F877
#include "p16f877.inc"
#include "digbyte.inc"
__CONFIG _CP_ON&_WDT_OFF&_PW RTE_ON&_XT_OSC

cblock 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

.2 .5 .5

0x20 0x21 0x22

Naravno, u binarnom obliku.

BIN u BCD (2. NAČIN)

PROCESSOR 16F877
#include"p16f877.inc"
__CONFIG _CP_ON&_WDT_OFF&_PWRTE_ON&_XT_OSC

org 0x00
goto main
org 0x04
goto main
cblock 0x20
con,bcd2,bcd1,bcd0,bin
endc

129
main clrf 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

10.4.24 Servo motor

Na pinove porta B u neodređenim vremenskim razmacima dolaze binarni podaci vrijednosti od 0


do 100 s tim da svaka promjena stanja izaziva kratkotrajni impuls na RB7 pinu. Na RA0 spojen je ulaz
koračnog motora, kojemu je za jedan puni okretaj (360° ) potrebno 200 impulsa frekvencije 1KHz.
Ovaj program će upravljati radom koračnog motora, tako da broj zadan na portu B određuje pomak
motora u postocima (npr. za zadani binarni broj 50 na portu B motor treba napraviti otklon od 180°).

PROCESSOR 16f877
#include "p16f877.inc"
#include "bank.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

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

130
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
;kada se dogodi interrupt, pokreće se ovaj
Prekid ;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

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

131
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

132
11 Popis pojmova i kratica:

A
ADC (Analog-to-Digital Converter)- analogno digitalni pretvarač
Adresiranje
ALU (Arithmetic Logic Unit)- Aritmetičko logička jedinica
Analogna veličina
Analogno – digitalni pretvarač
Algoritam
Analogna informacija
Arhitektura računala
ASCII kod (American Standard Code for Information Interchange)- Američki standardni kod za
razmjenu informacija
Asinkroni prijenos podataka
ASIC (application-specific integrated circuit)
B
B - Bajt (byte)
Binarni podatak
b – bit (binary digit)
Boolova logika
Brojač
Bistabil
Bit operacije
BCF (Bit Clear Function)
BSF (Bit Set Function)
C
CPU (Central Processing Unit)- Centralna procesorska jedinica
CRT (Cathode Ray Tube)- Katodna cijev
Clock-takt
CISC (Complex Instruction Set Computer)
CMOS (Complementary Metal Oxide Semiconductor)
D
DAC (Digital-Dnalog Converter)- Digitalno analogni pretvarač
Dekoderi
Dinamička greška
Digitalni sustav
DCE (Data Communications Equipment)-Podatkovna komunikacijska oprema
DTE (Data Terminal Equipment)-Podatkovna terminalna oprema
DC (Digit Carry)
E
EEPROM (Electrically Erasable Read-Only Memory)
Ekspertni sustavi
Električni signali
EEDATA registar
EEADR registar
F
FIFO (FIrst in – First out)
FPGA (field-programmable gate array)
FSR registra
G
Generator takta
Građa računala
Greška ponovljivosti
GPR (General Purpose Registrers) registri
GIE sklopke
H
Harvard-ska arhitektura

133
I
Indirektno adresiranje
Instrukcije
Instrukcijski registar
Integrirani sklopovi
INTF (INT External Interrupt Flag)
INTCON registar
INTE (INT External Interrupt Enable)
Izlazni sklopovi
K
Kašnjenje
Kodiranje
L
LSI – komponente
Logička jedinica
M
Memorija
Memorijska jedinica
Mikroprocesori
Mikrokontroleri
Mikroračunala
Multipleksiranje
Mrtvo vrijeme
Mrtva zona
Međusklop
MMU (Memory Menagment Unit)
N
Naredba
Namjenski registri
Namjenski registri
O
Obrada podataka
Off line sustavi
On line sustavi
Opreacijski kod
Oscilatorski Start-up Timer
OPTION registra
Organizacija memorije
OPTION registar
P
Pareleni prijenos podataka
PIC (Programm Interupt Controller)
Prijenos podataka
Procesna računala
Procesor
Program
Programski jezici
PLC programibilni logički kontroleri
Paritetni sklop
Paritetni bit
Parametri procesa
PC(Personal Computer) računalo
PC (Program Counter)-Programsko brojilo
Podatkovna sabirnicaPORTA
PORTB
Prekidi (Interrupts)
R
Radna memorija
Računalo

134
Rezolucija ili razlučivost
Registar općenamjene
Reset
Relativno adresiranje
RS232
RISC (Reduced Instruction Set Computer)
S
Sample & Hold sklop
Sabirnica
SCADA (Supervisory Control And Data Acquisition)
Segmentno adresiranje
Senzori
Serijska komunikacija
Serijski prijenos podataka
SFR (Special Function Registers)
Slobodni brojač
Sigma Delta A/D pretvarači
Sinkroni prijenos
Sigurni brojač
Status registar
Statička greška
Stog (Stack)
Sučelje
T
T0IF (TMR0 Overflow Interrupt Flag)
T0IE (TMR0 Overflow Interrupt Enable)
T0SE (TMR0 Sorce Edge Select)
T0CS (TMR0 Clock Source Select)
U
U/I kanali
Upravljačka jedinica
Unutrašnja sabirnica
Upravljačka sabirnica
T0SE (TMR0 Sorce Edge Select)
T0CS (TMR0 Clock Source Select)
V
VLSI tehnologija
Vanjska sabirnica
W
Watchdog timera
WR (Write Control)
WREN (EEPROM Write Enable)
WRERR (EEPROM Error Flag)
WR (Work Registar)-Privremeni rwgistar
Z
Z (Zero) zastavica

135
12 Popis korištene literature:

1. Gabro Smiljanić: Mikroračunala, Školska knjiga, Zagreb


2. Gabro Smiljanić: Osnove digitalnih računala, Školska knjiga, Zagreb, 1990.
3. Gabro Smiljanić: Računala i procesi, Školska knjiga, Zagreb, 1991.
4. Darko Grundler: Uvod u mikroprocesore, Tehnička knjiga, Zagreb, 1990.
5. Zdenek Sobotka: Mikroprocesori i Mikroračunala na lak način, Tehnička knjiga, Zagreb,1987.
6. D. Andrić i N. Matić: PIC Mikrokontroleri, Mikroelektronika, Beograd, 2000.
7. Aleksandar Szabo, Impulsna i digitalna elektronika, Školska knjiga, Zagreb, 1994.

136

You might also like