You are on page 1of 71

JU Mješovita elektrotehnička i drvoprerađivačka

srednja škola Bihać

MIKRORAČUNARI
za treći razred zanimanja Tehničar računarstva,Tehničar
informacionih tehnologija i Tehničar elektronike
-interna skripta-

Pripremio:
B.Sc. Edin Burzić, ing.el.

Bihać, šk. 2021/22


Sadržaj
Modul 1. Analiza strukture i funkcionisanja računara, mikroprocesora i mikrokontrolera.......................................... 3

1. Mikroprocesor, mikroračunar i mikroračunarski sistem .............................................................................................. 3


2. Osnovni tipovi organizacije mikroračunara ................................................................................................................ 5
2.1 Uloga sabirnica u mikroračunarskim sistemima .................................................................................................. 5
2.2 Organizacija mikroprocesora oko jedne sabirnice ............................................................................................... 6
2.3 Organizacija mikroprocesora oko dvije i tri sabirnice ........................................................................................... 7
2.4. Standardna arhitektura mikroprocesora ........................................................................................................... 10
2.4.1 Upravljačka jedinica ................................................................................................................................ 11
2.4.2 Aritmetičko-logička jedinica ..................................................................................................................... 14
2.4.3 Registri .................................................................................................................................................... 17
2.5. Izvođenje instrukcija ......................................................................................................................................... 20
3. Arhitektura mikrokontrolera PIC16F887 ................................................................................................................... 28
3.1 Interna arhitektura ............................................................................................................................................. 29
3.2 PIC (engl. Peripheral Interface Controller) mikrokontroleri ................................................................................ 30
3.2.1 Pregled osnovnih perifernih struktura mikrokontrolera PIC16F887........................................................... 31
MODUL 1: Analiza strukture i funkcionisanja računara,
mikroprocesora i mikrokontrolera

1. Mikroprocesor, mikroračunar i mikroračunarski sistem

 Mikroprocesor (MPU – engl. Microprocessor Unit) – je čip koji po funkciji odgovara centralnoj
procesorskoj jedinici (CPU – engl. Central Processing Unit).
 Pod mikroprocesorom se podrazumijeva složeni elektronički sklop proizveden u tehnologiji veoma velikog stepena
integracije (VLSI – Very Large Scale Integration).
 Sastoji se od aritmetičko-logičke i upravljačke jedinice te najosnovnije memorije (radni registri).
 Konstruisan je tako da preko vanjske (eksterne) sabirnice komunicira sa memorijom i međusklopovima koji obično
nisu sastavni dio mikroprocesorskog čipa.

 Mikroračunar – predstavlja mikroprocesor povezan sa memorijom (RAM, ROM), U/I međusklopovima i ostalim
perifernim (vanjskim) jedinicama.

 Mikroračunarski sistem – predstavlja sjedinjenje mikroračunara sa ostalim perifernim jedinicama.


 Ovo u slučaju PC računara podrazumijeva različite U/I uređaje (monitori, tastature, miševi, printeri...), dok u slučaju
mikrokontrolera (MCU – engl. Microcontroler Unit) podrazumijeva vezu sa perifernim jedinicama tipa : tajmer,
jedinica za serijsku komunikaciju (UART), A/D konvertor, PWM generator...)

 Na slici 1.1 prikazan je mikroračunarski sistem sa svim navedenim komponentama kao podsistemima

3
Slika. 1.1 Mikroprocesor, mikroračunar i mikroračunarski sistem

4
2. Osnovni tipovi organizacije mikroračunara

2.1 Uloga sabirnica u mikroračunarskim sistemima

 Vanjske sabirnice (bus-ovi) služe za povezivanje i komunikaciju između pojedinih elementa mikroračunara
(mikroprocesor, RAM, ROM...).
 Sabirnica u osnovi predstavlja skup vodova koji fizički povezuju elemente mikroračunara i na njih se može spojiti veći ili
manji broj elemenata mikroračunarskog sistema.
 Komunikacija preko sabirnice je dvosmjerna što znači da pojedini elementi mikroračunara mogu biti i izvor i „konzument“
podataka.
 Da bi se ovakav vid komunikacije mogao nesmetano odvijati, postoje tri odvojene sabirnice od kojih svaka ima određenu
ulogu. Pa tako imamo :
- sabirnicu za podatke
- adresnu sabirnicu i
- upravljačku sabirnicu

 Na adresnoj sabirnici u svakom trenutku nalazi se broj koji predstavlja adresu elementa koji u tom trenutku učestvuje u
komunikaciji, a podaci se nalaze na sabirnici za podatke.
 Za sinhronizaciju svih podataka unutar mikroračunara brine se upravljačka sabirnica.
 U zavisnosti od situacije, ove tri sabirnice se na slikama prikazuju zajedno ili odvojeno.
 Postoje dva osnovna sistema sabirnica:
- Vanjske ili eksterne sabirnice – povezuju sve ostale dijelove mikroračunarskog sistema koji ne
pripadaju mikroprocesoru
- Unutrašnje ili interne sabirnice – služe za prijenos podataka između različitih elemenata mikroprocesora

 Unutrašnje i vanjske sabirnice su povezane jer se na taj način odvija usklađen rad mikroprocesora sa ostalim dijelovima
mikroračunarskog sistema.
 Unutar mikroprocesora se može nalaziti više sabirnica (za podatke, adrese i upravljanje).

5
2.2 Organizacija mikroprocesora oko jedne sabirnice

 Na slici 2.1 prikazana je organizacija mikroprocesora oko jedne sabirnice .


 Radi jednostavnosti prikaza navedena je samo sabirnica za podatke, međutim, interno je ona multipleksirana sa
upravljačkim i adresnim vodovima.
 Multipleksiranje podrazumijeva vremensko raspoređivanje zauzetosti sabirnice.
 U jednom trenutku sabirnica može prenositi samo jedan podatak

akumulator

bufer registar bufer registar

Statusni registar
registar

registar

registar

...
Rn
R1
R0

Aritmetičko
-logička
jedinica

Slika 2.1 Organizacija mikroprocesora oko jedne sabirnice

6
 Sa sabirnicom je povezan određeni broj različitih registara kao što su :
 akumulator – je registar u kojem se obično dobivaju (akumuliraju) rezultati različitih operacija s binarnim
brojevima. Podaci na akumulator dolaze sa sabirnice za podatke, a iz akumulatora se prenose na bufer
registre.
 bufer-registri – privremeno pamte podatke i to jedan (na slici lijevo) podatke iz akumulatora, a drugi (desni)
podatke koji dolaze izravno sa sabirnice. Privremeno pamćenje je potrebno zbog istovremenog dovođenja
podataka na aritmetičko-logičku jedinicu koja ih upotrebljava za vršenje neke od operacija.
 aritmetičko logička jedinica (u nastavku će se upotrebljavati skraćenica ALU) – obavlja aritmetičke i
logičke operacije s binarnim brojevima te njihovo rotiranje. To mogu biti operacije sabiranja, logičke
operacije I i ILI te neke složenije operacije poput množenja ili dijeljenja.. Pomoću ovih osnovnih operacija
rješavaju se svi problemi koji se postavljaju pred mikroračunar.
 registri opšte namjene (R0 Rn – postoje u većini mikroprocesora. Može ih biti od minimalno jedan do dva,
pa sve do nekoliko desetina. U ove registre se privremeno upisuju različiti podaci zbog čega su i dobili taj
naziv. Takođe se nazivaju i priručni registri jer im se pristupa direktno putem interne sabirnice procesora, a
samim tim je i brzina pristupa mnogo brža u odnosnu na RAM memoriju. Njihovom upotrebom se ubrzava
rad procesora. Podaci na sabirnicu dolaze ili iz registara opšte namjene ili iz ALU (slika 2.1). Podaci sa
sabirnice idu na registre opšte namjene, na akumulator ili na desni bufer-registar. Iz akumulatora podaci
mogu ići samo na ALU.
 statusni registar - sadrži stanja koja mogu nastati tokom obrade podataka kao što su: rezultat jednak nuli,
omogućen prkid programa...
Primjer: Potrebno je sabrati sadržaje registara na sljedeći način: R0 = R0 + R1, ili riječima: dodaj sadržaj registra R1
sadržaju registra R0 i rezultat spremi u R0. Sadržaj registra R1 ostaje nepromijenjen.
 Da bi se izvršila naredba R0 = R0 + R1 potrebno je napraviti sljedeće korake:
1. prenijeti sadržaj registra R0 preko sabirnice na desni ulaz ALU (slika 2.1) i ondje ga privremeno zapamtiti u
desnom buferu.
2. nakon toga potrebno je prenijeti sadržaj registra R1 preko akumulatora u lijevi bufer registar
3. pošto se na oba ulaza ALU nalaze potrebni ulazni podaci, obavlja se operacija sabiranja sadržaja registara, a
rezultat se pojavljuje na izlazu iz ALU
4. dobiveni rezultat se šalje na sabirnicu za podatke i sa sabirnice u R0
5. ako pri radu nastane neko stanje koje treba signalizirati, u statusnom registru se odgoavarajući bitovi setuju u
stanje logičke jedinice

7
 Ako u MPU postoji samo jedna sabirnica, u jednom trenutku se može obavljati samo jedan prijenos. Na
sabirnici se u jednom trenutku može naći samo jedan podatak. Ovakva organizacija mikroprocesora je korištena
u prvim generacijama MPU jedinica.
2.3 Organizacija mikroprocesora oko dvije i tri sabirnice

 Primjer mikroprocesora organiziranog oko dvije sabirnice prikazan je na slici 2.2.


 Jedna sabirnica služi za podatke koji dolaze na ulaz ALU iz registara opšte namjene i eventualno ostalih
elemenata mikroprocesora.
 Rezultati obrade iz ALU idu na drugu sabirnicu, preko koje se mogu uputiti na bilo koje odredište.
 Arhitektura sa dvije sabirnice omogućava istovremeno prenošenje podataka preko dvije putanje što kao rezultat
ima ubrzanje rada mikroprocesora.
sabirnica izvora podataka

Statusni registar
ostali elementi
registar

registar

Aritmetičko-
registar

logička
jedinica
.....
Rn
R1
R0

sabirnica za prijenos podataka na odredište

8
 Primjer organizacije mikroprocesora oko tri sabirnice prikazan je na slici 2.3.
 Svaki ulaz u ALU ima svoju sabirnicu za ulazne podatke. U ovom slučaju ne bi trebalo implementirati bufer-
registre na ulazu u ALU jer se ulazni podaci mogu istovremeno naći na njenim ulazima. Međutim, u praktičnoj
realizaciji mikroprocesora sa ovom vrstom arhitekture proizvođači ipak stavljaju bufer-registre radi sigurnosti
isporuke podataka prema ALU.
 Može se zaključiti da ovakva organizacija dodatno ubrzava rad mikroprocesora jer se istovremeno kroz sistem
može prenositi veća količina podataka.

A - sabirnica izvora podataka

B - sabirnica izvora podataka

.....

Statusni registar
ostali elementi
registar

registar

registar

Aritmetičko-
logička
jedinica
Rn
R1
R0

C - sabirnica za prijenos podataka na odredište


Slika 2.3 Organizacija mikroprocesora oko tri sabirnice
 Kod većine starijih mikroprocesora, arhitektura je organizirana oko jedne sabirnice. Kod mikroprocesora novije
generacije preferira se arhitektura sa više sabirnica jer pospješuje efikasnost i brzinu rada mikroprocesora.

9
2.4. Standardna arhitektura mikroprocesora

 Većina današnjih mikroprocesora ima sličan tip arhitekture koji se sastoji od sljedećih gradivnih blokova:

1. upravljačke jedinice
2. aritmetičko-logičke jedinice
3. jednog ili više akumulatora
4. registara opšte namjene
5. adresnih registara
6. internih sabirnica

2.4.1 Upravljačka jedinica

 Ovaj dio mikroprocesora zadužen je za generiranje upravljačkih signala i koordinaciju svih aktivnosti unutar
mikroprocesora.
 Upravljačka jedinica pribavlja, dekodira i omogućava izvođenje instrukcija.
 Ova jedinica takođe komunicira s ostalim komponentama mikroračunara preko ulazno-izlaznih linija, odnosno
upravljačke sabirnice.
 Za vrijeme faze PRIBAVI upravljačka jedinica pribavlja instrukciju i dekodira operacijski kod. U skladu sa
značenjem operacijskog koda, mijenja stanje mijenja stanje mikroprocesora i šalje upravljačke signale drugim
elementima mikroprocesora i mikroračunara.
 Element iz niza upravljačkih signala naziva se mikroinstrukcija. Mikroinstrukcija je upravljačka riječ koja je
uzrok jedne ili više istovremenih operacija – mikrooperacija. Primjeri mikrooperacija su: prijenosi između
registara, posmak sadržaja registra i sl.
 Instrukcija pribavljena iz memorije (RAM) mikroračunara (makroinstrukcija) obično uvjetuje izvođenje niza
mikroinstrukcija.
 Upravljačka jedinica koja ima upravljačke riječi – mikroinstrukcije pohranjene u svojoj vlastitoj (mikroprocesorskoj)
memoriji, naziva se mikroprogramirana upravljačka jedinica. Niz mikroinstrukcija, odnosno mikroprogram,
pohranjen je u internom ROM-u ili PLA – programabilnom logičkom polju unutar mikroprocesora.

10
 Na slici 2.4 prikazani su detalji organizacije upravljačke jedinice.

Instrukcijski
registar

Upravljački
Makroinstrukcije Mikroprogramska signali
iz memorije Mikroinstrukcija Mikroinstrukcijski upućeni prema
Adresa memorija (interni
dekoder nezavisnim
ROM ili PLA)
upravljačkim
tačkama

Generator adrese
mikroprograma
Informacija o sljedećoj adresi

Upravljačka jedinica
Uvjet

Slika 2.4. Organizacija mikroprogramirane upravljačke jedinice

 Instrukcijsku kod pohranjen u instrukcijskom registru, uvjeti (vanjski i interni – kao rezultat izvođenja prijašnje
mikroinstrukcije), te informacija o sljedećoj adresi mikroprograma, generiraju stvarnu adresu mikroprograma u
sklopu koji se naziva generator adrese mikroprograma.
 Riječ pohranjena na adresiranoj lokaciji mikroprogramske memorije naziva se mikroinstrukcija.
 Upravljačka riječ iz mikroprogramske memorije preko dekodera mikroinstrukcija specificira upravljačke signale
koji se upućuju u nezavisne upravljačke tačke sistema i omogućavaju izvođenje mikrooperacija.
 Na slici 2.5 je prikazano na koji način jedna makroinstrukcija uvjetuje izvođenje niza mikroinstrukcija –
mikroprograma.

11
M
e
đ
u
r
Interna sabirnica mikroprocesora e Vanjska sabirnica
g
i
s
t Niz makroinstrukcija
a (makroprogram)
Instrukcijski r
registar

7 0

7 0

7 0

7 0

RAM ili ROM memorija mikroračunara


Mikroprogram

Upravljačka jedinica

Mikropotprogram
Slika 2.5. Odnos makroprograma i mikroprograma

 Primjer izvođenja makroinstrukcije COMA (komplementiraj sadržaj akumulatora A). Izvođenja makroinstrukcije
COMA uvjetuje sljedeće mikrooperacije:
○ prijenos sadržaja akumulatora A preko interne sabirnice u sklop za komplementiranje (mikroinstrukcija
na adresi 0010)
○ aktiviranje logike sklopa za komplementiranje (mikroinstrukcija na adresi 0011)
○ prijenos komplementiranog sadržaja preko interne sabirnice u akumuluator A (mikroinstrukcija na adresi
(0012)

12
Tabela 2.1 Niz mikroinstrukcija kao rezultat izvršavanja makroinstrukcije COMA
Mikroinstrukcijski kod (sadržaj mikroprogramske memorije)
Adresa u internom ROM-u
(mikroprogramskoj memoriji) a b c d e f

0010 00 111 0010 0100 000 00

0011 00 100 0000 0000 000 00

0012 00 111 0100 0010 000 00

a – polje određuje internu mikrooperaciju u upravljačkoj jedinici


b - određuje sklop u aritmetičo-logičkoj jedinici (npr. 1 0 0 – sklop za komplementiranje, 1 1 1 – ALU nije aktivna)
c – određuje odredište podataka (npr. 0 1 0 0 je akumulator A, 0 0 1 0 je sklop za komplementiranje)
d – određuje izvor podataka
e - određuje informaciju o sljedećoj adresi mikroinstrukcije (npr. 0 0 0 povećaj adresu u
generatoru adrese mikroprograma za 1)
f - određuje vanjski uvjet koji sudjeluje u generiranju sljedeće mikroinstrukcije (npr. 0 1 izvor bita prijenosa)

o Iz primjera je vidljivo da se mikroprogram za makroinstrukciju COMA sastoji od tri 18-bitne riječi - mikroinstrukcije.
o Mikroprogrami koji se nalaze u upravljačkoj jedinici su u većini slučajeva upisani u postupku proizvodnje i korisnik ih ne
može mijenjati.

13
2.4.2 Aritmetičko-logička jedinica

○ Predstavlja višefunkcijski digitalni kombinacijski sklop.


○ Izvršava osnovne aritmetičke (sabiranje, oduzimanje, množenje, dijeljenje...) i logičke operacije (I, ILI, NE, NILI,
XOR, prijenos, komplementiranje, inkrementiranje - uvećanje za 1, dekrementiranje - umanjenje za 1 ...).
○ Izbor funkcije ALU se vrši dijelom mikroinstrukcije (tri bita polja b - Tabela 2.1).
○ ALU je pridružen registar uvjeta (status registar) sa zastavicama (pojedinačni bitovi unutar registra - bistabili).
Mikroprocesor automatski postavlja ili briše odgovarajuće zastavice - dojavne bistabile (C, V, N, Z, H, P) u status
registru za vrijeme izvođenja instrukcija, a u zavisnosti od rezultata aritmetičko-logičke jedinice.
○ Pojedinačne zastavice imaju sljedeća značenja:
 Zastavica C, dojavni bit prijenosa, element je registra uvjeta i ima dvije funkcije:
1. pohranjuje bit kod aritmetičkog prijenosa (prijenos sa najznačajnijeg mjesta. Npr. pri sabiranju dva broja rezultat
generira prijenos u 9-ti bit. Deveti bit je pohranjen u zastavici C status registra i može se programski ispitivati
(slika 2.6)

1 1 1 1 1 1 0 0
+
1 0 0 0 0 0 0 0

C - zastavica 1 0 1 1 1 1 1 0 0
Slika 2.6. Primjer sabiranja sa prijenosom

2. zastavica C upotrebljava se kao bit pri operacijama posmaka. Slika 2.7 prikazuje primjer kružnog posmaka i
posmaka ulijevo.

C - zastavica b7 b0 C - zastavica b7 b0

a) Primjer instrukcija: a) kružni posmak, b) posmak ulijevo


Slika 2.7. b)

14
 Zastavica V (engl. Overflow) je bit preteka (preliva). Aritmetički pretek (zastavica postavljena na V=1) pokazuje
da je prilikom aritmetičke operacije rezultat prekoračio granicu +/-127 kod mikroprocesora čija je duljina riječi 8-
bita (veličina akumulatora).
 Zastavica N se upotrebljava za indikaciju negativnog rezultata aritmetičke operacije (tj. kada je najznačajniji bit
riječi b7 = 1).
 Zastavica Z je dojavni bit nule i postavlja se (Z = 1) kada je rezultat aritmetičke operacije jednak nuli.
Upotrebljava se i za logičke operacije, npr. operacije uspoređivanja gdje se u slučaju da su dva operanda
jednaka postavlja zastavica. Npr. operacija uspoređivanja se vrši logičkom operacijom isključivo ILI (XOR ili
EOR) - slika 2.8.

Z – bit prije 0 0 0 1 1 0 1 0 1 Akumulator A

Z XORA

0 0 1 1 0 1 0 1 Sadržaj memorijske lokacije M

Z – bit
poslije
1 0 0 0 0 0 0 0 0 Akumulator A

Z
Slika 2.8. Operacija XORA i Z-bit u status registru

 Zastavica H je dojavni bit polovičnog prijenosa i upotrebljava se u BCD (engl. Binary Code Decimal)
operacijama zbog toga što se u BCD kodu upotrebljavaju četiri bita za prikaz decimalnog broja. Prilikom
izvođenja aritmetičkih operacija može nastati prijenos iz bita b3 u bit b4 (polovični prijenos). Taj prijenos u BCD
aritmetici mora biti otkriven (detektiran) – (H = 1 ako se prijenos dogodio) da bi se omogućilo pravilno izvođenje
aritmetičkih operacija.
 Zastavica P je bit parnosti i sadržana je u status registru iako se rijetko kao takva implementira. Služi za
ispitivanje korektnosti kod prijenosa podataka.
 Zastavica I predstavlja bit prekida (engl. Interrrupts) i obično se ne koristi u aritmetičkim operacijama. Ovaj bit je
postavljen u stanje I = 1 u slučaju pojave prekida. Prekidi su događaji usljed kojih se prekida normalni tok
izvršavanja glavnog programa (instrukcija) da bi se obavio neki specifičan zadatak (npr. izvršavanje nekog
specifičnog potprograma). Prekidi mogu biti hardverski i softverski.

15
 Potrebno je naglasiti da se kod implementacije mikroprocesora najčešće koriste zastavice C, V, N, i Z čiji je sklop
za detekciju prikazan na slici 2.9.

1. operand 2. operand

Cs
8 – bitna aritmetičko - logička
Cp
jedinica Izbor funkcije

C V N Z

Slika 2.9. Sklop za postavljanje zastavica u status registru

16
2.4.3 Registri

Registri opšte namjene


○ Svaki mikroprocesor posjeduje veći ili manji broj registara ove vrste. Njihova duljina zavisi od širine riječi konkretnog
mikroprocesora (8, 16, 32, 64).
○ U ove registre se mogu upisivati najrazličitiji podaci. Pošto se nalaze u mikroprocesoru pristup im je brži u odnosu
na druge vrste memorije (RAM, ROM).
○ Instrukcije, npr. 8-bitnog mikroprocesora, sastoje se od jedne, dvije ili tri 8-bitne riječi. Prva 8-bitna riječ je tzv.
operacijski kod (u obliku binarnog broja je zapisana operacija koju mikroprocesor treba da izvrši). Druga i
eventualno treća riječ detaljnije određuju instrukciju. One najčešće definiraju adresu operanda, tj. adresu lokacije
u memoriji u kojoj se nalazi podatak s kojim treba napraviti operaciju određenu operacijskim kodom.
○ Ovi registri omogućavaju ALU jedinici rukovanje podacima velikom brzinom. Vrijeme pristupa kod ovih registara je
reda nano sekundi (kod novijih procesora reda piko sekundi).

Šifter (engl. Shifter)


○ Predstavlja prijeko potreban sklop uz ALU, a služi za pomicanje binarnih podataka ulijevo ili udesno.
○ Pri tome se mogu obavljati dvije, u biti, različite operacije: rotiranje i pomicanje.
○ Rotiranje ulijevo prikazano je na slici 2.10. Šifter i jedan bit status registra (bit C) čine cjelinu. Pri rotiranju ulijevo
svaki se bit u šifteru pomakne jedan korak ulijevo, tj. na susjedno mjesto veće težine. Bit najveće težine iz šiftera
prelazi u bit C status registra, a njegov sadržaj prelazi u bit najmanje težine šiftera.
○ Pri rotiranju udesno bitovi se pomiču u suprotnom smjeru.
○ Šifter može biti ili poseban registar ili tu ulogu može preuzeti akumulator.

C - zastavica b7 šifter b0

Slika 2.10. Rotiranje podataka ulijevo

17
 Operacija pomicanja podataka ulijevo prikazana je na slici 2.11. Ona se donekle razlikuje od rotacije. Bit najveće težine
prelazi u C bit status registra, a na mjesto bita najmanje težine unutar šiftera dolazi 0.
 Za provjeru stanja status registra najčešće postoje posebne instrukcije ili postupci.

C - zastavica b7 šifter b0

Slika 2.11. Pomicanje podataka ulijevo


Programsko brojilo (engl. Program Counter)
 Mora postojati unutar svakog mikroprocesora. U njemu je pohranjena adresa memorijske lokacije na kojoj se nalazi
sljedeća instrukcija koju treba izvršiti. Da bi se instrukcija mogla izvršiti potrebno je prebaciti iz memorije (RAM) u
mikroprocesor preko vanjske sabirnice. Adresa iz programskog brojila, preko adresne sabirnice, referira instrukciju koja se
nalazi u zapisana u RAM memoriji na adresi zapisanoj u programskom brojilu. Ta instrukcija se prenese u procesor i
izvrši. Ako se naredba sastoji od više riječi, radi se višestruki zahvat u RAM memoriju.
 Adresno polje 8-bitnih mikroračunara se sastoji od 64 k lokacija. Da bi se adresirala svaka lokacija programsko brojilio
mora biti 16-bitno (jer je 64 k). Za adresiranja memorijskih lokacija u savremenim mikroračunarima koriste se 64-bitna
programska brojila kojima se teoretski može adresirati 18 446 744 073 709 551 616 bitova, 18 014 398 509 481 984
bajtova ili 18 000 TB
Stog (engl. Stack)
 LIFO (Last In First Out) memorijska je struktura koja uključuje kronološku komponentu - najstariji podatak je na dnu
stoga, dok je najmlađi na vrhu (slika 2.12).
 Jedan od načina realizacije stoga je programski (softverski) stog. On se sastoji od određenog broja memorijskih lokacija
u memoriji, tako da je njegova dubina neograničena - zavisi samo od količine RAM memorije.
 Programer sam bira osnovu stoga, koja je određena početnim stanjem pokazivača stoga.
 Pokazivač stoga (engl. stack pointer - SP) je 16-bitni registar koji sadrži adresu stoga. Svaki memorijski pristup stogu
(polaganje ili uzimanje podataka) inkrementira ili dekrementira (uvećava za 1 ili umanjuje za 1) sadržaj pokazivača stoga.
 Sklopovski (hardverski) realiziran stog sastoji se od n internih registara izvedenih u čipu mikroprocesora. Prednost im je
velika brzina pristupa, međutim nedostatak je ograničena dubina stoga.
 Stogom se upravlja samo sa dvije instrukcije:
○ stavi podatak u stog (PUSH)
○ uzmi podatak sa stoga (PULL)

18
 Instrukcija PUSH polaže podatak na vrh stoga, dok instrukcija PULL uzima podatak sa vrha stoga. Struktura stoga
kao i izvođenje instrukcija PUSH i PULL, prikazana je na slici 2.12.
 Stog služi za privremeno pohranjivanje podataka kao što su:
○ tekući status ili stanje mikroprocesora (kod prekida)
○ povratne adrese
○ podaci

F3 PUSH F3 PULL 7F PULL

F3
7F 7F
63 63 63
FD FD FD
Slika 2.12 Primjer izvođenja PUSH i PULL instrukcije

F3 F3

Akumulator A Akumulator A

m-1 m-1 SP

m SP m F3
m+1 7F m+1 7F
m+2 63 m+2 63
m+3 FD m+3 FD
Slika 2.13 Pokazivač stoga (SP) prije i poslije izvršavanja PUSH A

19
2.5. Izvođenje instrukcija
 Na slici 2.14 je prikazan jednostavan model mikroprocesora kojega, između ostalih, čine sljedeće komponente:
 A - akumulator, odnosno radni registar
 DC (engl. data counter) - registar brojač podataka u koji se smješta adresa memorijske lokacije u kojoj se
nalazi operand
 PC- programski brojač koji sadrži adresu sljedeće instrukcije za izvršenje
 IR- instrukcijski registar u koji se upisuje tzv. operacijski kôd instrukcije.
 F - signal takta
 Oblik naredbe 8-bitnog mikroprocesora prikazan je na slici 2.15.

7 A 0 15 DC 0 15 PC 0
Brojač
Akumulator 0101
podataka

Interna sabirnica
7 0 7 0
Privremeni IR
B6
registar
PR

Dekoder
Skup registara
opšte namjene
ALU

Upravljački
sklop Piši
Čitaj
Upravljačka jedinica
F
Slika 2.14 Model jednostavnog mikroprocesora

20
8 bita

1. riječ operacijski kod

2. riječ dio adrese ili operand

3. riječ dio adrese

Slika 2.15. Oblik naredbe 8-bitnog mikroprocesora

 Izvođenje svake instrukcije dijeli se na:


 fazu pribavljanja instrukcije - PRIBAVI (engl. fetch)
 fazu izvršavanja instrukcije - IZVRŠI (engl. execute)

 Mikroprocesor za vrijeme faze PRIBAVI postavlja (prenosi) sadržaj programskog brojača preko interne sabirnice
na spoljnu adresnu sabirnicu.
 Ujedno šalje i odgovarajuće upravljačke signale (ČITAJ) na spoljnu upravljačku sabirnicu.
 Adresni dekoder i memorijski sklop dekodiraju postavljenu adresu (prisutnu na adresnoj sabirnici) u cilju pristupa
do odgovarajuće memorijske riječi.
 Za nekoliko stotina ns, sadržaj specificirane memorijske lokacije pojavit će se na spoljnoj sabirnici podataka. Taj
se sadržaj pohranjuje u instrukcionom registru IR i on predstavlja operacioni kôd instrukcije.
 Za vrijeme faze PRIBAVI, mikroprocesor upotrebljava svoju internu logiku i povećava sadržaj programskog
brojača.
 Za vrijeme trajanja faze IZVRŠI, upravljačka jedinica, u skladu sa operacijskim kodom koji je pohranjen u
instrukcijskom registru, generiše niz upravljačkih signala. Rezultat tog niza su odgovarajući prijenosi podataka,
te operacije pojedinih sklopova unutar ALU.
 Posmatrat ćemo šta se događa u mikroprocesoru tokom izvršavanja sljedećeg programa (adresa memorijske
lokacije sadrži 16 bitova, a dužina riječi mikroprocesora je 8 bitova) - slika 2.16:

21
Memorija
Adresa
Sadržaj Značenje

0100 B6
Napuni akumulator A sa
0101 02 sadržajem memorijske
0102 01 lokacije 0201
Program
0103 9B Dodaj sadržaju
akumulatora A sadržaj
0104 FF memorijske lokacije
. 00FF
.
.
.
.
8-bita
00FF 1A
.
. Podaci
.
0201 23

Slika 2.16. Primjer programa


16-bita

 Početno stanje (sadržaj registara) prikazano je na slici (slika 2.17).


 U programskom brojaču postavljena je adresa prve instrukcije.
 Slika 2.18 prikazuje stanje nakon faze PRIBAVI: u instrukcijskom registru pohranjen je
operacijski kod instrukcije, a sadržaj programskog brojača povećan je za jedan.

22
Slika 2.17 Prva instrukcija, prvi korak, faza PRIBAVI, početni uslovi

Slika 2.18 Stanje nakon faze PRIBAVI, prvi ciklus prve instrukcije

23
 Slika 2.19 prikazuje stanje nakon pribavljanja značajnijeg bajta adrese podatka (02..).
 Stanje programskog brojača je uvećano za jedan.
 Mikroprocesor pribavlja treći bajt instrukcijske riječi (..01) i smješta ga u brojač podataka.
 Programski brojač uvećava se za jedan i pokazuje na sljedeću instrukciju.

7 A 0 15 DC 0 15 PC 0
Akumulator 02.. 0102

Interna sabirnica
7 0 7 0
Privremeni IR
B6
registar
PR

Dekoder
Skup registara
opšte namjene
ALU

Upravljački
sklop Piši
Čitaj
Upravljačka jedinica
F
Slika 2.19 Drugi ciklus prve instrukcije, stanje nakon pribavljanj značajnijeg bajta adrese operanda

24
 Slika 2.20 prikazuje stanje nakon pribavljanja manje značajnog bajta adrese podatka.

Slika 2.20 Treći ciklus prve instrukcije, stanje nakon pribavljanja manje značajnijeg bajta adrese podataka

Slika 2.21 Stanje nakon izvođenja instrukcije, četvrti ciklus izvođenja instrukcije
25
Slika 2.22 Stanje nakon pribavljanja druge instrukcije, prvi ciklus druge instrukcije

Slika 2.23 Drugi ciklus druge instrukcije


26
Tabela 1.1 Prikaz konačnog izvođenja instrukcije
Signal
Instrukcija Ciklus Ciklus Adresna sabirnica Sabirnica podataka
čitaj

1 1 Adresa instrukcije Operacijski kod

Adresa značajnijeg
2 1 Adresa instrukcije
bajta operanda

B6 4
Adresa manje
3 1 Adresa instrukcije značajnijeg bajta
operanda

4 1 Adresa operanda Operand


1 1 Adresa instrukcije Operacijski kod
9B 3 2 1 Adresa instrukcije Adresa operanda
3 1 Adresa operanda Operand

27
3. Arhitektura mikrokontrolera PIC16F887

Mikroprocesor v.s. mikrokontroler

 Mikrokontroleri (engl. Microcontroler Unit - MCU) i mikroprocesori se razlikuju u mnogim segmentima. Najveća razlika
je u njihovoj funkcionalnosti.
 Da bi se mikroprocesori mogli koristiti za određenu namjenu, za minimalnu konfiguraciju potrebno im je dodati
vanjske komponente (razni pomoćni upravljački sklopovi, RAM memorija, HDD ...).
 S druge strane mikrokontroleri su napravljeni na način da se sve komponente potrebne za njegovo funkcionalno
korištenje nalaze integrirane u jednom chip-u.
 Slika 3.1 prikazuje odnos između mikrokontrolera i mikroprocesora.

Slika 3.1. Mikrokontroler v.s. mikroprocesor

28
3.1 Interna arhitektura

 Većina mikrokontrolera je zasnovana na dva modela arhitekture, tzv. Harward arhitektura i Von-Neuman arhitektura.
U biti se radi o dva različita načina razmjene podataka između CPU i memorije.
Von-Neuman arhitektura
 Mikrokontroleri (8-bitni) koji koriste ovu arhitekturu posjeduju blok zajedničke memorije koji sa CPU jedinicom
komunicira preko jedne 8-bitne sabirnice (slika 3.2). Kompletna razmjena podataka se odvija preko jedne sabirnice
(podaci i instrukcije), što onemogućava efikasan rad mikrokontrolera koji su bazirani na ovoj arhitekturi. CPU u
jedinici vremena može všiti samo jednu operaciju, odnosno može čitati ili instrukciju ili podatak iz memorije ali nikako
oboje u isto vrijeme.

Slika 3.2 Von Neuman organizacija Slika 3.3 Harwardska organizacija


Harvardska arhitektura
 Mikrokontroleri koji koriste ovu arhitekturu posjeduju dvije posebne sabirnice (slika 3.3):
 za podatke (8-bitna) koja povezuje CPU sa RAM memorijom
 za instrukcije (12, 14 ili 16 bitna) koja povezuje CPU i ROM memoriju
 Prednosti koje pruža ovakav tip arhitekture su sljedeće:
 svi podaci su širine 8 bita i za njihov prijenos se koristi posebna sabirnica
 instrukcije su širine 12, 14 ili 16 bita i prenose se preko sabirnice odgovarajuće širine

29
 i instrukcije i podaci se mogu čitati istovremeno preko dvije odvojene sabirnice
 sve instrukcije se izvode u samo jednom instrukcijskom ciklusu (osim instrukcije skoka)
3.2 PIC (engl. Peripheral Interface Controller) mikrokontroleri
 Proizvođač ovih mikrokontrolera je američka firma Microchip Inc. Prvi kontroler je napravljen 1975 godine (oznaka
PIC1650) i ne može se smatrati pravim savremenim mikrokontrolerom. Deset godina kasnije, dodavajem određenog
broja perifernih jedinica ovo integrisano kolo dobiva formu savremenog mikrokontrolera.
 Microchip u svojoj ponudi ima 8, 16 i 32 bitne mikrokontrolere. U okviru ovog predmeta će se izučavati isključivo 8-
bitni mikrokontroleri.
 8-bitni mikrokontroleri se prema mogućnostima dijele na: Base-Line, Mid-Range, High-End.
Tabela 3.1 Podjela 8-bitnih mikrokontrolera

Clock Freq. Resolution of 8/16 – bit


Family ROM [Kbytes] RAM [bytes] Pins A/D Inputs Compar- ators Serial Comm. PWM Outputs Others
[MHz] A/D Converter Timers

Base-Line 8 – bit architecture, 12-bit Instruction Word Length

PIC10FXXX 0.375 – 0.75 16 – 24 6–8 4–8 0–2 8 0–1 1x8 – – –

PIC12FXXX 0.75 – 1.5 25 – 38 8 4–8 0–3 8 0–1 1x8 – – EEPROM

PIC16FXXX 0.75 – 3 25 – 134 14 – 44 20 0–3 8 0–2 1x8 – – EEPROM

PIC16HVXXX 1.5 25 18 – 20 20 – – – 1x8 – – Vdd = 15V

Mid-Range 8 – bit architecture, 14-bit Instruction World Length

PIC12FXXX 1.75 – 3.5 64 – 128 8 20 0–4 10 1 1 – 2 x 8 1 x 16 – 0–1 EEPROM

PIC12HVXXX 1.75 64 8 20 0–4 10 1 1 – 2 x 8 1 x 16 – 0–1 –

PIC16FXXX 1.75 – 14 64 – 368 14 – 64 20 0 – 13 8 or 10 0–2 1 – 2 x 8 1 x 16 USART I2C SPI 0–3 –

PIC16HVXXX 1.75 – 3.5 64 – 128 14 – 20 20 0 – 12 10 2 2 x 8 1 x 16 USART I2C SPI – –

High-End 8 – bit architecture, 16-bit Instruction Word Length

0 – 2 x 8 2 – 3 x USB2.0 CAN2.0
PIC18FXXX 4 – 128 256 – 3936 18 – 80 32 – 48 4 – 16 10 or 12 0–3 0–5 –
16 USART I2C SPI

0 – 2 x 8 2 – 3 x USB2.0 USART
PIC18FXXJXX 8 – 128 1024 – 3936 28 – 100 40 – 48 10 – 16 10 2 2–5 –
16 Ethernet I2C SPI

PIC18FXXKXX 8 – 64 768 – 3936 28 – 44 64 10 – 13 10

30
 Svi PIC mikrokontroleri koriste harvardsku arhitekturu što znači da je njihova programska memorija direktno povezana
sa CPU korištenjem više od 8 sabirničkih linija. U zavisnosti od širine programske sabirnice postoje 12, 14 i 16 bitni
mikrokontroleri. Njihova podjela je prikazana u tabeli 3.1.
 Svi PIC mikrokontroleri prikazani u tabeli 3.1 koriste 8- bitnu harvardsku arhitekturu i pripadaju jednoj od tri gore
navedene grupe (podjela je izvršena na osnovu veličine programske riječi – 12, 14 ili 16 bita). Sve grupe dijele sličnu
8-bitnu mikroprocesorsku jezgru i koriste isti set instukcije kao i osnovni hardverski „kostur“ sa manje ili više perifernih
jedinica.
Napomena: ukratko ćemo se posjetiti pojmova: bit, bajt, nibl (high i low), LSB i MSB koji su prikazani na slici
3.4.

Slika 3.4 Bit, bajt, nibl, MSB, LSB

3.2.1 Pregled osnovnih perifernih struktura mikrokontrolera PIC16F887


Registri opšte namjene (engl. General Purpose Registers – GPR):
 predstavljaju memorijske ćelije koje imaju mogućnost da zapamte stanje bajta podataka koji se u njima nalazi. Nalaze
se u RAM memoriji mikrokontrolera i služe za pamćenje privremenih rezultata neke aritmetičko logičke operacije.

Slika 3.5 Prikaz registra opšte namjene


31
Registri specijalne namjene (engl. Special Function Registers – SFR):
 za razliku od prethodno navedenih registstara, MCU posjeduje i registre čija je namjena strogo predefinirana tokom
proizvodnog procesa. Njihovi pojedinačni bitovi su (doslovno) spojeni na dijelove mikrokontrolera koje nazivamo
perifernim jedinicama ( A/D konvertori, tajmeri, PWM, oscilatori ...) i imaju zadatak da konfigurišu modove rada tih
perifernih jedinica, odnosno da ih konfigurišu (slika 3.6). Broj i ovih registara zavisi od broja perifernih jedinica koje
mikrokontroler posjeduje. Takođe se nalaze u RAM memoriji.

Slika 3.6 Prikaz registara specijalne namjene – SFR Slika 3.7 U/I portovi

Ulazno/izlazni portovi (engl. Input/Output ports):


 Svaki mikrokontroler treba da ima mogućnost komunikacije sa vanjskom okolinom inače bi bio beskoristan. U ovu
svrhu služe ulazno-izlazni portovi koji su kod mikrokontrolera često multipleksirani (mogu imati više uloga, odnosno
mogu služiti kao klasični digitalni ulazi/izlazi, ili mogu biti dodjeljeni nekoj od perifernih jedinica mikrokontrolera što
zavisi od konfiguracije SFR registara). Struja koju mikrokontroler može dati ili primiti, iznosi oko 20mA po pin-u.
 Još jedna karakteristika koja je bitna za U/I portove je da posjeduju interne tzv. Pull-up otpornike preko kojih su
interno povezani na pozitivni izvor napajanja mikrokontrolera. U ovoj konfiguraciji, pinovi se koriste kao ulazni npr.
u slučaju povezivanja tastera na jedan od ulaza mikrokontrolera.
 Svi U/I pinovi su konfigurisani pomoću SFR registara preko kojih je određeno da li će oni biti ulazni (logička 1-ca na
odgovarajućem mjestu u SFR registru) ili izlazni (logička 0 na odgovarajućem mjestu u SFR registru).
 Prikaz U/I portova dat je na slici 3.7

32
Memorijska jedinica:
 je dio mikrokontrolera zadužen za spremanje podataka i instrukcija. Memorija se sastoji od memorijskih lokacija od
kojih svaka ima svoju jedinstvenu adresu. U memorijske lokacije se može upisivati i iz njih se može čitati (engl.
read/write). Mikrokontroleri posjeduju nekoliko vrsta memorije:
 ROM (Read Only Memory), programska memorija - koristi se za spremanje programa koji će se izvršavati u
mikrokontroleru. Veličina programa koji se može upisati u memoriju zavisi od njene veličine. Današnji
mikrokontroleri za adresiranje najčešće koriste adrese širine 12, 14 i 16 bita što znači da mogu adresirati
maksimalno 64KB memorijskog prostora (vrijedi za 16 bita). Najčešći tip ROM memorije, s obzirom na mogućnosti
brisanja i ponovnog upisa, je tzv. FLASH tip. Broj upisa i brisanja pelazi nekoliko hiljada puta i ovaj tip memorije je
pogodan za razvoj sistema baziranih na mikrokontrolerima. Postoje i tzv. OTP (engl. One Time Programming) tip
ROM memorije kod kojih je omogućeno samo jedno programiranje. Najčešće se koristi u serijskoj proizvodnji
uređaja baziranih na mikrokontrolerima gdje se programi upisuju u ROM memoriju samo jednom tokom
proizvodnog procesa.
 RAM (Random Access Memory) je dio memorijskog prostora mikrokontrolera koji se koristi za privremeno
pohranjivanje podataka i međurezultata koji se generiraju tokom izvođenja programa.
 EEPROM (Electrical Erasable Programmable ROM) je dio memorijskog prostora u koji se podaci mogu upisivati
i iz kojeg se podaci mogu čitati. Za ovaj tip memorije karakteristična je sporost njenom pristupu (reda ms), a
podaci koji se u njoj nalaze pohranjeni ostaju zapisani i nakon nestanka napajanja. Najčešće se koristi se za
pohranu parametara nekog procesa kojima se ne mora često pristupati radi pisanja ili čitanja.

Slika 3.8 Memorijski prostor mikrokontrolera PIC16F887 33


Centralna procesorska jedinica CPU:
 koristi se upravljanje i nadzor svih procesa unutar mikrokontrolera. Sastoji se od nekoliko manjih jedinica od kojih
su najvažnije sljedeće:
 Instrukcijski dekoder - služi za dekodiranje instrukcija koje su dobavljene iz ROM memorije i na osnovu
rezultata dekodiranja se vrši upravljanje ostalim dijelovima mikrokontrolera.
 ALU - izvršava aritmetičko-logičke operacije nad podacima kao rezultat dekodiranja programskih instrukcija
 Akumulator - predstavlja registar specijalne namjene (SFR) koji je usko vezan za operacije ALU. Koristi se
za spremanje podataka tokom izvršavanja određenih aritmetičko-logičkih operacija.
 Status registar (PSW) - signalizira stanja vezana za obavljanje aritmetičko-logičkih operacija. Takođe pripada
grupi registara specijalne namjene (SFR).

Slika 3.9 Centralna procesorska jedinica mikrokontrolera

Jedinica za serijsku komunikaciju:


 služi za povezivanje mikrokontrolera sa drugim mikrokontrolerom ili nekim drugim uređajem (npr. PC računarom).
Postoji više protokola za serijsku komunikaciju koji se koriste kod mikrokontrolera:
 SPI (engl. Serial Peripheral Interface Bus)
 I2C (engl. Inter Integrated Circuit)
 UART (engl. Universal Asynchronous Receiver/Transmitter)

34
 Na slici 3.10 prikazane su jedinice za serijsku komunikaciju.

a) UART b) I2C c) SPI


Slika 3.10 Jedinice za serijsku komunikaciju

 Paralelno povezivanje je pogodno u slučajevima kratkih razdaljina između učesnika u komunikaciji, međutim za
komunikaciju na većim rastojanjima koristi se serijsko povezivanje. Ova vrsta komunikacije podrazumijeva
korištenje manjeg broja vodova u odnosu na paralelnu komunikaciju.
 Mikrokontroleri posjeduju više ugrađenih sistema (protokola) za serijsku komunikaciju koji su realizirani u vidu
perifernih jedinica (slika 3.10). Koji će se od njih koristiti zavisi od sljedećih faktora:
 sa koliko uređaja će mikrokontroler razmjenjivati podatke
 na koji brzinama razmjena treba da se vrši
 kolika je udaljenost između uređaja učesnika u komunikaciji
 da li podaci treba da se istovremeno mogu slati i primati
 Na osnovu navedenih faktora može se donijeti odluka o korištenju protokola pogodnog za konkretnu primjenu.
 Periferne jedinice zadužene za ovu vrstu komunikacije imaju ugrađene mehanizme koji se automatski brinu o
kvaliteti razmjene podataka na nivou fizičkog prijenosa.
 Korisnik (programer) brine se samo o slanju (engl. send) i primanju (engl. recived) podataka.

35
 Pojam Baud Rate se koristi za označavanje brzine prijenosa podataka, odnosno bitova po sekundi [bps].
 I2C (Inter Integrated Circuit) je protokol koji se koristi za razmjenu podataka između MCU ili specijalizovanih
sklopova, na kratkim rastojanjima (obično unutar jedne štampane ploče). Veza se uspostavlja preko dva
provodnika od kojih se jedan koristi za slanje i primanje podataka, a drugi za sinhronizaciju između učesnika u
razmjeni. Kao što se vidi (slika 3.10 b) jedan od uređaja je uvijek tzv. master, dok su ostali slave. Zadatak master
uređaja je adresiranje slave uređaja prije započinjanja komunikacije. Na ovakav način, na jednu komunikacijsku
sabirnicu, može biti spojeno 112 različitih uređaja. Baud rate je obično oko 100 Kb/s (standardni mod) ili 10 Kb/s
(spori mod). Najveća brzina koja se može postići je oko 3.4 Mb/s, a udaljenost na kojoj se komunikacija može
vršiti je nekoliko metara.
 SPI (Serial Peripheral Interface Bus) je sistem serijske komunikacije koji koristi do 4 voda (obično tri): jedan za
prijem, jedan ta slanje, jedan za sinhronizaciju i eventualno jedan za odabir uređaja za komunikaciju (slika 3.10
c). Komunikacija se odvija u tzv. full-duplex modu što znači da se podaci mogu istovremeno i primati i slati.
Maksimalna brzina prijenosa je znatno veća nego kod I2C protokola.
 UART (Universal Asynchronous Receiver/Transmitter) je vrsta asinhrone konekcije bez sihronizacijskog
signala. U biti se radi o pretvaranju paralelnih podataka u serijske i njihovom slanju preko komunikacijskih
vodova. Brzine se kreću do 1 Mb/s.
Oscilator:
 je periferna jedinica zadužena za sinhronizaciju svih radnji u mikrokontroleru. Za generiranje signala takta mogu
se koristiti vanjski (kristalni oscilator, RC oscilator) ili unutrašnji izvor (integriran u mikrokontroleru). Instrukcije se
ne izvode na brzinama na kojima radi oscilator već nekoliko puta sporije. Ovo se dešava zbog toga što se
izvršavanje instrukcija provodi u nekoliko koraka za koje je potrebno nekoliko taktnih signala.
 Npr. za MCU koji koristi vanjski izvor takta (kvarcni kristalni oscilator) od 20 MHz, vrijeme izvršavanja instrukcije
nije 50 ns (što bi se očekivalo jer je (T=1/f)) već 200, 400 i 800 ns u zavisnosti od mikrokontrolera koji se koristi.

Slika 3.11 Oscilatorska periferna jedinica


36
Napajanje mikrokontrolera:
 Kao dvije najosnovnije osobine vezane za napajanje mikrokontrolera mogu se izdvojiti:
 Brown Out: predstavlja „opasno“ stanje u kojem se mikrokontroler može naći prilikom isključivanja ili kada
se napon napajanja mikrokontrolera spusti na neprihvatljivu razinu usljed pojave različitih vrsta smetnji.
Pošto MCU posjeduje više modula koji rade na različitim naponskim iznosima, ovo stanje može uzrokovati
nepravilnosti u njegovom radu (jedna grupa modula radi dok druga ne radi). Da bi se izbjegao ovakav
scenarj, MCU ima ugrađen zaštitini mehanizam (tzv. Brovn Reset krug) koji resetuje sve module
mikrokontrolera u slučaju poremećaja sa napajanjem.
 Reset Pin: obično je obilježen sa oznakom MCLR (engl. Master Clear Reset). Koristi se za vanjski reset
mikrokontrolera dovođenjem logičke nule „0“ ili jedinice „1“ (u zavisnosti od mikrokontrolera - kod PIC16F887
dovodi se logička nula) na ovaj pin.
Tajmeri/brojači:
 Predstavljaju specijalne sklopove mikrokontrolera koji se najčešće koriste za mjerenje vremena ili brojanje
asinhronih događaja. Kao izvor signala koriste takt oscilatora (internog ili eksternog - slika 3.12) ili ga dobivaju sa
nekog od pinova mikrokontrolera. Tajmeri/brojači su SFR registri širine 8 ili 16 bita čiji sadržaj se uvećava na
osnovu takta oscilatora ili nekog eksternog signala.

Slika 3.12 Tajmer/brojač


 Tajmeri/brojači mogu biti izvori prekida (engl. Interrupt). Prekidi se dešavaju prilikom svake promjene stanja
tajmera/brojača sa max. na min. vrijednost (npr. sa 11111111 na 00000000 za 8-bitni tajmer/brojač).
37

 Ukoliko tajmer dobiva signal takta sa nekog od eksternih pinova mikrokontrolera zovemo ga brojač. Brojači se ne
koriste za mjerenje vremena jer ne koriste signale sa unaprijed definisanim trajanjem. Najčešće se koriste za
mjerenje asinhronih događaja (događaji koji se ne dešavaju u pravilnim vremenskim intervalima).

Watchdog tajmer:
 je poseban tajmer unutar mikrokontrolera koji je spojen na poseban RC oscilator (oscilator sastavljen od
otpornika i kondenzatora). Ukoliko je ovaj tajmer omogućen, neprestano odbrojava do svog maksimuma nakon
čega se MCU resetuje. Sprječavanje reseta se postiže specifičnom komandom CLRWDT (engl. Clear Watchdog
Timer).
 Namjena ovog tajmera je spječavanje „zaglavljivanja“ programa koji se izvršava u mikrokontroleru. Izvršavanjem
naredbe CLRWDT potvrđuje se pravilno izvođenje programa. Ova komanda se stavlja na jedno ili više specifičnih
mjesta unutra programa. Neizvršavanjem jedne od njih uvećava se stanje WDT-a da bi nakon dostizanja njegove
maksimalne vrijednosti došlo do reseta mikrokontrolera (slika 3.13.).
 Reset mikrokontrolera ukazuje na nepravilan rad programske petlje koja se unutar njega izvršava.

Slika 3.13 Princip rada Watchdog tajmera

38
A/D (analogno-digitalni) konvertor:
 Za analogne signale koji se dovode na ulaz mikrokontrolera potrebno je izvršiti digitalizaciju (mikrokontroler
razumije samo 0 i 1, ne razumije 2, 3.4, 5, 10...). U ovu svrhu služi A/D konvertor kojeg skoro svaki mikrokontroler
posjeduje kao posebnu perifernu jedinicu. Drugim riječima, ovaj sklop vrši konverziju analognog kontinualnog
signala u formu koju CPU unutar mikrokontrolera razumije. Na slici 3.14 prikazan je analogni naponski signal čija
je amplituda prikazana na Y osi u vrijednostima od 0-5[V]. Na X osi je taj isti signal prikazan u diskretnim
binarnim vrijednostima. Vrijednosti sa Y ose MCU razumije tek nakon što ih A/D konvertor pretvori u vrijednosti na
X osi.
 Slika 3.15 prikazuje internu strukturu A/D konvertora.

Slika 3.14. Konverzija analognog signala u digitalni Slika 3.15. Interna struktura A/D konvertora

 U ovom poglavlju su nabrojane najosnovnije periferne jedinice mikrokontrolera PIC16F887. Navedene su njihove
najosnovnije osobine koje bi trebale biti dovoljne za osnovno razumijevanje njihove uloge u mikrokontolerski
baziranim sistemima.
 Kroz naredna poglavlja biće dat detaljan prikaz većine perifernih jedinica koje ovaj mikrokontroler posjeduje.

39
3.2. Peirferne jedinice mikrokontrolera PIC16F887

 U ovom poglavlju će biti dat detaljan prikaz osnovnih perifernih jedinica mikrokontrolera PIC16F887.
 Biće objašnjena njihova osnovna namjena i funkcionalnost kao i načini njihove konfiguracije korištenjem
konfiguracijskih registara.

3.2.1. Ulazno/izlazni portovi


 PIC16F887 posjeduje 5 ulazno-izlaznih portova (A, B, C, D i E). Njihova namjena je da omoguće mikrokontroleru
komunikaciju sa okolinom. Na slici 3.16. prikazana je principijelna shema spoja portova sa okolinom
mikrokontrolera, kao i njihova interna konekcija i konfiguracija.

Slika 3.16. Portovi mikrokontrolera


 Pojedini pinovi portova su multifunkcionalni (može im se dodijeliti različita namjena). To znači da u jednom
trenutku pojedinačni pin porta može obavljati samo jednu funkciju. Samo u slučaju da mu nije određena druga
namjena, pin porta se može koristiti kao opštenamjenski I/O (engl. Input/Output) pin.

40
 Svaki port posjeduje odgovarajući konfiguracijski registar (PORTA->TRISA, PORTB->TRISB ... PORTE->TRISE)
koji određuje njegovu namjenu (smjer). Ukoliko se u odgovarajućem bitu TRIS registra nalazi zapisana logička nula
(bit = 0), pin PORT-a koji odgovara toj poziciji u TRIS registru je izlazni, u suprotnom je ulazni (bit = 1).

PORTA i TRISA registar


 PORTA ima širinu od 8 bita i bidirekcionalan je (pinovi ovog porta mogu biti ulazni ili izlazni). Bitovi u TRISA i ANSEL
konfiguracijskim registrima kontroliraju funkciju pinova porta A. Pet od osam pinova mogu biti analogni (određuje se
pomoću ANSEL registra - oznaka AN na pinu). Svi pinovi porta A mogu biti konfigurisani kao ulazni ili izlazni (određuje
se pomoću TRISA registra) - slika 3.17.

Slika 3.17. Konfigurisanje PORTA registra

 Konfigurisanje RA0, RA1, RA2, RA3 i RA5 pinova kao anlognih, postiže se konfigurisanjem bitova unutar ANSEL
registra na sljedeći način:
 RA0 = AN0 (određeno postavljanjem logičke jedinice na mjesto ANS0 bita ANSEL registra)
 RA1 = AN1 (određeno postavljanjem logičke jedinice na mjesto ANS1 bita ANSEL registra)
 RA2 = AN2 (određeno postavljanjem logičke jedinice na mjesto ANS2 bita ANSEL registra)
 RA3 = AN3 (određeno postavljanjem logičke jedinice na mjesto ANS3 bita ANSEL registra)
 RA5 = AN4 (određeno postavljanjem logičke jedinice na mjesto ANS4 bita ANSEL registra)
ZADATAK: poajsniti zbog čega je preskočen pin RA4
41
 Primjer programskog kôda napisanog u programskom jeziku C koji pokazuje način konfigurisanja porta A prikazan
je u sljedećem listingu:
//PORTA.2 pin je konfigurisan kao digitalni ulaz.
//ostali pinovi PORTA konfigurisani su kao digitalni izlazi
ANSEL = ANSELH = 0; //Svi I/O pinovi su konfigurisani kao digitalni
PORTA = 0; //Stanja pinova PORTA stavljena u stanje logičke nule
TRISA = 0b00000100; //Svi PORTA pinovi osim PORTA.2 su konfigurisani kao izlazi

PORTB i TRISB registar

 Port B je 8- bitni, bidirekcionalni port. Bitovi unutar TRISB registra određuju funkciju (ulazni ili izlazni) bitova u portu
B (slika. 3.18).

Slika 3.18 Konfigurisanje porta B


 Način konfiguracije je isti kao i kod porta A (logička 0 na odgovarajućem mjestu unutrar TRISB registra definira
odgovarajući pin porta B kao izlazni, dok logička 1 definira odgovarajući pin porta B kao ulazni). Šest pinova ovog
porta mogu se koristiti kao analogni ulazi konfigurisanjem odgovarajućih bitova unutar ANSELH registra na
sljedeći način:
 RB0 = AN12 (određeno postavljanjem logičke jedinice na mjesto ANS12 bita ANSELH registra)
 RB1 = AN10 (određeno postavljanjem logičke jedinice na mjesto ANS10 bita ANSELH registra)
 RB2 = AN8 (određeno postavljanjem logičke jedinice na mjesto ANS8 bita ANSELH registra)

42
 RB3 = AN9 (određeno postavljanjem logičke jedinice na mjesto ANS9 bita ANSELH registra)
 RA4 = AN11 (određeno postavljanjem logičke jedinice na mjesto ANS11 bita ANSELH registra)
 RA5 = AN13 (određeno postavljanjem logičke jedinice na mjesto ANS13 bita ANSELH registra)

 Svaki od pinova porta B ima dodijeljenu odgovarajuću dodatnu funkciju (multipleksirano) vezanu za neku od
perifernih jedinica mikrokontrolera.

 Ovaj port ima nekoliko specijalnih mogućnosti koje ga razlikuju od ostalih portova mikrokontrolera:
1. svi pinovi porta B imaju ugrađene tzv. pull-up otornike što ga čini idealnim za konekciju sa tasterima ili
tastaturama, raznim vrstama prekidača (senzorskim izlazima), optokaplerima itd. Da bi se omogućilo korištenje
ovih otpornika mora se izvršiti konfiguracija bitova unutar WPUB registra (logička 1 omogućava pull-up
otpornike na odgovarajućem pinu porta B) - slika 3.19.

Slika 3.19 Konfigurisanje WPUB registra

Ovako konfigurisani pinovi porta B ne utiču na funkcionalnost porta u slučaju kada su pinovi porta B
konfigurisani kao izlazni (otpor od nekoliko desetina kilooma), ali su od velike koristi u slučaju kada su pinovi
konfigurisani kao ulazni (slika 3.20).

Napomena: na konfigurisanje porta B, s obzirom na omogućavanje pull-up otpornika, utiče i


RBPU bit unutar OPTION_REG registra

43
a) pin sa pull-up otpornicima b) pin bez pullup-otpornika
Slika 3.20 Konfigurisanje pull-up otpornika na portu B

2. ukoliko je unutar IOCB registra omogućeno (odgovarajući bit je setovan, postavljen na logičku 1-cu) , svaki bit
porta B, konfigurisan kao ulazni, može uzrokovati prekid (engl. interrupt) na svaku promjenu logičkog stanja
(slika 3.21).

Slika 3.21 Konfigurisanje IOCB registra


Zahvaljujući ovoj mogućnosti, pinovi porta B najčešće se koriste za provjeru stanja tastera na tastaturi. Tom
prilikom nije potrebno vršiti konstantno programsko testiranje stanja tastera, jer će njihovim pritiskanjem doći
do pojave prkida kojeg će, ukoliko je to omogućeno, mikrontroler samostalno registrovati (slika 3.22).

44
Slika 3.22 Korištenje porta B kao ulaza za tastaturu

Ukoliko se pinovi označeni sa X, Y, i Z trajno postave u stanje logičke jedinice (5V), pritisak na bilo koji taster
spojen na port B uzrokovaće prekid (slika 3.22). Na ovaj način se detektuje stanje na pinovima RB0, RB1,
RB2 i RB3 na osnovu kojeg se određuje kombinacija tastera koji su u tom trenutku pritisnuti na tastaturi.

Primjer programskog kôda koji obrađuje stanje pina RB1 prikazan je u sljedećem programskom listingu (nije
direktno vezano za primjer sa slike 3.22):

/*PORTB.1 pin je konfigurisan kao digitalni ulaz. Svaka promjena njegovog


logičkog stanja uzrokovaće pojavu prekida. Na ovom pinu su takođe omogućeni
pull-up otpornici (slika 3.20). Svi ostali pinovi porta B su proglašeni kao
digitalni izlazi*/
ANSEL = ANSELH = 0; //Svi I/O pinovi konfigurisani su kao digitalni
PORTB = 0; //Stanja na svim pinovima porta B su postavljena na logičku nulu
TRISB = 0b00000010; //PORTB.1 pin je konfigurisan kao ulaz, svi ostali pinovi
kao izlazi
RBPU = 0; //Pull-up otpornici su omogućeni
45
WPUB1 = 1; //Pull-up otpornik je povezan na PORTB.1 pin
IOCB1 = 1; //PORTB.1 može uzrokovati prekid na promjenu logičkog stanja
RBIE = GIE = 1; //prekidi su omogućeni
... //ostatak programa koji služi za obradu stanja na RB1 pinu

RB0/INT pin
 Ovaj pin je jedini pravi (hardwerski) eksterni izvor prekida. Može biti konfigurisan tako da reaguje na rastući (prelaz sa
nule na jedinicu) ili opadajući brid (prelaz sa jedinice na nulu) signala mijenjanjem INTEDG bita unutar
OPITION_REG konfiguracijskog registra.

RB6 i RB7 pinovi


 PIC16F887 ne posjeduje specijalne pinove koji se koriste u procesu programiranja njegove programske memorije.
RB6 i RB7 pinovi se koriste za ovu namjenu. RB6 se koristi za signal takta dok se RB7 koristi za transfer podataka sa
programatora (uređaj koji se koristi za programiranje mikrokontrolera) u FLASH programsku ROM memoriju
mikrokontrolera. Tokom procesa programiranja mikrokontrolera potrebno je osigurati napon od 5V na VDD pinu i 12-
14V na Vpp (MCLR) pinu (ovu funkciju obavlja programator). Programiranje mikrokontrolera se može obaviti i dok se
on nalazi postavljen u nekom sistemu. Ovakav način programiranja mikrokontrolera se naziva In-Circuit Serial
Programming (ICSP) (slika 3.23).

Slika 3.23. ICSP interfejs

Zadatak: pojasniti spajanja pull-down otpornika na pinove bilo kojeg porta na mikrokontroleru.
46
PORTC i TRISC registri
 Port C je bidirekcionalni port širine 8 bita. Njegovu funkciju s obzirom na smjer pojedinih pinova obavlja TRISC
registar (slika 3.24). Logika djelovanja je potpuno ista kao i kod prethodna dva porta. Ostale funkcije porta C biće
objašnjene kroz korištenje ostalih perifernih jedinica u poglavljima koja slijede.

Slika 3.24. Konfigurisanje porta C


PORTD i TRISD registri
 Port D je bidirekcionalni port širine 8 bita. Njegovu funkciju s obzirom na smjer pojedinih pinova obavlja TRISD
registar (slika 3.25). Logika djelovanja je potpuno ista kao i kod prethodna tri porta.

Slika 3.25. Konfigurisanje porta D

47
PORTE i TRISE registri
 Port E je bidirekcionalni port širine 4 bita. Njegovu funkciju s obzirom na smjer pojedinih pinova obavlja TRISE registar
(slika 3.24). Logika djelovanja je potpuno ista kao i kod prethodna četiri porta s razlikom da je RE3 pin uvijek definisan
kao ulaz.

Slika 3.24. Konfigurisanje porta E


 Slično kao i kod portova A i B, i port E ima mogućnost da se koristi kao ulaz za A/D konvertor. ANSEL registar određuje
koji će pin biti analogni, a koji digitalni na sljedeći način:
 RE0 = AN5 (određeno postavljanjem logičke jedinice na mjesto ANS5 bita ANSEL registra)
 RE1 = AN6 (određeno postavljanjem logičke jedinice na mjesto ANS6 bita ANSEL registra)
 RE2 = AN7 (određeno postavljanjem logičke jedinice na mjesto ANS7 bita ANSEL registra)

//PORTE.0 pin je konfigurisan kao analogni ulaz.


//ostali pinovi PORTA konfigurisani su kao digitalni izlazi
ANSEL = 0b00100000; //PORTE.0 pin je konfigurisan kao analogni
ANSELH = 0; //Svi I/O pinovi su konfigurisani kao digitalni
TRISE = 0b00000001; //Svi PORTE pinovi osim PORTE.0 su konfigurisani kao izlazi
PORTE = 0; //Stanja pinova PORTE stavljena u stanje logičke nule

48
ANSEL I ANSELH registri

 Ova dva registra se koriste za konfigurisanje I/O pinova na portovima u smislu njihove namjene. Ovi pinovi mogu biti
konfigurisani kao analogni ili kao digitalni. Njihova funkcija zavisi od stanja bitova unutar ova dva registra. (slika 3.25.)
 Da bi se određeni pin proglasio kao analogni, na odgovarajuće mjesto u ANSL ili ANSELH registru mora biti upisana
logička jedinica (1).
 U obrnutom slučaju, kada pin treba proglasiti digitalnim, na odgovarajuće mjesto unutar ovih registara upisuje se
logička nula (0).

Slika 3.25. ANSEL i ANSELH konfiguracijski registri

NAPOMENA: Ukoliko se neki od I/O pinova želi koristiti kao analogni, prvo se mora izvršiti inicijalna
konfiguracija ANSEL i ANSELH registara. Očitanje stanja I/O pinova koji su konfigurisani kao analogni, a
pokušaju se pročitati kao digitalni, za rezultat će uvijek vratiti logičku nulu (0).

 Funkcionalni prikaz djelovanja ANSEL i ANSELH registara na I/O pinove, prikazan je na slici 3.26.

49
Slika 3.26. Funkcionalni dijagram korištenja ANSEL i ANSELH registra

OPTION_REG

Ovaj registar sadrži bitove koji su odgovorni za konfigurisanje Timer0/WDT preskalera, TMR0, vanjskih (eksternih)
prekida kao i pull-up otpornika na portu B. Sadržaj ovog regstra prikazan je na slici 3.27.

Slika 3.27. OPTION_REG konfiguracijski registar

50
 Značenje pojedinih bitova unutar ovog registra:

 RBPU - bit za omogućavanje/onemogućavanje pull-up otpornika na portu B


1 - port B pull-up otpornici su onemogućeni
0 - port B pull-up otpornici su omogućeni

 INTEDG - bit za određivanje reakcije na rastući ili opadajući brid signala koji uzrokuje prekide (slika 3.28)
1 - prekid na rastući brid signala na pinu RB0/INT
0 - prekid na opadajući brid signala na pinu RB0/INT

Slika 3.28. Rastući i opadajući brid signala prekida

 T0CS - bit za određivanje izvora signala za TMR0


1 - tranzicija na T0CKI pin-u (RA4)
0 - interni izvor signala sa oscilatora (FOSC/4)

 T0SE - bit za određivanje reakcije na rastući ili opadajući brid signala TMR0 (tajmera 0)
1 - uvećanje na tranziciju visoko-nisko (T0CKI pin)
0 - uvećanje na tranziciju nisko-visoko (T0CKI pin)

 PSA - bit za dodjelu preskalera tajmeru 0 ili WDT tajmeru


1 - preskaler je dodijeljen WDT tajmeru
0 - preskaler je dodijeljen TMR0 tajmeru

51
 PS2, PS1, PS0 - bitovi za selekciju omjera preskalera. Omjer preskalera je određen kombinacijom ova tri
bita. Omjer preskalera takođe ovisi i od toga kome je preskaler dodijeljen (TMR0 ili WDT). Kombinacije koje
određuju ove omjere prikazane su u tabeli 3.2.

Tabela 3.2 Određivanje omjera preskalera


PS2 PS1 PS0 TMR0 WDT

0 0 0 1:2 1:1

0 0 1 1:4 1:2

0 1 0 1:8 1:4

0 1 1 1:16 1:8

1 0 0 1:32 1:16

1 0 1 1:64 1:32

1 1 0 1:128 1:64

1 1 1 1:256 1:128

NAPOMENA: Ukoliko postoji potreba da se tajmeru 0 (TMR0) dodijeli 1:1 omjer preskalera, preskaler je potrebno
dodijeliti WDT tajmeru. Kao rezultat toga, tajmer 0 ne koristi preskaler već impulse za uvećanje svog stanja
dobiva direktno sa oscilatora u omjeru 1:1.

52
Programski kod koji demonstrira upotrebu preskalera prikazan je u nastavku:
/* Ako komanda CLRWDT nije izvršena, WDT tajmer će resetovati mikrokontroler svakih 32.768 us
(f=4MHz)*/
void main() {
OPTION_REG = 0b00001111; // Preskaler je dodijeljen WDT tajmeru u omjeru 1:128
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
...
// Vrijeme između dvije CLRWDT komande ne smije biti duže od 32.768 us (128x256)
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
...
// Vrijeme između dvije CLRWDT komande ne smije biti duže od 32.768 us (128x256)
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
INTCON registar
 Sadrži bitove zadužene za omogućavanje važnih globalnih funkcija mikrokontrolera, flag bitove za signalizaciju TMR0
overflov stanja, bilježenje promjena na portu B kao i pojavu prekida na INT pinu porta B (slika 3.29).

Slika 3.29 INTCON registar

 Pregled značenja pojdinačnih bitova INTCON registra dat je u nastavku:


 GIE - Global Interrupt Enable Bit (bit za omogućavanje globalnih prekida), bit za kontrolu svih internih i eksternih
prekida.
1 - omogući sve prekide
0 - onemogući sve prekide

53
 PEIE - Pheripheral Interrupt Enable Bit: ponaša se slično GIE bitu, s razlikom da kontroliše prekide vezane
isključivo za periferne jedinice izuzimajući prekide koji dolaze od strane TMR0, PORTB bitova (IOC) i RB0/INT
pina
1 - omogući prekide od strane perifernih jedinica
0 - onemogući sve prekide
 T0IE - TMR0 Overflow Interrupt Enable Bit: kontroliše prekide uzrokovane overflov stanjem tajmera 0 (TMR0)
1 - omogući prekide uzrokovanje overflov stanjem tajmera 0
0 - onemogući prekide uzrokovanje overflov stanjem tajmera 0
 INTE - RB0/INT External Interrupt Enable Bit: kontroliše prekide uzrokovane promjenom logičkog stanja na
RB0/INT pinu (vanjski prekid)
1 - omogući vanjske prekide sa RB0/INT pina
0 - onemogući vanjske prekide sa RB0/INT pina
 RBIE - RB Port Change Interrupt Enable Bit: kada je konfigurisan kao ulazni, pinovi porta B mogu uzrokovati
prekide mijenjanjem svog logičkog stanja (sa niskog na visoko i obrnuto)
1 - omogući prkide na portu B
0 - onemogući prkide na portu B
 TOIF - TMR0 Overflow Interrupt Flag Bit: zastavica koja signalizira overflov na tajmeru 0 (kada se započinje
brojanje od nule)
1 - na tajmeru 0 je registrovan overflov (bit se u softveru mora vratiti na nulu za sljedeću detekciju
overflow stanja)
0 - nije registrovan overflov
 INTF - RBO/INT External Interrupt Flag Bit: registruje se promjena stanja na RB0/INT pinu
1 - registrovan vanjski prekid na INT pinu
0 - nije registrovan vanjski prekid na INT pinu
 RBIF - Port B Change Interrupt Flag Bit: registruje promjenu logičkih stanja na portu B
1 - na najmanje jednom od svih pinova porta B desila se promjena logičkog stanja
0 - nije bilo promjene stanja na portu B

54
 Primjer programskog koda koji koristi INTCON registar za konfiguraciju mikrokontrolera

// PORTB.4 pin je konfigurisan kao ulaz osjetljiv na promjenu logičkog stanja


void initMain() {
ANSEL = ANSELH = 0; // svi I/O pinovi su konfigurisani kao digitalni
PORTB = 0; // postavi port B u stanje logičke nule
TRISB = 0b00010000; // svi port B pinovi osim PORTB.4 su konfigurisani kao izlazi
RBIE = 1; // Prekidi na promjenu stanja na portu B su omogućeni
IOCB4 = 1; // Prekidi na pinu 4 porta B su omogućeni
GIE = 1; // globalni prekidi su omogućeni
...
... // od ove tačke, svaka promjena stanja na pinu 4 porta B uzrokovaće prekid

Pitanja za ponavljanje i provjeru znanja:

 Detaljno komentarisati programski kod, nacrtati strukturu PORTA i TRISA registara i pojasniti njihovu namjenu:
ANSEL = ANSELH = 0;
PORTA = 0;
TRISA = 0b00000100;
 Zbog kojeg razloga se RA4 pin na portu A ne može koristiti kao ulaz za A/D konvertor?
 Navesti osnovne razlike između PORTA i PORTB portova. Koje su specifičnosti porta B, ukratko ih pojedinačno
pojasniti.
 Nacrtati konfiguraciju ulaza pina preko pull-up i pull-down otpornika. Objasniti svrhu i namjenu te objasniti razliku
između ova dva spoja.
 Koji uvjeti moraju biti ispunjeni da bi se pravilno očitala vrijednost sa pina koji je konfigurisan kao analogni ulaz.
 Pojasniti namjenu IOCB registra.
 Na koji način se vrši programiranje ROM FLASH memorije mikrokontrolera PIC16F887?

55
 Koju ulogu igra RBPU bit unutar OPTION registra? Detaljno objasniti.
 Koja ja uloga WPUB registra? Navesti programski primjer njegove upotrebe.
 Navesti specifičnosti porta E. Detaljno kometarisati sljedeći programski kod:
ANSEL = 0b00100000;
ANSELH = 0;
TRISE = 0b00000001;
PORTE = 0;
 Šta je to preskaler? Koja tri bita, kojeg registra se koriste za njegovu konfiguraciju i kako? Navesti primjer
konfiguracije
preskalera za omjere 1:128 i 1:64 respektivno.
 Na koji način je moguće konfigurisati preskaler da se tajmeru 0 (TMR0) dodijeli vrijednost preskalera 1:1?
 Pojasniti ulogu INTEDG bita u okviru OPTION registra (nacrtati slike za specifične valne oblike).
 Detaljno pojasniti funkcionalni dijagram da slike 3.26.
 Objasniti namjenu T0SE i T0CS bitova.
 Zbog čega mikrokontroler PIC16F887 posjeduje 14 bitova unutar dva ANSEL (ANSEL I ANSELH) registra?
 Navesti pojedinačne bitove INTCON registra i pojasniti njihovu namjenu.
 Pojasniti razliku između INTE i INTF bitova INTCON registra.
 Pojasniti razliku između RBIE i RBIF bitova INTCON registra.

56
TMR0 - tajmer 0 jedinica
 Ovaj tajmer je najčešće korišten interni sklop mikrokontrolera. Koristi se u skoro svakoj aplikaciji gdje je potrebno
generisati impulse različitih dužina trajanja, mjeriti proteklo vrijeme, brojati eksterne impulse (radi kao brojač u ovom
slučaju).
 Tajmer 0 ima sljedeće osobine:
 može obavljati funkciju 8-bitnog tajmera/brojača
 može mu biti dodijeljen preskaler (dijeli ga sa watchdog tajmerom)
 može mu biti dodijeljen interni ili eksterni izvor takta
 može uzrokovati prekid prilikom overflova
 može reagovati na rastuću ili opadajuću ivicu signala (podešavanja u OPTION registru)

 Na slici 3.30 prikazan je strukturni dijagram tajmera 0 koji prikazuje njegovu zavisnost od podešavanja pojedinačnih
bitova unutar registara koji utiču na rad ovog tajmera.

Slika 3.30 Strukturni dijagram veza tajmera 0 sa bitovima i registrima zaduženim za konfigurisanje njegovog rada
57
 Na slikama 3.31 i 3.32 prikazana je zavisnost stanja tajmera 0 i watchdog tajmera od vrijednosti PSA bita unutar
OPTION_REG registra.

Slika 3.31 Zavisnost WDT-a i tajmera 0 od stanja PSA bita (PSA = 0)

Slika 3.32 Zavisnost WDT-a i tajmera 0 od stanja PSA bita (PSA = 1)

58
Primjer: u nastavku su dati primjeri programskog koda koji demostriraju upotrebu prekida, watchdog tajmera, preskalera i tajmera 0.
//U ovom primjeru, TMR0 je konfigurisan da radi kao tajmer i dodijeljen mu je preskaler.
unsigned cnt; //Deklaracija brojačke varijable
void interrupt(){ //Prekidna rutina
cnt++; //Pojava prekida uzrokuje uvećanje brojačke varijable za 1
TMR0 = 155; //Tajmer vraća svoju inicijalnu vrijednost (155)
INTCON = 0x20; //Bit T0IE je setovan (omogućen je ponovni prekid), bit T0IF vraćen u
//stanje logičke 0 (ZAŠTO?)
}
void main() {
OPTION_REG = 0x04; //Preskaler (1:32) je dodijeljen tajmeru TMR0, a izvor takta je
//oscilator (FOSC/4)
TMR0 = 155; //Tajmer TMR0 će početi brojati od 155 do 255
INTCON = 0xA0; //Omogućen prekid za TMR0 (u čemu je razlika u odnosu na?)
...
...
}
//U ovom primjeru, TMR0 je konfigurisan da radi kao brojač i dodijeljen mu je preskaler.
unsigned cnt; //Deklaracija brojačke varijable
void interrupt(){ //Prekidna rutina
cnt++; //Pojava prekida uzrokuje uvećanje brojačke varijable za 1
TMR0 = 155; //Brojač vraća svoju inicijalnu vrijednost (155)
INTCON = 0x20; //Bit T0IE je setovan (omogućen je ponovni prekid), bit T0IF vraćen u
//stanje logičke 0.
}
void main() {
OPTION_REG = 0x20; //Preskaler (1:2) je dodijeljen brojaču TMR0, a izvor takta je RA4 pin
TMR0 = 155; //Brojač TMR0 će početi brojati od 155 do 255
INTCON = 0xA0; //Omogućen prekid za TMR0
...
...
}
//U ovom primjeru, preskaler (1:64) je dodijeljen watchdog tajmeru.
void main() {
OPTION_REG = 0x0E; //Preskaler je dodijeljen WDT tajmeru (1:64)
asm CLRWDT; //Asemblerska komanda za resetovanje WDT
...
...
asm CLRWDT; //Asemblerska komanda za resetovanje WDT
...
59
TMR1 - tajmer 1 jedinica

 Ovaj modul predstavlja 16-bitni tajmer/brojač. Sastoji se od dva registra TMR1L i TMR1H (slika 3.33).
 Može brojati do vrijednosti od 65 535 impulsa u jednom ciklusu nakon čega se resetuje na vrijednost 0 i započinje
novi ciklus brojanja.

Slika 3.33. Struktura TMR1 tajmera/brojača

 Slično kao i kod TMR0 tajmera, stanje ovih registara može biti pročitano ili u njih vrijednost može biti upisana u bilo
kojem trenutku. U slučaju overflova, generira se prekid ukoliko je omogućen.
 Tajmer 1 može raditi u dva moda, kao tajmer ili kao brojač. Za razliku od tajmera 0, tajmer 1 ima sljedeće dodatne
funkcije:
 mogućnost brojanja do 65 535 impulsa u jednom ciklusu (tajmer 0 do 255)
 3-bitni preskaler (poseban)
 opcioni LP oscilator (Low Frequency (Power) Crystal)
 TMR1 gate kontrola (omogućeno brojanje) na osnovu stanja komparatora ili T1G pina
 Wake-up reakcija na overflow (u slučaju da MCU posjeduje eksterni izvor takta)
 služi kao vremenska baza za Capture/Compare funkciju

60
 Na slici 3.34 prikazana je veza tajmera 1 sa ostalim funkcionalnim blokovima mikrokontrolera kao i zavisnost njegovog
rada od stanja pojedinih bitova unutar T1CON registra.

Slika 3.34 Funkcionalni blok dijagram tajmera 1

61
T1CON registar

 Većinu funkcija tajmera 1 određuje stanje pojedinačnih bitova unutar T1CON registra (konfiguracijski registar tajmera
1). Zbog toga će u nastavku biti opisani svi pojedinačni bitovi ovog registra radi boljeg razumijevanja rada tajmera 1.

Slika 3.35. Konfiguracijski registar tajmera 1 (T1CON)


 Pojedinačni bitovi imaju sljedeće značenje:
 T1GINV - Timer 1 Gate Invert Bit - služi kao logički inverter T1G pina ili izlaza komparatora C2 (C2OUT)
1 - Tajmer 1 broji kada je T1G pin ili C2OUT bit visoko (logička 1-ca)
0 - Tajmer 1 broji kada je T1G pin ili C2OUT bit nisko (logička 0)
 TMR1GE - Timer 1 Gate Enable Bits - određuje da li će T1G pin ili izlaz komparatora C2 (C2OUT) biti aktivan ili
ne. Ovaj bit je funkcionalan samo ukoliko je TMR1 bit jednak logičkoj 1-ci, u svim osatalim slučajevima se
ignoriše.
1 - brojanje tajmera 1 kontrolisano je tajmer 1 Gate funkcijom (T1G pin)
0 - tajmer 1 uvijek broji
 T1CKPS1, T1CKPS0 - određuju omjer preskalera koji je dodijeljen tajmeru 1

Tabela 3.3 Određivanje omjera preskalera tajmera 1


T1CKPS1 T1CKPS0 Omjer
preskalera
0 0 1:1
0 1 1:2
1 0 1:4
1 1 1:8

62
 T1OSCEN - LP oscilator Enable Control bit
1 - LP oscilator je omogućen kao izvor takta za tajmer 1 (osilator sa veoma malom potrošnjom i
frekvencijom od 32 768 Hz)
0 - LP oscilator je isključen
 T1SYNC - Timer 1 External Clock Input Synchronization bit - omogućava sinhronizaciju ulaza LP oscilatora ili
T1CKI pina sa internim taktom mikrokontrolera. Ovaj bit se ignoriše kada se broje impulsi sa glavnog oscilatora
(bit TMR1CS = 0)
1 - ne sinhroniziraj se sa eksternim izvorom takta
0 - sinhroniziraj se sa eksternim izvorom takta
 TMR1CS - Timer 1 Clock Source Select Bit - selektovanje izvora takta za tajmer 1
1 - broji impulse sa T1CKI pina (na rastući brid signala)
0 - broji impulse sa internog izvora takta
 TMR1ON - Timer 1 On bit
1 - omogući tajmer 1
0 - zaustavi (onemogući tajmer 1)
Napomena: u slučaju generiranja prekida od strane tajmera 1, TMR1IF zastavica unutar PIR1 registra biće
podignuta u stanje logičke jedinice.

Tajmer 1 - odabir izvora takta


 TMR1CS bit unutar T1CON registra, koristi se za odabir izvora takta za tajmer 1.
 U slučaju da je kao izvor takta odabran interni izvor, TMR1H-TMR1L par registara uvećavaće se na frekvenciji Fosc/4
pomnoženom sa odabranim omjerom preskalera.
 Ukoliko je odabran eksterni (vanjski) izvor takta, tajmer 1 može raditi u dva moda: kao tajmer ili kao brojač. Takt se u
modu brojača može sinhronizirati sa internim taktom ili koristiti kao asinhroni izvor takta.

Tabela 3.4. Odabir izvora takta za TMR1

Izvor takta TMR1CS


Fosc/4 0
T1CKI pin 1

63
Preskaler tajmera 1
 Tajmer 1 posjeduje potpuno odvojen preskaler koji omogućava dijeljenje frekvencije oscilatora u omjerima koji su
navedeni u tabeli 3.3. Preskaleru se ne može direktno pristupiti, već se njegova konfiguracija obavlja posredno preko
T1CON registra.
Oscilator tajmera 1
 RC0/T1OSO i RC1/T1OSI pinovi se koriste za registraciju impulsa koji dolaze od strane različitih vanjskih izvora
(drugih sklopova van mikrokontrolera). Ovi pinovi se takođe mogu koristiti i kao ulazi za LP (engl. Low Power) oscilator
(slika 3.36)

Slika 3.36. Spoj vanjskog LP oscilatora


 Pošto u ovom slučaju oscilator ne zavisi od internog takta, može raditi i u tzv. sleep modu mikrokontrolera.

Tajmer 1 GATE funkcija

 Tajmer 1 GATE funkcija je softverski konfigurabilna i može se dodijeliti T1G pinu ili izlazu komparatora C2.
 Ova funkcija omogućava tajmeru 1 da direktno mjeri vrijeme trajanja nekog događaja (visok ili nizak logički nivo) koji je
uzrokovao promjenu na T1G pinu ili izlazu komparatora C2.
 Za omogućavanje ove funkcije potrebno je izvršiti odgovarajuću konfiguraciju unutar T1CON registra

64
Primjer: upotreba tajmera 1 za generisanje prekida sa periodom od 1ms
//Timer1
//Fosc = 20MHz
//Uvećavanje vrijednosti tajmera se dešava na svaki 4-ti impuls Fosc (na 5MHz)
//Prescaler 1:1;
//Postavljena vrijednost tajmera 1 TMR1 = 60536, od ove vrijednosti počinje brojanje sve do overflova;
//Vrijeme ponavljanja prekida: 1 ms
void InitTimer1(){ //inicijalizacija tajmera 1
T1CON = 0x01; //konfigurisanje tajmera 1 kroz T1CON registar
TMR1IF_bit = 0; //inicijalno vraćanje zastavice prekida na nulu radi omogućavanja detekcije
//sljedeće prekida
TMR1H = 0xEC; //stavljanje vrijednosti u viši bajt tajmera 1 (prvi dio od 60536)
TMR1L = 0x78; //stavljanje vrijednosti u niži bajt tajmera 1 (drugi dio od 60536)
TMR1IE_bit = 1; //omogućavanje prekida
INTCON = 0xC0; //omogućavanje globalnih prekida i prekida perifernih jedinica
}
void Interrupt(){ //rutina za obradu prekida
if (TMR1IF_bit){ //da li se desio prekid?
TMR1IF_bit = 0; //zastavice prekida vraćena na nulu radi omogućavanja detekcije sljedeće prekida
TMR1H = 0xEC; //stavljanje vrijednosti u viši bajt tajmera 1 (prvi dio od 60536)
TMR1L = 0x78; //stavljanje vrijednosti u niži bajt tajmera 1 (drugi dio od 60536)
...

...
}
}

65
ANALOGNI MODUL MIKROKONTROLERA

 Mikrokontroler PIC16F887 posjeduje 10-bitni A/D konvertor sa 14 pripadajućih ulaza (14 pinova je na raspolaganju kao
ulaz za A/D konvertor). Namjena mu je da pretvara analaogne signale iz okoline, u mikrokontroleru razumljiv digitalni
oblik signala.
 Konvertor generira 10-bitni rezultat korištenjem metode sukcesivne aproksimacije (Digitalna tehnika) i sprema ga u
ADC registar (16-bitni registar sastavljen od dva 8-bitna registra ADRESL i ADRESH).
 Minimalna rezolucija ili kvalitet konverzije za različite primjene određuje se selektovanjem interne naponske reference
Vref- i Vref+ (Slika. 3.37).

Slika 3.37 Dodjeljivanje interne naponske reference

 Kod dodijeljene naponske reference od 5V (Vref+=5V i Vref-=0V), postiže se rezolucija od 0,00488V = 4.8mV što
predstavlja najmanji naponski nivo koji 10-bitni A/D konvertor može izmjeriti.
 Ova razina minimalnog naponskog signala je dovoljna za većinu primjena gdje se ne zahtijeva veoma visoka prciznost
u mjerenju reda uV i nV.

66
 Funkcionisanje A/D konvertora unutar mikrokontrolera svodi se na korištenje četiri osnovna registra:
 ADRESH – sadrži viši bajt rezultata konverzije
 ADRESL – sadrži niži bajt rezultata konverzije
 ADCON0 – kontrolni registar 0
 ADCON1 – kontrolni registar 1

 Na slici 3.38 prikazan je funkcionalni blok dijagram A/D konvertora sa kojeg se može protumačiti njegova osnovna
funkcionalna logika rada.

Slika 3.38 Funkcionalni blok dijagram A/D konvertora mikrokontrolera PIC16F887

67
ADRESH i ADRESL registri

 Rezultati dobiveni nakon koverzije analognog signala u digitalni 10-bitni broj, pohranjuju se u ADRESL i ADRESH
registre.
 Postoje dva načina „rukovanja“ s dobivenim rezultatima:
 lijevo poravnanje

 desno poravnanje

 Format konverzije rezultata određuje se pomoću ADFM bita unutar ADCON1 konfiguracijskog registra

68
ADCON0 registar

 Predstavlja jedan od osnovnih konfiguracjskih registara pomoću kojeg se upravlja radom A/D konvertora.

 Značenje pojedinih bitova je sljedeće:


 ADCS1, ADCS0 – A/D Conversion Clock Select Bit: pomoću ovih bitova određuje se frekvencija interne
sinhronizacije A/D konvertora. Utječu na vrijeme konverzije.

ADCS1 ADCS0 Clock

0 0 Fosc/2
0 1 Fosc/8
1 0 Fosc/32
1 1 RC

 CHS3-CHS0- Analog Chanel Select Bits: ovi bitovi služe za selektovanje pina/pinova koji će se koristiti za A/D
konverziju – za RA0/AN0 kombinacija je 0000 sve do RB5 za kojeg vrijedi kombinacija 1101. Kombinacije 1110 i
1111 služe za dodjeljivanje specijalnih internih referentnih napona A/D konvertoru (CVref i Vref=0.6V).
 GO/DONE – A/D Conversion Status Bit: pokazuje trenutni status konverzije
○ 1 – A/D konverzija je u toku
○ 0 – A/D konverzija završena (automatsko se setuje na 0 nakon završene konverzije)
 ADON – A/D On Bit: ovaj bit služi za omogućavanje A/D kovertora
○ 1 – A/D konvertor omogućen
○ 0 – A/D konvertor onemogućen

69
ADCON1 registar

 Takođe, predstavlja jedan od osnovnih konfiguracjskih registara pomoću kojeg se upravlja radom A/D konvertora.

 Značenje pojedinih bitova je sljedeće:


 ADFM – A/D Result Format Select Bit: pomoću ovog bita određuje se format zapisa rezultata A/D konverzije.
○ 1 – rezultat je poravnat sa desne strane. Šest MSB bitova u ADRESH registru se ne koriste
○ 0 – rezultat je poravnat sa lijeve strane. Šest LSB bitova u ADRESL registru se ne koriste

 VCFG1- Voltage Reference Bit: selektuje negativnu naponsku referencu potrebnu za rad mikrokontrolera
○ 1 – negativna naponska referenca dovedena na Vref- pin
○ 0 – Vss se koristi kao negativna naponska referenca

 VCFG0- Voltage Reference Bit: selektuje pozitivnu naponsku referencu potrebnu za rad mikrokontrolera
○ 1 – pozitivna naponska referenca dovedena na Vref+ pin
○ 0 – Vdd se koristi kao pozitivna naponska referenca

70
Zadatak: Opisati funkciju programskog koda. Napisati programske komentare. Koristiti MikroC kompajler.
unsigned int temp_res;
void main() {
ANSEL = 0x04;
TRISA = 0x04;
ANSELH = 0x00;
TRISC = 0x00;
TRISD = 0x00;
do {
temp_res = ADC_Read(2);
PORTC = temp_res;
PORTD = (temp_res >> 2) & 0b11000000;
} while(1);
}
D5
R9
300
LED-YELLOW
D6
R10
300
LED-YELLOW
D7
U1 R3
1 15 300
RV1 RE3/MCLR/VPP RC0/T1OSO/T1CKI
16 LED-YELLOW
RC1/T1OSI/CCP2
2 17
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1 D8
B1 3
RA1/AN1/C12IN1- RC3/SCK/SCL
18
R4
4 23
99%

5V RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24 300
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25 LED-YELLOW
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
1k 14
RA5/AN4/SS/C2OUT RC7/RX/DT D1
13
RA6/OSC2/CLKOUT
19
R1
RA7/OSC1/CLKIN RD0
20 300
RD1
+4.95 33 21 LED-YELLOW
RB0/AN12/INT RD2
34 22
Volts
35
RB1/AN10/C12IN3- RD3
27 D2
36
RB2/AN8 RD4
28
R2
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29 300
RB4/AN11 RD6/P1C
38 30 LED-YELLOW
39
RB5/AN13/T1G RD7/P1D D3
40
RB6/ICSPCLK
8
R5
RB7/ICSPDAT RE0/AN5
9 300
RE1/AN6
10 LED-YELLOW
RE2/AN7
PIC16F887 D4
R6
300
LED-YELLOW
D9
R7
300
LED-YELLOW
D10
R8
300
LED-YELLOW

Cita se odozdo prema gore

71

You might also like