You are on page 1of 124

ST

IIS VÁ
TV NM
ÁN AT
MA EV
TIIJJE CS
VIIC S

MIKROKONTROLERI
- TEORIJA -

sskkrriippttaa

V
VIIŠŠA
ATTEEH
HNNIIČ
ČKKAA ŠŠK
KOOL
LAA
SSU
UBBO
OTTIIC
CAA
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

SADRŽAJ

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 1
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

SADRŽAJ 1.
0 PREDGOVOR 5.
1 UVOD 7.
1.1 MIKROPROCESOR, MIKRORAČUNAR, MIKRO-
KONTROLER 8.
1.1.1 MIKROPROCESOR 8.
1.1.2 MIKRORAČUNAR 8.
1.1.3 MIKROKONTROLER 9.
1.1.4 HARDVER MIKRORAČUNARA, MIKROKONTRO-
LERA 9.
1.1.5 MEMORIJA 12.
1.1.6 ULAZI – IZLAZI 12.
1.1.7 ADRESE 13.
1.1.8 CENTRALNA PROCESORSKA JEDINICA (CPU) 13.
1.1.9 ARITMETIČKO-LOGIČKA JEDINICA 14.
1.1.10 REGISTRI 15.
1.1.11 MAGISTRALE (SABIRNICE) 16.
1.1.12 REGISTAR NAREDBI I DEKODER 17.
2 MIKROKONTROLER PIC 16F877 19.
2.1 UVOD 20.
2.2 CISC I RISK ARHITEKTURE 22.
2.3 PODRUČJA PRIMENE MIKROKONTROLERA PIC
16F877 23.
2.4 TAKT FREKVENCIJA I INSTRUKCIJSKI CIKLUS 24.
2.5 PROTOČNA OBRADA INSTRUKCIJA (PIPELI-
NING) 25.
2.6 ZNAČENJE NOŽICA (PINOVA) 26.
2.7 GENERATOR TAKTA - OSCILATOR 27.
2.7.1 TIPOVI OSCILATORA 27.
2.8 RESET LOGIKA 30.
2.9 CENTRALNA PROCESORSKA JEDINICA 32.
2.10 ARITMETIČKO-LOGIČKA JEDINICA 33.
2.11 PORTOVI 34.
2.12 ORGANIZACIJA MEMORIJE 35,
2.12.1 PROGRAMSKA MEMORIJA 35.
2.12.2 MEMORIJA ZA PODATKE 35.
2.13 PROGRAMSKI BROJAČ 37.
2.14 STEK MEMORIJA 38.
2.15 PROGRAMIRANJE UNUTAR SISTEMA – IN
SYSTEM PROGRAMING 39.
3 SET INSTRUKCIJA MIKROKONTROLERA 40,
FAMILIJE PIC 16FXX
3.1 UVOD 41.
3.2 INSTRUKCIJE MIKROKONTROLERA 42.
3.2.1 PRENOS PODATAKA 42.
3.2.2 ARITMETIČKE I LOGIČKE OPERACIJE 42.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 2
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.2.3 OPERACIJE NAD BITOVIMA 43.


3.2.4 UPRAVLJANJE TOKOM PROGRAMA 43.
3.2.5 KORIŠĆENI TERMINI U ASEMBLERU 44.
3.3 DETALJAN OPIS INSTRUKCIJA MIKROKONTRO-
LERA PIC 16F877 45.
3.3.1 MOVLW UPIŠI KONSTANTU U REGISTAR W 45.
3.3.2 MOVWF PREPIŠI W U f 46.
3.3.3 MOVF PREPIŠI f U d 47.
3.3.4 CLRW UPIŠI 0 U W 48.
3.3.5 CLRF UPIŠI 0 U f 49.
3.3.6 SWAPF ZAMENI MESTA GORNJOJ I DONJOJ 50.
POLOVINI BAJTA
3.3.7 ADDLW SABERI W SA KONSTANTOM 51.
3.3.8 ADDWF SABERI W I f 52.
3.3.9 SUBLW ODUZMI W OD KONSTANTE 53.
3.3.10 SUBWF ODUZMI W I f 54.
3.3.11 ANDLW LOGIČKO I W SA KONSTANTOM 55.
3.3.12 ANDWF LOGIČKO I SA f 56.
3.3.13 IORLW LOGIČKO ILI W SA KONSTANTOM 57.
3.3.14 IORWF LOGIČKO ILI W SA f 58.
3.3.15 XORLW LOGIČKO ISKLJUČIVO ILI W SA
KONSTANTOM 59.
3.3.16 XORWF LOGIČKO ISKLJUČIVO ILI SA f 60.
3.3.17 INCF UVEĆAJ f 61.
3.3.18 DECF UMANJI f 62.
3.3.19 RLF ROTIRAJ f ULEVO KROZ CARRY 63.
3.3.20 RRF ROTIRAJ f UDESNO KROZ CARRY 64.
3.3.21 COMF KOMPLEMENTIRAJ f 65.
3.3.22 BCF RESETUJ BIT b U f 66.
3.3.23 BCF SETUJ BIT b U f 67.
3.3.24 BTFSC TEST BIT b U f, PRESKOČI AKO JE 0 68.
3.3.25 BTFSS TEST BIT b U f, PRESKOČI AKO JE 1 69.
3.3.26 INCFSZ UVEĆAJ f, PRESKOČI AKO JE 0 70.
3.3.27 DECFSZ UMANJI f, PRESKOČI AKO JE 0 71.
3.3.28 GOTO SKOČI NA ADRESU 72.
3.3.29 CALL POZOVI PODPROGRAM 73.
3.3.30 RETURN POVRATAK IZ PODPROGRAMA 74.
3.3.31 RETLW POVRATAK IZ PODPROGRAMA SA
KONSTANTOM U W 75.
3.3.32 RETFIE POVRATAK IZ PREKIDNE RUTINE 76.
3.3.33 NOP BEZ OPERACIJE 77.
3.3.34 CLRWDT INICIJALIZUJ WATCHDOG TAJMER 78.
3.3.35 SLEEP PRELAZAK U STAND BY MOD 79.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 3
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4. UPUTSTVO ZA MPLAB IDE V5.40 80.


4.1 UVOD 81.
4.2 UPUTSTVO ZA MPLAB IDE V5.40 82.
4.3 GENERISANJE NOVOG PROJEKTA 83.
4.4 SIMULATOR MPLAB-A 87.
4.5 MONTIRANJE I KORIŠĆENJE ICD UREĐAJA 89.
4.6 PICSTART PLUS PROGRAMATOR 94.
5. LABORATORIJSKE VEŽBE SA
EKSPERIMENTALNOM PLOČOM PIC 16F877 96.
5.1 UVOD 97.
5.2 VEŽBA BROJ 1 98.
5.3 VEŽBA BROJ 2 101.
5.4 VEŽBA BROJ 3 104.
5.5 VEŽBA BROJ 4 108.
5.6 VEŽBA BROJ 5 110.
5.7 VEŽBA BROJ 6 112.
LITERATURA 123.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 4
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

0. PREDGOVOR

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 5
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Ova skripta, Mikrokontroleri predstavlja logičan nastavak skripte Mikroračunari, koja


je u izdanju Više Tehničke Škole izišla 2000. godine, i čini s njom jednu celinu.

Pisana je kao i skripta Mikroračunari, teorija sa primerima, i omogućava da se na lak


način savlada gradivo koje je propisano planom i programom Više Tehničke Škole.
Gradivo je obrađeno u pet poglavlja tako, da svako poglavlje čini zaokruženu celinu.

U skripti je obrađena vrlo aktuelna problematika mikrokontrolera PIC familije preko


PIC 16F877 razvojne ploče.

Student koristeći savladano teoretsko znanje iz skripte Mikroračunari može da


proučava arhitekturu PIC 16F877 mikrokontrolera, može da nauči korišćenje MPLAB
okruženja za razvoj softvera, i na razvojnoj ploči, na realnom sistemu razvijeni softver
da testira.

Laboratorijske vežbe opisane u petom poglavlju vode studenta korak po korak do


saznanja, koje će mu omogućiti samostalan rad na razvoju aplikacija sa
mikrokontrolerima u tehnici.

Na kraju skripte je dat spisak literature, korišćenjem ovih izdanja student će dobiti
odgovor na pitanja, koja ne obuhvataju ove skripte. Pošto je skripta vezana za
mikrokontroler iz PIC familije, prilikom pisanja skripte korišćeni su izvori koji su
navedeni u literaturi.

U Subotici, 15.11.2002. István Matijevics

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 6
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1. UVOD

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 7
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1.1 MIKROPROCESOR, MIKRORAČUNAR, MIKROKONTRO-


LER

U skripti se daju elementi arhitekture mikrokontrolera, postupak programiranja i


korišćenja mikrokontrolera u realizaciji digitalnih sistema. Mikroprocesori se mogu
proučavati sa više stanovišta:
• tehnološkog,
• računarskog i
• korisničkog.

Prva dva stanovišta su od interesa za inženjere mikroelektronike i za projektovanje


hardvera. U daljem će se pažnja uglavnom biti posvećena proučavanju
mikrokontrolera sa stanovišta korisnika.

Upisivanje programa u programsku memoriju, sprezanje procesora sa memorijom,


ulazno/izlaznim jedinicama, objektom upravljanja i drugim elementima okruženja je
posao inženjera hardvera. Za uspešno obavljanje ovog dela posla inženjer hardvera
mora poznavati arhitekturu, mogućnost i karakteristike procesora, programsku
podršku i zamisao projektanta hardvera o postupku organizacije rada
mikroprocesorskog sistema u realnom vremenu (Real Time) i o postupku
komunikacije korisnika sa sistemom upravljanja.

U projektovanju digitalnih sistema sreću se pojmovi:


• mikroprocesor,
• mikroračunar i
• mikrokontroler.

1.1.1 MIKROPROCESOR

Pod mikroprocesorom se podrazumeva samo centralna procesorska jedinica (CPU),


koji sadrži aritmetičko-logičku jedinicu (ALU) i upravljačku jedinicu (vidi skriptu
Mikroračunari).

1.1.2 MIKRORAČUNAR

Mikroračunar se dobije sprezanjem mikroprocesora sa operativnom (radnom)


memorijom, ulazno-izlaznim jedinicama i drugim periferijama.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 8
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1.1.3 MIKROKONTROLER

Mikroračunari skromnijih mogućnosti i ograničene namene izvedeni unutar samo


jednog čipa sa kojim se u cilju povećanja mogućnosti i ograničene namene mogu
sprezati spoljni moduli. Kada se mikroračunar fizički izvede u vidu jednog čipa strogo
namenjenog za projektovanje digitalnih sistema naziva se mikrokontroler.

Dakle sa gledišta računarske tehnike razlika između mikroračunara izvedenog u vidu


jednog čipa i mikrokontrolera ne postoji; razlikuju se po nameni. Mikrokontroler u
jednom čipu objedinjuje centralnu procesorsku jedinicu i digitalne module koji
omogućavaju funkcije tipične za procesor informacija u sistemu digitalnih sistema
koji rade u realnom vremenu.

Projektant digitalnog sistemima vidi pomenute mikrokontrolere kao komponente koje


je u stanju programirati i spregnuti sa okruženjem tako da obavljaju zahtevne funkcije
sistema upravljanja. Za razumevanje rada i načina njihovog korišćenja potrebna su
izvesna znanja iz računarske tehnike, koja se mogu izučavati generalno i detaljno ili
samo korisnički posmatrajući određeni mikrokontroler.

1.1.4 HARDVER MIKRORAČUNARA, MIKROKONTROLERA

Najčešće se koristi von Neumann-ov model mikroračunara. Blok šema ovog sistema
se vidi na slici 1.1.

Upravljačka jedinica iz operativne memorije čita određenu instrukciju, realizuje je i


ide na sledeću instrukciju, gde će ponoviti prethodnu operaciju.

Operativna memorija je zajednička za program i za podatke, u principu sve je jedno,


gde se nalaze unutar te zajedničke memorije podaci ili instrukcije. Pošto u ovom
slučaju dužina reči instrukcije, odnosno podataka je ista, i/ili za instrukciju, i/ili za
podatke nije moguće odrediti optimalnu dužinu. Nadalje, kod isčitivanja instrukcije iz
memorije, odnosno podataka
se koristi ista magistrala,
prema tome sporo radi
komunikacija procesor-
memorija.

Slika 1.1: von Neumann-ov


model računara.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 9
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Prednost rešenja je u tome, što je hardver relativno jednostavan, a i u operativnoj


memoriji je jednostavno odrediti odnos dužine blokova program-podaci. Kraći
program sa mnogo podataka, ili duži, komplikovaniji program sa manje podataka
mogu da budu upisani u istu operativnu memoriju.

Računar se sastoji od tri osnovna dela (Slika 1.2):


• centralne procesorske jedinice(CPU-Central Processing Unit),
• memorija i
• ulazno/izlazni priključci (I/O –Input/Output Ports).

Slika 1.2: arhitektura Neumann-ovog modela računara

Harvard arhitektura računara je noviji koncept od von Neumann-ove, a nastala iz


potrebe da se rad mikroprocesora ubrza. Kod harvard arhitekture magistrala podataka
i magistrala adresa su odvojene (slika 1.3).

Slika 1.3: harvardov model računara

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 10
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Time se postiže veći protok informacija kroz centralnu procesorsku jedinicu a samim
tim i veća brzina rada. Odvajanje programske i memorije za podatke dalje
omogućava da instrukcije ne moraju biti 8-bitne reči. U ovom slučaju kod
projektovanja računara može se odrediti optimalna dužina reči instrukcije.

Računar se sastoji od četiri osnovna dela (Slika 1.4):


• centralne procesorske jedinice(CPU-Central Processing Unit),
• programska memorija,
• memorija podataka i
• ulazno/izlazni priključci (I/O –Input/Output Ports).

Slika 1.4: arhitektura harvard-ovog modela računara

Na primer neki mikrokontroleri koriste 14 bita za instrukcije što dozvoljava da sve


instrukcije budu od jedne reči. Tipično još za harvard-sku arhitekturu je da ima manje
instrukcija od Neumann-ove i da se obično izvršavaju u jednom ciklusu.

Mikrokontroleri sa Harvard-skom arhitekturom se još nazivaju i `RISC


mikrokontroleri'. Naziv RISC je nastao od početnih slova engleskih reči Reduced
Instruction Set Computer što u prevodu znači "Računar sa smanjenim brojem
instrukcija". Mikrokontroleri sa von-Neumann-ovom arhitekturom se nazivaju `CISC
mikrokontroleri'. Naziv CISC je nastao od početnih slova engleskih reči Complex
Instruction Set Computer ili u prevodu "Računar sa kompleksnim setom instrukcija".

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 11
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1.1.5 MEMORIJA

Memorija računara se sastoji od velikog broja memorijskih ćelija ili lokacija (registri).
Svaka lokacija se može koristiti za upisivanje određenog broja bita binarne
informacije. Memorija služi za smeštanje binarno kodovanih informacija koje se
odatle po potrebi preuzimaju u procesu rada računara.

U operativnoj memoriji računara su:


• binarni kodovi operacije, koje CPU može da izvrši i
• binarni kodovi brojeva koji učestvuju u procesu obrade zadatog
algoritma.

Skup naredbi smešten u logičan redosled koji odgovara zadatom algoritmu čini
program. Centralna procesorska jedinica preuzima jednu za drugom naredbe iz
zadatog programa i za svaku naredbu pojedinačno izvršava binarno kodovanu
operaciju sadržanu u naredbi. Na taj način se zadati algoritam ili funkcija procesiranja
realizuje programski izvršavanjem naredbi po logičkom redosledu koji odgovara
zadatom algoritmu.

1.1.6 ULAZI - IZLAZI

Računar sadrži ulazne jedinice:


• disk,
• prekidač,
• D/A pretvarač,
• mikrofon,
• tastatura itd.

Računar sadrži izlazne jedinice:


• štampač,
• ploter,
• monitor,
• disk,
• D/A pretvarač,
• relej, itd.

Upravljačka jedinica sinhronizuje rad celog računarskog sistema sa upravljačkim


signalima. CPU preuzima naredbe iz memorije, dekodira njihovu binarnu notaciju i
izvršava njihove operacije.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 12
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1.1.7 ADRESE

U operativnoj memoriji svaku memorijsku lokaciju sačinjava skup od n bita koji


nazivamo reč. Reči u memoriji su istih dužina, tj. sadrže isti broj bita koji nazivamo
dužinom reči. Ova dužina je konstantna i nemože se menjati u korišćenom računaru.
Memorije poseduju različite dužine reči od 8 bita do 128 bita ili više u velikim
računarima opšte namene. Mikroračunari i mikrokontroleri obično imaju dužine reči
od 8 ili 16 bita.

Sve reči u memoriji ili memorijske lokacije imaju svoje adrese, koje počinju od 0 pa
sve do broja ukupnih reči u memoriji. Kapacitet memorije se najčešće izražava nekim
brojem iz povorke 2 N . Tipične memorije mikroračunara su 4096 (=2 12 ) i 8196 (=2 13 )
reči. Za takve memorije kažemo da imaju kapacitete od 4 kilobajta i 8 kilobajta ili 4K
i 8K, respektivno. Memorije većih kapaciteta se dele na stranice od po 1, 2 ili više
kilobajta.

Informacije se upisuju u memoriju ili čitaju iz memorije koristeći adresu lokacije.


Naime, u korištenju računara nikada se ne pozivamo na sadržaj informacije, već
isključivo na adresu memorijske lokacije gde treba upisati odnosno očitati
informaciju. Na prvi pogled ovakav postupak komuniciranja sa memorijom se čini
jednostavnim; ipak, važno je da se pravilno shvati zašto je to tako.

Memorija u kojoj se u toku normalnog rada računara mogu upisivati i iz nje očitavati
sadržaj lokacija naziva se RAM memorija (Random Access Memory). Svaka lokacija
ove memorije se može adresirati u bilo kom trenutku. Kada se isključi napajanje
računara, sadržaji RAM-a se gube. Otuda se ova memorija koristi za upisivanje
podataka, privremenih naredbi ili operanada naredbi.

Memorija sa lokacijama čiji se sadržaji mogu samo očitavati, dakle ne i upisivati, u


toku normalnog rada računara naziva se ROM memorija (Read Only Memory). Ova
memorija se koristi za upisivanje programa koji se izvršava više puta, pa otuda
sadržaji njenih lokacija moraju biti nepromenljivi, čak i u uslovima prekida napajanja
računara. Dakle, sam mikroračunar ne upisuje nove informacije u program; samo
očitava sukcesivne naredbe smeštene u lokacijama ROM-a i izvršava ih. Izvesni
tipovi ROM-a se mogu reprogramirati specijalnim procesom i takve memorije
nazivamo programabilnim ROM-ovima ili PROM-ovima.

1.1.8 CENTRALNA PROCESORSKA JEDINICA (CPU)

CPU je centralna i najvažnija komponenta svakog mikroračunara, mikrokontrolera;


predstavlja deo hardvera, u našem slučaju mikroprocesor, koji vrši obradu podataka i
upravlja funkcijama svih ostalih delova mikroračunara, mikrokontrolera.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 13
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

CPU je takođe odgovoran za pravilno izvršavanje svih funkcija mikroračunara. CPU


generiše većinu impulsa (upravljačkih signala) za kontrolu vremenskog redosleda po
kome spoljne jedinice komuniciraju sa računarom. Većinu upravljačkih funkcija
računara vrši hardver ili mašina sa konačnim brojem stanja ili FSN (Finite-State-
Machine), koja je deo CPU-a. Ova mašina primorava procesor da sekvencijalno
izvršava naredbe upisanog programa. Kad uključimo napajanje računara, FSM zna
odakle treba da očita prvu naredbu iz programa. Kada preuzme neku naredbu, upiše je
u registar naredbi gde se dekodira tako da CPU zna tačno koju operaciju treba da
izvrši. Tipičan CPU se sastoji iz međusobno spregnutih:
• registara ,
• aritmetičko-logičke jedinice(ALU) i
• logičkih modula za kontrolu vremenskog redosleda i upravljanja.

1.1.9 ARITMETIČKO-LOGIČKA JEDINICA

ALU je deo CPU-a izveden u vidu logičkih kola koja omogućavaju izvršavanje
aritmetičkih i logičkih operacija nad podacima u binarnom kodu. Brojni procesori
imaju relativno proste ALU-e koji ne mogu da izvrše operacije množenja i delenja. Sa
takvim procesorima ove operacije se izvode programski-svođenjem, npr operacije
množenja na više sukcesivnih operacija sabiranja i rotiranja međurezultata.

ALU (slika 1.5) poseduje, takođe, izvestan broj registara za upisivanje podataka
(operanada) u vidu digitalnih reči. Na početku zadate operacije podatak se dostavlja u
ALU posredstvom upravljačkih kola CPU-a. ALU zatim izvršava aritmetičku ili
logičku operaciju zadatu preko kontrolera CPU-a i upisuje rezultate u poseban registar
CPU-a koji se naziva akumulator (ACC). Osim toga, po završetku zadate operacije,
ALU daje informaciju o nekoj osobenosti dobijenog rezultata. Na primer, ako ALU
oduzme dva broja, neophodno je da nas istovremeno sa pojavom rezultata u ACC
obavesti da li je rezultat veći, jednak ili manji od 0. Na sličan način, biće potrebno pri
sabiranju dva broja da nas ALU izvesti da li je brojna vrednost rezultata u binarnom
kodu duža od 8 bita, tj. da li je rezultat prekoračio 8 bita jednog bajta i preneo se u 9-ti
bit. Popularno se kaže da ALU daje signal zastavicom (flag-om) kojim nas upozorava
na neku osobenost dobijenog rezultata. Opcije mikroračunara uslovljene flegovima
biće kasnije detaljno opisane.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 14
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 1.5: aritmetičko-logička jedinica

1.1.10 REGISTRI

Registri su specijalne memorijske lokacije u samom CPU-u.

Mikroprocesori poseduju specijalan registar ACC (akumulator), kod nekih


mikrokontrolera naziv ovog registra je W (Work – radni registar). U većini
mikroprocesora i mikrokontrolera ovaj registar je osmobitni ili šesnaestnobitni.
Osobenosti akumulatora su dvojake. U većini mašina zadata aritmetička ili logička
operacija se ne može izvesti nad sadržajima bilo koja dva radna registra unutar CPU-
a; jedan od njih mora biti akumulator. Štaviše, rezultat izvršene operacije uvek ostaje
upisan u ACC.

Druga važna osobenost ACC ogleda se u njegovoj ulozi posrednika u procesu


podataka između memorije i CPU-a. Naime, ovaj prenos se uvek vrši preko ACC.
Stoga postoje naredbe za upisivanje sadržaja memoriske lokacije u ACC, kao i
naredbe za upisivanje sadržaja ACC u memorijsku lokaciju, jer je samo ACC snop
elektronskih provodnika povezanih sa memorijom. Štaviše, sadržaj ACC se može
neposredno upisati u bilo koji registar unutar CPU-a, takođe bilo koji par registara
unutar CPU-a može neposredno razmenjivati svoje sadržaje.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 15
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Pored pomenutog registara ACC mikroprocesor ima nekoliko dodatnih registara


specijalne namene, kao što su programski brojač (PC-Program Counter), pokazatelj
vrha magacinske memorije (SP-Stack Pointer), statusni registar (PSW) i dr.

Obično registar PC je šesnaestobitni jer se u njemu upisuju adrese memorijskih


lokacija, dok su registri SP i PSW osmobitni ili šesnaestobitni.

1.1.11 MAGISTRALE (SABIRNICE)

Da bi neka mašina mogla brzo i pouzdano da izvršava zadate operacije, mora se


uspostaviti i održavati stalna veza između ovih hardverskih komponenata:
• CPU-om,
• memorijom i
• I/ O portovima.

Takva povezivanja se izvode magistralama koje zapravo, predstavljaju snopove


električnih provodnika grupisanih prema prirodi digitalnih signala koje prenose. Na
slici 1.6 su prikazani osnovni moduli povezani magistralama.

Slika 1.6: arhitektura mikroračunara, mikrokontrolera

Magisrala podataka je snop od osam provodnika koji prenose pojedine bitove


podataka i to u oba smera na relacijama između CPU-a, memorije i I/O portova.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 16
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Adresna magistrala je snop od 16 provodnika koji povezuju memoriju, CPU i I/ O


portove; snopom se prenose bitovi adresa memorijskih lokacija ili I/ O portova. Po
ovoj magistrali adrese se prenose samo u jednom smeru od CPU-a ka memoriji i I/ O
portovima.

Upravljačka magistral predstavlja snop provodnika koji povezuju memoriju, I/O


portove i CPU. Po magistrali se prenose bitovi informacije u smeru od CPU-a ka
memoriji i I/O portovima, koji određuju aktivnosti koje se mogu realizovati. Tipovi
aktivnosti mogu biti:
• očitaj sadržaj memoriske lokacije,
• upiši podatak u memorijsku lokaciju,
• očitaj prispeli podatak na I/O portu,
• prenesi podatak dobijen u rezultatu procesiranja na I/O portu,
• potvrdi nastanak signala prekida itd.

Prednost korišćenja magistrala je očigledna: umesto pojedinačnih provodnika za


povezivanje parova brojnih komponenti računara veze između komponenti se
ostvaruju snopovima provodnika, koji se protežu kroz ceo sistem. Razume se, pri
ovakvom povezivanju arhitekta računara mora predvideti obezbeđenje da nikad dva
podatka ili dve informacije ne budu istovremeno potisnute na istu magistralu.

1.1.12 REGISTAR NAREDBI I DEKODER

Svaka operacija koju CPU mikrokontrolera može da izvrši se indentifikuje svojim


bajtom (digitalnom reči od 8 bita), koji se naziva kod operacije (OP CODE-Operation
Code). Pošto je sa 8 bita moguće formirati 256(=2 8 ) različitih bajtova, osmobitni
mikroračunari imaju najčešće 256 ili manje bajtova u naredbama. Ali, budući da
jedna naredba može imati najmanje jedan a najviše tri bajta, ukupan broj naredbi je
manji od 256.

Kod mikrokontrolera pošto organizacija programske memorije ne zavisi od memorije


podataka realizovana je obično 14 bitna struktura, koja struktura je optimalna za
kodiranje oko 30 40 instrukcija.

Uloga registra naredbi i dekodera (IRD-Instruction Register and Decoder) je da


informišu CPU o tipu naredbe čije izvršenje zahteva programer, dajući mu binarno
kodovanu verziju naredbe. Pretpostavimo da CPU zna da je sledeća naredba upisana u
memorijsku lokaciju sa adresom 15. Centralna procesorska jedinica će tada poslati
binarno kodovani broj 00000000 00001111 (=15dec) na adresnu magistralu i signale
na memoriju preko upravljačke magistrale. Pretpostavimo da je binarni kod podatka u
lokaciji 15 jednak 01001000. Adresirana lokacija će se odazvati na upravljački signal
dostavljanjem svog sadržaja 01001000 na magistralu podataka. Pošto CPU zna da
broj 01001000 u ovom slučaju nije podatak, već binarno kodovana naredba, on neće
broj dostaviti u akumulator, već u registar naredbi i dekoder (IRD). Registarski deo
IRD-a služi za upisivanje prispelog podatka, a dekoder, koji u stvari predstavlja mrežu

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 17
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

logičkih kola, dekodira svaki prispeli podatak (naredbu) u upravljački signal koji
aktivira svoj mehanizam unutar CPU-a za izvršavanje prispele naredbe.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 18
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2. MIKROKONTROLER PIC 16F877

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 19
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.1 UVOD

PIC 16F877 spada u 8-bitne mikrokontrolere RISC arhitekture. Njegova uopštena


struktura je predstavljena na slici 2.1 sa osnovnim blokovima.

Slika 2.1: blok šema mikrokontrolera PIC16F877

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 20
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Programska memorija (FLASH) je namenjena za smeštanje napisanog programa.


Kako se memorija izrađena u FLASH tehnologiji može više puta brisati i
programirati, zbog toga je ovaj mikrokontroler pogodan za razvoj uređaja.

EEPROM memorija je namenjena za podatke koje treba sačuvati i kada napajanja


nema. Obično se koristi za smeštanje važnih podataka koji ne smeju biti izgubljeni,
ako napajanje iznenada nestane. Jedan od takvih podataka je npr. zadata temperatura
kod regulatora temperature. Ako bi nestankom napajanja ova informacija bila
izgubljena, onda bi po ponovnom dovođenju napajanja bilo potrebno još jednom
izvršiti podešavanje, čime uređaj gubi na svojoj samostalnosti u radu.

RAM memorija namenjena je za podatke koje koristi program u svom izvršavanju. U


RAM se smeštaju svi međurezultati ili privremeni podaci koje nisu od važnosti za rad
uređaja u slučaju nestanka napajanja.

PORTA, PORTB, PORTC, PORTD i PORTE koriste se za fizičke veze


mikrokontrolera sa spoljnim svetom. Port A ima šest nožica, portovi B, C i D osam, a
port E tri nožice (pin-ova).

SLOBODNI BROJAČ je osmobitni registar unutar mikrokontrolera koji radi


nezavisno od programa. Na svaki četvrti takt iz oscilatora on uveća svoju vrednost
dok ne dostigne maksimum (255), a onda brojanje kreće ponovo od nule. Kako se
tačno zna vreme između svaka dva uvećanja sadržaja brojača, on se može iskoristiti
za merenje vremena što je veoma korisno kod nekih uređaja.

CENTRALNA PROCESORSKA JEDINICA vrši ulogu veznog elementa između


ostalih blokova mikrokontrolera. Ona koordinira rad ostalih blokova i izvršava
korisnički program.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 21
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.2 CISC I RISC ARHITEKTURE

Već je rečeno da PIC16F877 ima RISC arhitekturu. Ovaj pojam se često sreće u
računarskoj literaturi i potrebno ga je malo detaljnije objasniti. Harvard-ska
arhitektura je noviji koncept od von Neumann-ove, a nastala iz potrebe da se rad
mikroprocesora ubrza. Kod harvard-ske arhitekture magistrala podataka i magistrala
adresa su odvojene. Time se postiže veći protok informacija kroz centralnu
procesorsku jedinicu a samim tim i veća brzina rada. Odvajanje programske i
memorije za podatke dalje omogućava da instrukcije ne moraju biti 8-bitne reči.
PIC16F877 koristi 14-bita za instrukcije što dozvoljava da sve instrukcije imaju
dužinu od jedne reči. Tipično još za harvard-sku arhitekturu je da ima manje
instrukcija od von Neumann-ove i da se instrukcije obično izvršavaju u jednom
ciklusu.

Mikrokontroleri sa harvard-skom arhitekturom se još nazivaju i `RISC


mikrokontroleri'. Naziv RISC je nastao od početnih slova engleskih reči Reduced
Instruction Set Computer što u prevodu znači "Računar sa smanjenim brojem
instrukcija". Mikrokontroleri sa von Neumann-ovom arhitekturom se nazivaju `CISC
mikrokontroleri'. Naziv CISC je nastao od početnih slova engleskih reči Complex
Instruction Set Computer ili u prevodu "Računar sa kompleksnim setom instrukcija".

Kako je PIC16F877 RISC mikrokontroler to znači da ima smanjen set instrukcija,


tačnije 35 (npr. Intel-ovi i Motorolini mikrokontroleri imaju preko sto instrukcija)
koje se sve izvršavaju u jednom ciklusu sem instrukcija skokova i grananja. Po
rečima proizvođača PIC 16F877 obično dostiže rezultate od 2:1 u kompresiji koda i
4:1 u brzini u odnosu na druge 8-bitne mikrokontrolere u svojoj klasi.

Razlika između Neumann-ove i harvard-ske arhitekture je na slici 2.1.

Slika 2.2: razlika između arhitekture CISC i RISC

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 22
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.3 PODRUČJA PRIMENE MIKROKONTROLERA PIC 16F877

PIC 16F877 savršeno odgovara za razne primene, od automobilske industrije i


kontrole kućnih uređaja do industrijskih uređaja, daljinskih senzora, elektronskih
brava i sigurnosnih uređaja. Takođe je idealan za "smart" kartice kao i za baterijski
napajane uređaje zbog svoje male potrošnje.

EEPROM memorija olakšava primenu mikrokontrolera u uređajima gde je potrebno


trajno čuvanje raznih parametara (kodovi za predajnike, brzine motora, frekvencije
prijemnika, itd.). Niska cena, mala potrošnja, lakoća upotrebe i fleksibilnost čine
PIC16F877 upotrebljivim, čak i u oblastima u kojima se ranije nije ni razmatrala
upotreba mikrokontrolera (npr. tajmerske funkcije, zamena za veznu logiku u većim
sistemima, koprocesorske aplikacije itd.).

Programabilnost unutar sistema (In System Programmability) ovog čipa (uz


korišćenje samo dve nožice za prenos podataka) omogućava fleksibilnost proizvoda
posle potpunog sastavljanja i testiranja. Ova mogućnost može biti iskorišćena za
serijalizovanje proizvodnje, čuvanje kalibracijskih podataka dostupnih samo po
finalnom testiranju ili poboljšavanje programa na završenim proizvodima.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 23
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.4 TAKT FREKVENCIJA I INSTRUKCIJSKI CIKLUS

Takt je osnovni pokretač mikrokontrolera i dobija se iz spoljne komponente zvane


"oscilator". Takt se još u žargonu zove i "klok" po engleskoj reči Clock. Zadatak
oscilatora je sinhronizacija rada mikrokontrolera.

Takt iz oscilatora u mikrokontroler ulazi preko nožice OSCI gde ga interno kolo u
mikrokontroleru deli na četri podjednaka takta Q1, Q2, Q3 i Q4 koji se ne preklapaju.
Ova četri takta čine jedan instrukcijski ciklus (u žargonu se još naziva i mašinski
ciklus) u kome se izvršava jedna instrukcija.

Izvršenje instrukcije kreće pozivanjem instrukcije koja je na redu iz programske


memorije na svaki Ql, i njenim upisom u instrukcijski registar na Q4. Dešifrovanje i
izvršavanje instrukcije se obavlja između narednih Q1 i Q4 ciklusa. Na slici 2.3 se
vidi odnos instrukcijskog ciklusa i takta oscilatora (OSCI) kao i internih taktova Q1-
Q4. Sa PC je označen programski brojač (Program Counter) koji sadrži informaciju o
adresi naredne instrukcije.

Slika 2.3: vremenski dijagram izvršenja instrukcije

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 24
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.5 PROTOČNA OBRADA INSTRUKCIJA (PIPELINING)

"Instrukcijski ciklus" se sastoji iz ciklusa Ql, Q2, Q3 i Q4. Ciklusi pozivanja i


izvršavanja instrukcija su tako povezani da je za pozivanje potreban jedan
instrukcijski ciklus, a za dešifrovanje i izvršavanje još jedan. Međutim, zbog protočne
obrade, svaka instrukcija se efektivno izvršava u jednom ciklusu. Ako instrukcija
prouzrokuje promenu na programskom brojaču tj. on ne ukazuje na narednu adresu
već na neku drugu (što je slučaj sa skokovima ili pozivanjem podprograma), onda su
potrebna dva ciklusa za izvršavanje instrukcije jer se mora ponovo uzeti u obradu
instrukcija, ali ovaj put sa prave adrese.

Ciklus pozivanja počinje na Ql taktu, upisivanjem u "instrukcijski registar (IR)" a


dešifrovanje i izvršavanje tokom Q2, Q3 i Q4 takta (slika 2.4).

Slika 2.4: protočna obrada instrukcija

U tabeli 2.1 je dato objašnjenje za vremenski dijagram sa slike 2.4

Tabela 2.1: protočna obrada instrukcija kod mikrokontrolera PIC 16F877


TCY0 učitava se instrukcija MOVLW 55h (nije nam bitno koja se instrukcija tada
izvršila zbog čega i nema donjeg pravougaonika)
TCY1 izvršava se instrukcija MOVLW 55h i učitava MOVWF PORTB
TCY2 izvršava se MOVWF PORTB a učitava CALL SUB_1
TCY3 izvršava se poziv podprograma CALL SUB_1 i učitava instrukcija BSF
PORTA, BIT3. Kako ova instrukcija nije ona koja nam treba, tj. nije prva
instrukcija podprograma SUB_1 čije je izvršenje na redu mora se učitati
ponovo instrukcija. Ovo je dobar primer kada za izvršenje instrukcije treba
više od jednog ciklusa
TCY4 instrukcijski ciklus je ceo iskorišćen za učitavanje prve instrukcije iz
podprograma na adresi SUB_1
TCY5 izvršava se prva instrukcija iz podprograma SUB_1 i učitava naredna

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 25
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.6 ZNAČENJE NOŽICA (PINOVA)

PIC16F877 ima ukupno 40 nožica (slika 2.5). Najčešće je u varijanti DIP 40 kućišta
ali se može sresti i u SMD kućištu koje je manje od DIP-a. Skraćenica DIP je nastala
od početnih slova engleskih reči "Dual In Package" što bi u prevodu značilo
"pakovanje sa nožicama sa obe strane". SMD je takode skraćenica od početnih slova
engleskih reči "Surface Mount Devices" ili u prevodu "komponente za površinsku
montažu" asocirajući da za lemljenje ove vrste komponenti nije potrebno imati rupe
kroz koje bi nožice prošle i bile zalemljene. Pin je žargonski izraz za nožicu
elektronskog kola ili jasnije rečeno spoljni izvod.

Slika 2.5: raspored nožica mikrokontrolera PIC 16F877

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 26
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.7 GENERATOR TAKTA-OSCILATOR

Oscilatorno kolo se koristi kako bi se obezbedio takt mikrokontroleru. Takt je


potreban da bi mikrokontroler bio u mogućnosti da izvršava program tj. programske
instrukcije.

2.7.1 TIPOVI OSCILATORA

PIC16F877 može da radi sa četiri različite oscilatorske konfiguracije. Kako su


konfiguracije sa kristalnim oscilatorom i otpornik-kondenzator (RC) najzastupljenije,
biće pomenute samo one. Tip mikorokontrolera sa kristalnim oscilatorom u svojoj
oznaci ima XT a sa otpornik-kondenzator parom RC. Ovo je bitno, jer je važno
navesti tip oscilatora prilikom kupovine mikrokontrolera.

XT oscilator

Kristalni oscilator je smešten u metalno kućište sa dva izvoda na kome je naznačena


frekvencija na kojoj kristal osciluje. Na svaku nožicu potrebno je spojiti po jedan
keramički kondenzator od 30pF čiji se drugi kraj spaja na masu (slika 2.6).

Slika 2.6: povezivanje kvarcnog oscilatora (XT) za zadavanje


takta mikrokontroleru

Oscilator i kondenzatori mogu biti upakovani u zajedničko kućište sa tri izvoda.


Takav element se naziva "keramički rezonator" i prestavlja se u šemama kao što je to
prikazano na slici 2.7.

Srednji izvod elementa je masa dok se krajnji izvodi spajaju sa OSC1 i OSC2
pinovima mikrokontrolera. Pravilo je da se pri projektovanju uređaja oscilator stavlja
što bliže mikrokontroleru kako ne bi došlo do smetnji na linijama preko kojih
mikrokontroler dobija takt.

Slika 2.7: povezivanje rezonatora na


mikrokontroler

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 27
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

RC oscilator

Za aplikacije u kojima nije potrebna izuzetna vremenska preciznost, RC oscilator


(slika 2.8) nudi dodatnu uštedu na ceni. Rezonantna frekvencija RC oscilatora zavisi
od vrednosti napona napajanja, otpornosti R, kapacitivnosti C i radne temperature.
Treba napomenuti da na rezonantnu učestanost imaju uticaja i normalne varijacije
parametara procesa, tolerancija eksternih R i C komponenata itd. Pin Takt/4 se može
konfigurisati kao ulazno-izlazni pin.

Slika 2.8: RC oscilator

Gornja slika prikazuje kako se RC oscilator vezuje na PIC16C877. Sa vrednostima


otpornika R ispod 2.2kΩ, oscilator može postati nestabilan, ili čak zaustaviti
oscilovanje, a sa vrlo visokim vrednostima R (npr. 1MΩ) postaje osetljiv na šum i
vlagu. Preporučuje se da vrednost otpornika R bude izmedu 3 kΩ i 100 kΩ. Iako će
oscilator raditi i bez eksternog kondenzatora (C = 0pF), preporučuje se da se ipak
koristiti kondenzator iznad 20pF zbog šuma i stabilnosti.

Bez obzira koji oscilator se koristi, njegov takt se deli sa 4, kako bi se dobio takt na
kome mikrokontroler radi. Takt oscilatora podeljen sa 4, dobija se i na
OSC2/CLKOUT nožici, i može se koristiti za testiranje ili sinhronizovanje drugih
logičkih kola (na primer A/D pretvarača), slika 2.9

Slika 2.9: odnos takta i broja instrukcijskih ciklusa

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 28
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Nakon dovođenja napajanja oscilator kreće sa oscilovanjem koje isprva ima


neravnomernu periodu i amplitudu da bi se nakon isteka nekog vremena njegov rad
ustalio (slika 2.10).

Slika 2.10: takt-frek-


vencija nakon uključiva-
nja mikrokontrolera

Da bi sprečili da ovakav nepravilan takt utiče na rad mikrokontrolera, potrebno je za


vreme stabilizacije takta oscilatora držati mikrokontroler u resetovanom stanju.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 29
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.8 RESET LOGIKA

Reset se koristi za dovođenje mikrokontrolera u «poznato» stanje (početno stanje). To


praktično znači, da se mikrokontroler pod određenim nepovoljnim uslovima može
ponašati nepravilno. Da bi se nastavio pravilan rad potrebno ga je resetovati, kako bi
se svi registri postavili u početni položaj. Reset se ne koristi samo kada se
mikrokontroler ne ponaša kako želimo, on se može koristiti i kao prekid izvršenja
programa prilikom isprobavanja uređaja ili pripreme mikrokontrolera za učitavanje
programa.

Slika 2.11: Korišćenje


unutrašnjeg reset kola

Da bi sprečili slučajno dovođenje logičke nule na pin MCLR (slika 2.11), potrebno ga
je preko otpornika spojiti na pozitivan pol napajanja (+ 5 V). Otpornik treba da je
vrednosti izmedu 5 kΩ i l0 kΩ. Ova vrsta otpornika čija je uloga da određenu liniju
preventivno drži na logičkoj jedinici naziva se "pull-up" što bi u prevodu značilo
"podići liniju".

Mikrokontroler PIC16F877 poznaje nekoliko izvora reseta:


• resetovanje pri dovođenju napajanja, POR Power-On Reset),
• resetovanjem tokom regularnog rada dovodenjem logičke nule na pin MCLR
mikrokontrolera,
• resetovanjem za vreme SLEEP režima,
• resetovanje na prekoračenju sigurnosnog brojača (WDT) tokom regularnog
rada i
• resetovanje na prekoračenju sigurnosnog brojača (WDT) tokom SLEEP
režima rada.

Za nas su najvažniji izvori reseta naznačena u redosledu kao prvi i drugi. Prvi se javlja
svaki put kada se dovede napajanje mikrokontroleru i služi da se svi registri dovedu u
početno stanje, a drugi je proizvod namernog dovodenja logičke nule na pin MCLR u
toku normalnog rada mikrokontrolera. Ovaj drugi se često koristi prilikom razvijanja
programa.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 30
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Prilikom reseta, memorijske lokacije RAM-a se ne resetuju, oni su nepoznati na


uključenju i ne menjaju se na bilo kom resetovanju. Za razliku od njih SFR registri se
resetuju na polazno stanje. Jedan od najvažnijih efekata reseta je postavljanje
programskog brojača (PC) na nulu (0000h) čime se obezbeđuje da program počne da
se izvršava od prve napisane instrukcije.

Reset na pad napona ispod dozvoljene granice (Brown-out Reset)

Impuls za resetovanje pri dovodenju napajanja (pri uključenju) generiše sam


mikrokontroler kada detektuje porast napona Vdd (u opsegu od 1.2V do 1.8V).
Trajanje tog impulsa iznosi 72 ms što je dovoljno vreme da bi se oscilator
stabilizovao. Ove 72 ms obezbeduje interni brojač PWRT koji ima sam svoj RC
oscilator (slika 2.12).

Slika 2.12: primer rada pri padu napona ispod dozvoljene granice

Mikrokontroler je u reset stanju sve dok je PWRT aktivan. Međutim, problem nastaje
u toku rada uređaja kada napajanje ne padne na nulu već se samo smanji i to ispod
granice koja garantuje pravilan rad mikrokontrolera. Ovo je moguć slučaj u praksi
pogotovo u industrijskim okruženjima gde su smetnje i nestabilnost napajanja
svakodnevna pojava. Da bi se ovaj problem razrešio potrebno je osigurati da
mikrokontroler bude u reset stanju svaki put kada napajanje padne ispod dozvoljene
granice.

Ukoliko po električnoj specifikaciji interno reset kolo mikrokontrolera ne može da


zadovolji potrebe, mogu se iskoristiti posebne elektronske komponente koje su u
stanju da generišu željeni reset signal. Pored te funkcije mogu imati i funkciju
nadgledanja napona napajanja. Ukoliko napon padne ispod određenog nivoa
pojavljuje se logička nula na MCLR pinu, koja mikrokontroler drži u reset stanju sve
dok napon ponovo ne bude u granicama koje garantuju ispravan rad.
Ù

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 31
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.9 CENTRALNA PROCESORSKA JEDINICA

Centralna procesorska jedinica se u stručnoj literaturi označava kao CPU (слика


2.13). Skraćenica je nastala od početnih slova engleskih reči "Centrall Procesing Unit
"pa se odatle i u svakodnevnom govoru zove CPU. CPU se obično shvata kao
"mozak" mikrokontrolera. Taj deo je odgovoran za pronalaženje i pribavljanje
odgovarajuće instrukcije koja se treba izvršiti, dekodiranje te instrukcije i na kraju
njeno izvršenje.

Slika 2.13: šema centralne procesorske jedinice - CPU

Centralna procesorska jedinica povezuje sve delove mikrokontrolera u jednu celinu.


Najvažnija uloga je svakako dekodiranje programskih instrukcija. Kada programer
napiše program, instrukcije imaju za čoveka jasan oblik kao npr.:

MOVLW 0x20.

Međutim, da bi mikrokontroler to razumeo, taj "slovni" oblik instrukcije se mora


prevesti u niz nula i jedinica koji se naziva "opkod" po engleskoj reči "opcode ". Taj
prevod iz slovnog u binarni oblik rade prevodioci kao što je npr. asemblerski
prevodilac (skraćeno ga svi zovu "asembler"). Tako dobijenu instrukciju iz
programske memorije centralna procesorska jedinica mora da dekoduje da bi se iz
tabele svih instrukcija izabrao skup akcija koje izvršavaju potreban zadatak definisan
u toj instrukciji. Kako instrukcije u sebi mogu sadržati zadatke koji zahtevaju razna
prebacivanja podataka iz jedne memorije u drugu, iz memorije na portove ili neka
izračunavanja, to onda CPU mora biti povezan sa svim delovima mikrokontrolera.
Ovo omogućuje magistrala podataka i adresna magistrala.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 32
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.10 ARITMETIČKO LOGIČKA JEDINICA

Aritmetičko logička jedinica (Arithmetic Logic Unit -ALU) zadužena je za obavljanje


operacija sabiranja, oduzimanja, pomeranja (levo ili desno unutar registra) i logičkih
operacija. Pomeranje podatka unutar registra je poznatije još i kao "šiftovanje". Naziv
je nastao od engleske reči "shift" što znači «pomeriti». Kako je ovaj termin odomaćen,
koristiće se u daljem tekstu. PIC16F877 sadrži 8-bitnu aritmetičko logičku jedinicu i
8-bitne radne registre (слика 2.14).

Slika 2.14: aritmetičko-logička jedinica i način njenog rada

U instrukcijama sa dva operanda, obično je jedan operand u radnom registru (W


registar), a drugi je neki od registara ili konstanta. Pod "operandom" se podrazumeva
sadržaj nad kojim se vrši neka operacija, a registar je bilo koji od GPR ili SFR
registara. GPR je skraćenica od «General Purposes Registers» a SFR od «Special
Function Registers». U instrukcijama sa jednim operandom, operand je ili W registar
ili neki od drugih registara. Kao dodatak za izvođenje aritmetičkih i logičkih
operacija, ALU kontroliše statusne bitove (bitovi koji se nalaze u STATUS registru).
Izvršavanje nekih instrukcija utiče na status bitove, što zavisi od stanja samog
rezultata. Zavisno od instrukcije koja se izvršava, ALU može uticati na vrednost
Carry bita (C), Digit Carry (DC), i Zero (Z) bitova u STATUS registru.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 33
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.11 PORTOVI

"Port" je engleski izraz za grupu pinova mikrokontrolera kojima se istovremeno


može pristupati tj. postaviti željenu kombinaciju nula i jedinica na njih ili sa njih
pročitati postojeće stanje. Kako je reč "port" duboko odomaćena, koristiće se u
daljem tekstu.

Fizički, port (slika 2.15) je registar unutar mikrokontrolera koji je provodnicima


povezan sa pinovima mikrokontrolera. Portovi su fizička veza Centralne Procesorske
Jedinice sa spoljnim svetom. Mikrokontroler ih koristi da bi nadgledao ili upravljao
sa drugim komponentama ili uredajima. Zbog funkcionalnosti neki pinovi imaju
dvojnu ulogu. Biranje jedne od ove dve funkcije pina vrši se u nekom od
konfiguracionih registara.

Slika 2.15: odnos TRISA i PORTA registra.

Svi pinovi portova mogu se definisati (iz programa) kao ulazni ili kao izlazni, već
prema potrebama uređaja koji se razvija. Da bi definisali pin kao ulazni ili kao
izlazni mora se u registar TRIS upisati odgovarajuća kombinacija nula i jedinica. Ako
je na odgovarajućem mestu u TRIS registru upisana logička jedinica "1" onda je taj
pin ulazni, u obratnom slučaju pin je izlazni. Svaki port ima svoj odgovarajući TRIS
registar.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 34
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.12 ORGANIZACIJA MEMORIJE

PIC16F877 ima dva odvojena memorijska bloka, jedan za podatke a drugi za


program (slika 2.16). Blok za podatke čine EEPROM memorija i GPR registri u RAM
memoriji, a programski blok čini FLASH memorija.

2.12.1 PROGRAMSKA MEMORIJA

Programska memorija je realizovana u FLASH tehnologiji što omogućava da se


mikrokontroler programira više puta pre nego što se ugradi u uređaj, a i nakon
ugradnje ako dođe do eventualnih izmena programa ili parametara procesa. Veličina
programske memorije iznosi 1024 lokacije širine 14 bita gde su nulta i četvrta
lokacija rezervisane za reset i prekidni vektor.

2.12.2 MEMORIJA ZA PODATKE

Memorija za podatke se sastoji od EEPROM memorije i RAM memorije.

EEPROM memorija se sastoji od 64 osmobitne lokacije čiji se sadržaj ne gubi pri prekidu
napajanja. EEPROM se ne nalazi direktno u memorijskom prostoru već mu se pristupa
indirektno preko EEADR i EEDATA registara. Kako EEPROM memorija obično služi za
čuvanje važnih parametara (npr. zadanu ternperaturu kod temperaturnih regulatora) postoji
tačna procedura za upis u EEPROM koja se mora ispoštovati kako bi se izbegao slučajan
upis.

RAM memorija za podatke zauzima prostor u memorijskoj mapi od lokacije 0x0C do 0x4F
što iznosi 68 lokacija. Lokacije RAM memorije se još nazivaju i GPR registri od početnih
slova engleskih reči «General Purpose Registers» ili registri opšte namene. GPR registrima
se pristupa bez obzira koja je banka trenutno izabrana.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 35
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 2.16: memorijska organizacija mirokontrolera PIC 16F877

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 36
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.13 PROGRAMSKI BROJAČ

Programski brojač (PC) je 13-to bitni registar koji sadrži adresu instrukcije koja se
izvršava. Njegovim uvećavanjem ili promenom (npr. u slučaju skoka) mikrokontroler
izvršava jednu po jednu instrukciju programa.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 37
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.14 STEK MEMORIJA

PIC16F877 ima 13-bitni stek (Stack) sa 8 nivoa ili drugim rečima, grupisanih 8
memorijskih lokacija širine 13 bita sa posebnom namenom. Njegova osnovna uloga je
da sačuva vrednost programskog brojača nakon što se iz glavnog programa skoči na
adresu podprograma koji se izvršava. Da bi program znao da se vrati na mesto odakle
je pošao, mora sa steka da vrati vrednost programskog brojača. Pri prelasku iz
programa u podprogram, programski brojač se potiskuje na stek (primer je instrukcija
CALL), a pri izvršenju instrukcija kao što su RETURN, RETLW ili RETFIE koje se
izvršavaju na kraju podprograma, vraća sa steka da bi program mogao da nastavi tamo
gde je stao pre nego što je bio prekinut. Ove operacije stavljanja i vraćanja sa steka
programskog brojača u žargonu se nazivaju PUSH i POP po instrukcijama koje pod
istim imenom postoje na nekim većim mikrokontrolerima.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 38
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

2.15 PROGRAMIRANJE UNUTAR SISTEMA - IN SYSTEM


PROGRAMIG:

Da bi se programirala programska memorija, mikrokontroler mora biti postavljen u


specijalni režim rada podizanjem MCLR nožice na napon od 13.5V, a napon
napajanja Vdd mora biti stabilan izmedu 4.5 V do 5.5 V. Programska memorija se
može programirati serijski, korišćenjem dve «data/clock» nožice koje prethodno
moraju biti odspojene sa linija u uređaju, kako ne bi došlo do grešaka pri
programiranju.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 39
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3. SET INSTRUKCIJA MIKROKONTROLERA


FAMILIJE PIC 16FXX

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 40
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.1 UVOD

Kompletan set koji obuhvata 35 instrukcija dat je u tabeli 3.1. Razlog ovako malog
broja instrukcija leži pre svega u činjenici da se radi o RISC mikrokontroleru čije su
instrukcije dobro optimizovane sa gledišta brzine rada, jednostavnosti arhitekture i
kompaktnosti koda. Jedina "mana" je, što se od programera očekuje da savlada
"neudobnu" tehniku korišćenja skromnog seta od 35 instrukcija.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 41
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.2 INSTRUKCIJE MIKROKONTROLERA

Različite instrukcije po zadacima možemo grupisati kao i instrukcije za:


• prenos podataka,
• aritmetičke i logičke operacije,
• operacije nad bitovima i
• upravljanje tokom programa.

3.2.1 PRENOS PODATAKA

Prenos podataka u mikrokontroleru obavlja se između radnog (W registra) i "f"


registra koji predstavlja bilo koju lokaciju internog RAM-a (bez obzira da li su to
registri specijalne ili opšte namene).

Prve tri instrukcije obezbeđuju (tabela 3.1) upis konstante u W registar (MOVLW je
skaraćenica od MOVe Literal to W), zatim prepis podatka iz W registra u RAM i
prepis podataka iz RAM-a u W registar (ili u istu tu lokaciju RAM-a, pri čemu se
menja samo stanje flega Z). Instrukcija CLRF upisuje konstantu 0 u f registar, a
CLRW upisuje konstantu 0 u W registar. SWAPF instrukcija unakrsno izmeni mesta
četvorobitnim poljima (niblovima) unutar registra.

3.2.2 ARITMETIČKE I LOGIČKE OPERACIJE

Od svih aritmetičkih operacija, PIC kao i većina mikrokontrolera podržava samo


sabiranje i oduzimanje. Flegovi C, DC, Z postavljaju se u zavisnosti od rezultata
sabiranja ili oduzimanja, ali sa jednim izuzetkom: pošto se oduzimanje obavlja kao
sabiranje sa negativnom vrednošću, fleg C je posle oduzimanja inverzan, znači
setovan je ako je operacija moguća, a resetovan 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 sadržaj registra, pomeraju bitove unutar registra kroz fleg C
za po jedno mesto ulevo (ka bitu 7) ili udesno (ka bitu 0). Bit, koji "izlazi" iz registra,
upisuje se u fleg C, a stanje tog flega se upisuje u bit na "suprotnoj strani" registra.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 42
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.2.3 OPERACIJE NAD BITOVIMA

Instrukcije BCF i BSF vrše resetovanje ili setovanje jednog bita bilo gde u memoriji.
Mada ovo izgleda kao jednostavna operacija, ona se izvršava tako što CPU najpre
pročita ceo bajt, izmeni jedan bit u njemu i onda ceo bajt upiše na isto mesto.

3.2.4 UPRAVLJANJE TOKOM PROGRAMA

Instrukcije GOTO, CALL, RETURN izvršavaju se isto kao i na svim drugim


mikrokontrolerima, s tim što je stek nezavisan od internog RAM-a i ograničen je na
osam nivoa.

"RETLW k" instrukcija je identična RETURN instrukciji, osim što se pre povratka iz
podprograma u W registar upisuje konstanta koja je definisana operandom
instrukcije. Ova instrukcija nam omogućuje lako kreiranje Lookup tabela. Najčešće
se koriste tako što izračunamo poziciju podatka u tabeli, saberemo je sa adresom na
kojoj tabela počinje i sa te lokacije (koja se obično nalazi u programskoj memoriji)
pročitamo podatak.

Tabela se može formirati kao podprogram koji se sastoji od niza 'RETLW k'
instrukcija, gde će konstante `k' biti članovi tabele (tabela 3.).

Tabela 3.2: formiranje tabele


Main movlw 2
call Lookup
Lookup addwf PCL,f
retlw k
retlw kl
retlw k2
:
.
retlw kn

Poziciju člana tabele upišemo u W registar i instrukcijom CALL pozovemo


podprogram koji čini tabelu. Prva linija u podprogramu addwf PCL,f sabira poziciju
člana u W registru sa početnom adresom tabele koja se nalazi u PCL registru i tako
dobijamo stvarnu adresu podatka u programskoj memoriji. Pri povratku iz
podprograma u W registru imaćemo sadržaj adresiranog člana tabele. U prethodnom
primeru, nakon povratka iz podprograma u W registru biće konstanta "k2".

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 43
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.2.5 KORIŠĆENI TERMINI U ASEMBLERU

f bilo koja memorijska lokacija mikrokontrolera


W radni registar
b pozicija bita u f registru
d odredišni bit
label skup od najviše osam karaktera koji označava početak dela programa.
TOS vrh steka ( Top Of Stack)
[] opcija
<> polje bita u registru

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 44
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3 DETALJAN OPIS INSTRUKCIJA MIKROKONTROLERA PIC


16F877

3.3.1 MOVLW Upiši konstantu u registar W

Sintaksa: [labela] MOVLW k

Opis: 8-mo bitnu konstantu k upisuje u W registar.

Operacija: k => (W)

Operand: 0 ≤ k ≤ 255

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer 1 MOVLW 0x5A


Posle instrukcije: W=0x5A

Primer 2 MOVLW REGISTAR

Pre instrukcije: W=0x10 i REGISTAR=0x40


Posle instrukcije: W=0x40

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 45
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.2 MOVWF Prepiši W u f

Sintaksa: [labela] MOVWF f

Opis: Sadržaj W registra prepisuje se u f registar.

Operacija: (W) => f

Operand: 0 ≤ f ≤ 127

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer 1 MOVWF OPTION_REG=0x20

Pre instrukcije: OPTION_REG=0x20


W=0x40

Posle instrukcije: OPTION_REG=0x40


W=0x40
Ù

Primer 2 MOVWF INDF

Pre instrukcije: W=0x17


FSR=0xC2
sadržaj adrese 0xC2=0x00

Posle instrukcije: W=0x17


FSR=0xC2
sadržaj adrese 0xC2=0x17

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 46
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.3 MOVF Prepiši f u d

Sintaksa: [labela] MOVF f,d

Opis: Sadržaj f registra smešta se na lokaciju koju određuje operand d.


Ukoliko je d=0, odredište je W registar.
Ukoliko je d=1, odredište je sam f registar.
Opcija d=1 se koristi za testiranje sadržaja f registra jer izvršavanje
ove instrukcije utiče na Z fleg u STATUS registru.

Operacija: (f) => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 MOVF FSR, 0

Pre instrukcije: FSR=0xC2


W=0x00

Posle instrukcije: W=0xC2


Z=0

Primer 2 MOVF INDF, 0

Pre instrukcije: W=0x17


FSR=0xC2
sadržaj adrese 0xC2=0x00

Posle instrukcije: W=0x17


FSR=0xC2
sadržaj adrese 0xC2=0x00
Z=1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 47
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.4 CLRW Upiši 0 u W

Sintaksa: [labela] CLRW

Opis: Sadržaj W registra se izjednačava sa nulom, a Z fleg u STATUS


registru se setuje na jedan

Operacija: 0 => W

Operand:

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer CLRW

Pre instrukcije: W=0x55

Posle instrukcije: W=0x00


Z=1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 48
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.5 CLRF Upiši 0 u f

Sintaksa: [labela] CLRF f

Opis: Sadržaj f registra se izjednačava sa nulom, a Z fleg u STATUS registru


se setuje na jedan

Operacija: 0 => f

Operand:

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 CLRF STATUS

Pre instrukcije: STATUS=0xC2

Posle instrukcije: STATUS=0x00


Z=1

Primer 2 CLRF INDF

Pre instrukcije: FSR=0xC2


sadržaj adrese 0xC2=0x33

Posle instrukcije: FSR=0xC2


sadržaj adrese 0xC2=0x00
Z=1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 49
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.6 SWAPF Zameni mesta gornjoj i donjoj polovini bajta

Sintaksa: [labela] CLRF f, d

Opis: Gornja i donja polovina f registra zamenjuju mesta.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: f<0:3> => d<4:7>, f<4:7> => d<0:3>

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer 1 SWAPF REG,0

Pre instrukcije: REG=0xF3

Posle instrukcije: REG=0x3F


W = 0x3F

Primer 2 SWAPF REG,1

Pre instrukcije: REG=0xF3

Posle instrukcije: REG=0x3F

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 50
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.7 ADDLW Saberi W sa konstantom

Sintaksa: [labela] ADDLW k

Opis: Sadržaj W registra se sabira sa 8-mo bitnom konstantom k i rezultat se


smešta u W registar.

Operacija: (W) + k => W

Operand: 0 ≤ k ≤ 255

Fleg: C,DC,Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 ADDLW 0x15

Pre instrukcije: W=0x10

Posle instrukcije: W=0x25

Primer 2 ADDLW REG

Pre instrukcije: W=0x10


sadržaj registra REG=0x37

Posle instrukcije: W=0x47

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 51
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.8 ADDWF Saberi W i f

Sintaksa: [labela] ADDWF f, d

Opis: Sabira sadržaj registra W sa registrom f.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (W) + f => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: C,DC,Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 ADDWF FSR, 0

Pre instrukcije: W=0x17


FSR=0xC2

Posle instrukcije: W=0xD9


FSR=0xC2

Primer 2 ADDWF INDF, 1

Pre instrukcije: W=0x17


FSR=0xC0
sadržaj adrese 0xC2=0x20

Posle instrukcije: W=0x17


FSR=0xC2
sadržaj adrese 0xC2=0x37

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 52
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.9 SUBLW Oduzmi W od konstante

Sintaksa: [labela] SUBLW k

Opis: Sadržaj W registra se oduzima od konstante k i rezultat se smešta u W


registar.

Operacija: k - (W) => W

Operand: 0 ≤ k ≤ 255

Fleg: C,DC,Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 SUBLW 0x03

Pre instrukcije: W=0x01, C=x, Z=x

Posle instrukcije: W=0x02, C=1, Z=0 rezultat je pozitivan

Pre instrukcije: W=0x03, C=x, Z=x

Posle instrukcije: W=0x00, C=1, Z=1 rezultat je nula

Pre instrukcije: W=0x04, C=x, Z=x

Posle instrukcije: W=0xFF, C=0, Z=0 rezultat je negativan

Primer 2 SUBLW REG

Posle instrukcije: W=0x10


sadržaj REG = 0x37

Pre instrukcije: W=0x27


C=1 rezultat je pozitivan

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 53
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.10 SUBWF Oduzmi W i f

Sintaksa: [labela] SUBWF f, d

Opis: Sadržaj registra W se oduzima od sadržaja f registra.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (f) - (W)=> d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: C,DC,Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 SUBWF REG, 1

Pre instrukcije: REG=3, W=2, C=x, Z=x

Posle instrukcije: REG=1, W=2, C=1, Z=0 rezultat je pozitivan

Pre instrukcije: REG=2, W=2, C=x, Z=x

Posle instrukcije: REG=0, W=2, C=1, Z=0 rezultat je nula

Pre instrukcije: REG=1, W=2, C=x, Z=x

Posle instrukcije: REG=0xFF, W=2, C=0, Z=0 rezultat je negtivan

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 54
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.11 ANDLW Logičko I W sa konstantom

Sintaksa: [labela] ANDLW k

Opis: Vrši operaciju logičko I nad sadržajem W registra i konstante k.


Rezultat se smešta u W registar.

Operacija: (W) .AND. k => W

Operand: 0 ≤ k ≤ 255

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 ANDLW 0x5F

Pre instrukcije: W=0xA3 ;0101 1111 (0x5F)

Posle instrukcije: W=0x03 ;1010 0011 (0xA3)


----------------------------
;0000 0011

Primer 2 ANDLW REG

Pre instrukcije: W=0xA3 ;1010 0011 (0xA3)

REG=0x37 ;0011 0111 (0x37)

Posle instrukcije: W=0x23 ----------------------------


;00100011 (0x23)

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 55
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.12 ANDWF Logičko I W sa f

Sintaksa: [labela] ANDLW f, d

Opis: Vrši operaciju logičko I nad sadržajima W i f registra.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (W) .AND. (f) => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 ANDWF FSR, 1

Pre instrukcije: W=0x17, FSR=0xC2 ;0001 0111 (0x17)

Posle instrukcije: W=0x17, FSR=0x02 ;1100 0010 (0xC2)


----------------------------
;0000 0010 (0x02)

Primer 2 ANDWF FSR, 0

Pre instrukcije: W=0x17, FSR=0xC2 ;0001 0111 (0x17)

Posle instrukcije: W=0x17, FSR=0x02 ;1100 0010 (0xC2)


----------------------------
;0000 0010 (0x02)

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 56
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.13 IORLW Logičko ILI W sa konstantom

Sintaksa: [labela] IORLW k

Opis: Nad sadržajem W registra i osmobitnom konstanatom k vrši se


operacija logičko ILI i rezultat se smešta u W registar.

Operacija: (W) .OR. k => W

Operand: 0 ≤ k ≤ 255

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 IORLW 0x35

Pre instrukcije: W=0x9A

Posle instrukcije: W=0xBF


Z=0

Primer 2 IORLW REG

Pre instrukcije: W=0x9A


REG=0x37

Posle instrukcije: W=0xBF


Z=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 57
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.14 IORWF Logičko ILI W sa f

Sintaksa: [labela] IORLW f, d

Opis: Nad sadržajem W i f registra vrši se operacija logičko ILI.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (W) .OR. (f) => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 IORLW REG, 0

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

Posle instrukcije: REG=0x13,W=0x93


Z=0
Ù

Primer 2 IORLW REG, 1

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

Posle instrukcije: REG=0x93,W=0x91


Z=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 58
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.15 XORLW Logičko isključivo ILI W sa konstantom

Sintaksa: [labela] XORLW k

Opis: Nad sadržajem W registra i konstante k vrši se operacija isključivo ILI


(eng. XOR) i rezultat se smešta u W registar.

Operacija: (W) .XOR. k => W

Operand: 0 ≤ k ≤ 255

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 XORLW 0xAF

Pre instrukcije: W=0xB5 ;1010 1111 (0xAF)

Posle instrukcije: W=0x1A ;1011 0101 (0xB5)


Z=0 ------------------------
;0001 1010 (0x1A)

Primer 2 IORLW REG

Pre instrukcije: W=0xAF ;1010 1111 (0xAF)


REG=0x37 ;0011 0111 (0x37)
-----------------------
Posle instrukcije: W=0x98 ;1001 1000 (0x98)
Z=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 59
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.16 XORWF Logičko isključivo ILI W sa f

Sintaksa: [labela] XORLW f, d

Opis: Nad sadržajem W i f registra vrši se logička operacija isljučivo ILI.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (W) .XOR. (f) => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 XORLW REG, 0

Pre instrukcije: REG=0xAF,W=0xB5 ;1010 1111 (0xAF)

Posle instrukcije: REG=0x1A,W=0xB5 ;1011 0101 (0xB5)


-----------------------
;0001 1010 (0x1A)

Primer 2 XORLW REG, 1

Pre instrukcije: REG=0xAF,W=0xB5 ;1010 1111 (0xAF)

Posle instrukcije: REG=0xAF,W=0x1A ;1011 0101 (0x1A)


-----------------------
;0001 1010 (0x1A)

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 60
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.l7 INCF Uvećaj f

Sintaksa: [labela] INCF f, d

Opis: Uvećaj f registar za jedan.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (f) + 1 => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 INCF REG, 1

Pre instrukcije: REG=0xFF


Z=0
Posle instrukcije: REG=0x00
Z=1

Primer 2 INCF REG, 0

Pre instrukcije: REG=0x10


W=x
Z=0

Posle instrukcije: REG=0x10


W=0x11
Z=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 61
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.l8 DECF Umanji f

Sintaksa: [labela] DECF f, d

Opis: Umanjuje f registar za jedan.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (f) - 1 => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 INCF REG, 1

Pre instrukcije: REG=0x01


Z=0
Posle instrukcije: REG=0x00
Z=1

Primer 2 INCF REG, 0

Pre instrukcije: REG=0x13


W=x
Z=0

Posle instrukcije: REG=0x13


W=0x12
Z=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 62
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.l9 RLF Rotiraj f ulevo kroz CARRY

Sintaksa: [labela] RLF f, d

Opis: Sadržaj f registra se rotira za jedno mesto ulevo prekoC (Carry) flega.
Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (f<n>) => d <n+1>,(f<7>) => C, C=> d<0>

Operand: 0 ≤ f ≤ 127
d = [0,1] C registar f

Fleg: C

Broj reči: 1

Broj ciklusa: 1

Primer 1 RLF REG, 0

Pre instrukcije: REG = 1110 0110


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

Primer 2 RLF REG, 1

Pre instrukcije: REG = 1110 0110


C=0

Posle instrukcije: REG = 1100 1100


C=1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 63
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.20 RRF Rotiraj f udesno kroz CARRY

Sintaksa: [labela] RRF f, d

Opis: Sadržaj f registra se rotira za jedno mesto udesno prekoC (Carry) flega.
Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.

Operacija: (f<n>) => d <n-1>,(f<0>) => C, C=> d<7>

Operand: 0 ≤ f ≤ 127
d = [0,1] C registar f

Fleg: C

Broj reči: 1

Broj ciklusa: 1

Primer 1 RRF REG, 0

Pre instrukcije: REG = 1110 0110


W=x
C=0
Posle instrukcije: REG = 1110 0110
W = 0111 0011
C=0

Primer 2 RRF REG, 1

Pre instrukcije: REG = 1110 0110


C=0

Posle instrukcije: REG = 0111 0011


C=0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 64
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.21 COMF Komplementiraj f

Sintaksa: [labela] COMF f, d

Opis: Sadržaj f registra se komplementira.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.
__
Operacija: (f) => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: Z

Broj reči: 1

Broj ciklusa: 1

Primer 1 COMF REG, 0

Pre instrukcije: REG=0x13 ;0001 0011 (0x13)


;komplementiraj
Posle instrukcije: REG=0x13 ;---------------------
W=0xEC ;1110 1100 (0xEC)

Primer 2 COMF INDF, 1

Pre instrukcije: FSR = 0xC2


sadržaj adrese (FSR)= 0xAA

Posle instrukcije: FSR = 0xC2


sadržaj adrese (FSR)=0x55

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 65
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.22 BCF Resetuj bit b u f

Sintaksa: [labela] BCF f, b

Opis: Resetuj bit b u f registru

Operacija: (0) => f <b>

Operand: 0 ≤ f ≤ 127
0≤b≤7

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer 1 BCF REG, 7

Pre instrukcije: REG=0xC7 ;1100 0111 (0xC7)

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

Primer 2 BCF INDF, 3

Pre instrukcije: W = 0x17


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

Posle instrukcije: W = 0x17


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

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 66
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.23 BCF Setuj bit b u f

Sintaksa: [labela] BSF f, b

Opis: Setuj bit b u f registru

Operacija: (1) => f <b>

Operand: 0 ≤ f ≤ 127
0≤b≤7

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer 1 BSF REG, 7

Pre instrukcije: REG=0x07 ;0000 0111 (0x07)

Posle instrukcije: REG=0x87 ;1000 0111 (0x87)

Primer 2 BCF INDF, 3

Pre instrukcije: W = 0x17


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

Posle instrukcije: W = 0x17


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

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 67
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.24 BTFSC Test bit b u f, preskoči ako je = 0

Sintaksa: [labela] BTFSC f, b

Opis: Ako je bit b u f registru jednak nuli, onda se preskače naredna


instrukcija. Ukoliko je bit b jednak nuli, tokom izvršavanja tekuće
instrukcije, onemogućuje se izvršavanje naredne i umesto nje, izvršava
se NOP instrukcija, čineći tekuću instrukciju dvociklusnom.

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

Operand: 0 ≤ f ≤ 127
0≤b≤7

Fleg: -

Broj reči: 1

Broj ciklusa: 1 ili 2 u zavisnosti od bita b.

Primer LAB_01 BTFSC REG,1 ; Testiraj bit br. jedan u REG


LAB_02 .... ; Presko•i ovu liniju ako je = 0
LAB_03 .... ; Ovde sko•i ako je = 1

Pre instrukcije programski brojač je bio na adresi LAB_01

Nakon instrukcije ako je u REG registru prvi bit bio nula, programski brojač pokazuje
na adresu LAB_03

Ako je u REG registru prvi bit bio jedan, programski brojač pokazuje na LAB_02.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 68
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.25 BTFSS Test bit b u f, preskoči ako je = 1

Sintaksa: [labela] BTFSS f, b

Opis: Ako je bit b u f registru jednak jedinici, onda se preskače naredna


instrukcija. Ukoliko je bit b jednak jedinici, tokom izvršavanja tekuće
instrukcije, onemogućuje se izvršavanje naredne i umesto nje, izvršava
se NOP instrukcija, čineći tekuću instrukciju dvociklusnom.

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

Operand: 0 ≤ f ≤ 127
0≤b≤7

Fleg: -

Broj reči: 1

Broj ciklusa: 1 ili 2 u zavisnosti od bita b.

Primer LAB_01 BTFSC REG,1 ; Testiraj bit br. jedan u REG


LAB_02 .... ; Presko•i ovu liniju ako je = 0
LAB_03 .... ; Ovde sko•i ako je = 1

Pre instrukcije programski brojač je bio na adresi LAB_01

Nakon instrukcije ako je u REG registru prvi bit bio jedan, programski brojač
pokazuje na adresu LAB_03

Ako je u REG registru prvi bit bio nula, programski brojač pokazuje na LAB_02.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 69
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.26 INCFSZ Uvećaj f, preskoči ako je =0

Sintaksa: [labela] INCFSZ f, d

Opis: Sadržaj f registra se uvećava za jedan.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.
Ukoliko je rezultat = 0 naredna instrukcija se izvršava kao NOP čineći
tekuću instrukciju dvociklusnom.

Operacija: (f) + 1 => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: -

Broj reči: 1

Broj ciklusa: 1 ili 2 u zavisnosti od rezultata.

Primer LAB_01 INCFSZ REG,1; Uve•aj sadr•aj REG za jedan


LAB_02 .... ; Presko•i ovu liniju ako je = 0
LAB_03 .... ; Ovde sko•i ako je = 0

Sadržaj programskog brojača pre instrukcije, PC = adresa LAB_01

Sadržaj REG registra posle izvršavanja instrukcije je REG = REG + 1, ukoliko je


REG=0, programski brojač pokazuje na adresu labele LAB_03. U suprotnom
programski brojač pokazuje na adresu naredne instrukcije tj. na LAB_02.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 70
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.27 DECFSZ Umanji f, preskoči ako je =0

Sintaksa: [labela] DECFSZ f, d

Opis: Sadržaj f registra se umanjuje za jedan.


Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.
Ukoliko je rezultat = 0 naredna instrukcija se izvršava kao NOP čineći
tekuću instrukciju dvociklusnom.

Operacija: (f) - 1 => d

Operand: 0 ≤ f ≤ 127
d = [0,1]

Fleg: -

Broj reči: 1

Broj ciklusa: 1 ili 2 u zavisnosti od rezultata.

Primer LAB_01 DECFSZ CNT,1; Umanji sadr•aj REG za jedan


LAB_02 .... ; Presko•i ovu liniju ako je = 0
LAB_03 .... ; Ovde sko•i ako je = 1

Sadržaj programskog brojača pre instrukcije, PC = adresa LAB_01

Sadržaj CNT registra posle izvršavanja instrukcije je CNT = CNT + 1, ukoliko je


CNT=0, programski brojač pokazuje na adresu labele LAB_03. U suprotnom
programski brojač pokazuje na adresu naredne instrukcije tj. na LAB_02.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 71
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.28 GOTO Skoči na adresu

Sintaksa: [labela] GOTO k

Opis: Bezuslovni skok na adresu k

Operacija: (k) => PC <10:0>,(PCLATCH <4:3>) => PC <12:11>

Operand: 0 ≤ k ≤ 2048

Fleg: -

Broj reči: 1

Broj ciklusa: 2

Primer LAB_00 GOTO LAB_01 ;Sko•i na labelu LAB_01


:
:
LAB_01 .......
Pre instrukcije PC = adresa LAB_00
Posle instrukcije PC = adresa LAB_01

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 72
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.29 CALL Pozovi podprogram

Sintaksa: [labela] CALL k

Opis: Instrukcija poziva podprograma. Prvo se povratna adresa (PC + 1)


smešta na stek, a zatim se 11-to bitni direktni operand k, koji sadrži
adresu podprograma, smešta u programski brojač.

Operacija: (PC) + 1 => vrh steka (eng. Top Of Stack - TOS)


k => PC < 10 : 0 >, (PCLATCH <4 : 3>) => PC <12 : 11>

Operand: 0 ≤ k ≤ 2048

Fleg: -

Broj reči: 1

Broj ciklusa: 2

Primer LAB_01 CALL LAB_02 ; Pozovi podprogram LAB_02


:
:
LAB_02 .......

Pre instrukcije: PC = adresa LAB_01


TOS (vrh steka) = x

Posle instrukcije: PC = adresa LAB_02


TOS (vrh steka) = LAB_1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 73
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.30 RETURN Povratak iz podprograma

Sintaksa: [labela] RETURN

Opis: Sadržaj sa vrha steka smešta se u programski brojač.

Operacija: TOS => Programski brojač PC

Operand: -

Fleg: -

Broj reči: 1

Broj ciklusa: 2

Primer: RETURN

Pre instrukcije: PC = x
TOS (vrh steka) = x

Posle instrukcije: PC = TOS (vrh steka)


TOS (vrh steka) = TOS – 1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 74
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.31 RETLW Povratak iz podprograma sa konstantom u W

Sintaksa: [labela] RETLW k

Opis: Osmobitna konstanta k smešta se u W registar, a u programski brojač


se smešta vrednost sa vrha steka.

Operacija: (k) => W ; vrh steka (TOS) => PC

Operand: 0 ≤ k ≤ 255

Fleg: -

Broj reči: 1

Broj ciklusa: 2

Primer: RETLW 0x43

Pre instrukcije: W=x


PC = x
TOS (vrh steka) = x

Posle instrukcije: W = 0x43


PC = TOS (vrh steka)
TOS (vrh steka) = TOS – 1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 75
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.32 RETFIE Povratak iz prekidne rutine

Sintaksa: [labela] RETFIE

Opis: Povratak iz podprograma. Vrednost iz TOS-a smešta se u programski


brojač PC. Omogućuju se interapti setovanjem GIE bit-a. (eng. Global
Interrupt Enable – GIE )

Operacija: (TOS) => PC; 1 => GIE

Operand: -

Fleg: -

Broj reči: 1

Broj ciklusa: 2

Ù
Primer: RETFIE

Pre instrukcije: PC = x
GIE (bit dozvole prekida u STATUS reg) = 0

Posle instrukcije: PC = TOS (vrh steka)


GIE = 1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 76
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.33 NOP Bez operacije

Sintaksa: [labela] NOP

Opis: Ne izvršava nijednu operaciju niti utiče na bilo koji fleg.

Operacija: -

Operand: -

Fleg: -

Broj reči: 1

Broj ciklusa: 1

Primer: NOP

Pre instrukcije: PC = x

Posle instrukcije: PC = x + 1

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 77
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.34 CLRWDT Inicijalizuj watchdog tajmer

Sintaksa: [labela] CRLWDT

Opis: Resetuje Watchdog tajmer. Takođe se resetuje i preskaler Watchdog


tajmera, a statusni bitovi TO i PD se setuju.

Operacija: 0 => WDT


0 => WDT preskaler
1 => TO
1 => PD

Operand: -

Fleg: TO, PD

Broj reči: 1

Broj ciklusa: 1

Primer: CLRWDT

Pre instrukcije: WDT brojač = x


WDT preskaler =1 : 128

Posle instrukcije: WDT brojač = 0x00


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

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 78
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

3.3.35 SLEEP Prelazak u Stand by mod

Sintaksa: [labela] SLEEP

Opis: Procesor ulazi u mod niske potrošnje. Oscilator je zaustavljen. PD


(Power Down) statusni bit je resetovan. TO (Time Out) bit je setovan.
WDT (Watchdog) tajmer i njegov preskaler su resetovani.

Operacija: 0 => WDT, 0 => WDT preskaler, 1 => TO, 1 => PD

Operand: -

Fleg: TO, PD

Broj reči: 1

Broj ciklusa: 1

Primer: SLEEP

Pre instrukcije: WDT brojač = x


WDT preskaler = x

Posle instrukcije: WDT brojač = 0x00


WDT preskaler brojač = 0
TO = 1
PD = 0

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 79
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4. UPUTSTVO ZA MPLAB IDE V5.40

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 80
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4.1 UVOD

Programski paket MPLAB ćemo koristiti kao razvojno okruženje za PIC


mikrokonrolere. Ovo uputstvo ne zamenjuje priručnik, ali pokušava objasniti osnove
korišćenja programskog paketa MPLAB i onima koji ne vladaju engleskim jezikom.

Programski paket MPLAB sadrži sledeće programe:


• Editor (za pisanje programa),
• Asembler (za kompajliranje programa),
• Simulator (za testiranje programa) i
• Picstart Plus (za upisivanje u PIC već gotovog programa).

Sve ove delove MPLAB-a ćemo opisati, a kao dodatak opisaće se jedan jako pogodan
razvojni alat koji se zove MPLAB-ICD (In Circuit Debugger).

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 81
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4.2 UPUTSTVO ZA MPLAB IDE V5.40

Posle pokretanja programa u Windows okruženju će se pojaviti prozor za


komunikaciju MPLAB ÍÎ čovek, odnosno radna površina (slika 4.1).

Toolbar

status bar
radni prostor

Slika 4.1: izgled MPLAB IDE v5.40 razvojnog sistema neposredno posle pokretanja

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 82
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4.3 GENERISANJE NOVOG PROJEKTA

Kao prvo treba zadati tip razvojnog okruženja, i tip PIC mikrokonrolera. To možemo
podesiti u Options >Development Mode meniju (slika 4.2).

Slika 4.2: Options >Development Mode meni

Mogućnosti su:
• None (Editor Only) – u ovom modu imamo mogućnosti samo
za pisanje i kompajliranje programa,
• MPLAB-SIM – ovo treba koristiti ako nemamo ICD,
• MPLAB ICD-Debugger – ako imamo ICD, ovom opcijom ćemo
aktivirati podršku za ovaj hardver i
• Processor – tip odgovarajućeg procesora.

Posle selektovanja željenih opcija, kliknemo na OK dugme.

Kada menjamo razvojno okruženje uvek ćemo dobiti upozorenje (slika 4.3). Kao
odgovor, kliknemo na OK.

Slika 4.3: upozorenje posle selekcije podmenija

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 83
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Sledeći korak, u Project > New Project meniju je zadavanje imena (naziva) projekta
(slika 4.4).

Slika 4.4: Project > New Project meni

PRIMER 4.1:

Ako želimo da novi projekt ima naziv first.pjt, pored imena first.pjt moramo i putanju
odrediti, i mesto gde ćemo ga smestiti.

Kada smo zadali ime projekta i putanju, pritisnemo OK. Pojaviće se prozor Edit
Project (slika 4.5).

Slika 4.5: prozor Edit Project

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 84
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

U ovom prozoru, kod prozora Project Files već možemo videti naš First [.hex] upis
(fajl).

Ovde zadajemo putanje za Include, Library i Linker Script fajlove, možemo menjati
već podešeno radno okruženje i tip PIC mikrokontrolera.

Ako kliknemo na First [.hex] upis, aktiviraće se Node Properties dugme, gde
možemo pogledati ili podešavati parametre kompajlera (slika 4.6).

Slika 4.6: Node Properties prozor

Ako u Edit Project prozoru kliknemo na Add Node dugme, možemo priključiti
First.asm fajl (.asm je oznaka za izvorni fajl koji je napisan u asembleru). Naravno
ovaj fajl već mora postojati. Prilikom kreiranja novog projekta prvo moramo imati
neki ASM fajl. Ako još nemamo ASM fajl, moramo ga kreirati.

Kreiranje novog izvornog koda se dešava klikom na File > New meni. Otvoriće se
novi editor prozor gde se upisuje asembler kod (slika 4.7). Nakon kreiranja ćemo
snimiti zapis pod nekim imenom iz File >Save menija.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 85
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 4.7: kreiranje (pisanje) izvornog koda u asembleru mikrokontrolera

Na kraju možemo priključiti ASM fajl našem projektu iz Project > Edit Project
menija.

Pomoću File > Open menija učitavamo u editor MPLAB-a ASM fajl i možemo po
želji modifikovati naš program.

Za snimanje našeg projekta koristimo Project > Save Project meni, a za


kompajliranje Project > Build All . U slučaju greške kompajler nam javlja grešku i
naš program neće biti izkompajliran.

Nakon uspešnog kompajliranja dobićemo poruku Slika 4.8):

Slika 4.8: poruka nakon uspešnog kompajliranja

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 86
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4.4 SIMULATOR MPLAB-A:

Simulator nam služi da bi programe pisane za PIC mikrokontrolere mogli da


testiramo.

Kod simulacije, tokom izvršavanja programa postoje sledeće mogućnosti:


• ispisivanje i eventualno modifikacija sadržaja bilo kojeg registra
mikrokontrolera. (watch),
• mogućnost postavljanje tzv.breakpoint-a,
• izvršavanje programa korak po korak (single step),
• simuliranje signala iz spoljašnjeg sveta, odnosno učitavanje iz fajla
(ulazi), stimulus.

PRIMER 4.2:

Na jednom jednostavnom primeru ćemo prikazati mogućnosti MPLAB simulatora


(slika 4.9). Da se vratimo na naš prvi projekat (First.pjt / First.asm) koji inače samo
izvršava tri „no operation” (NOP) komande. Modifikovaćemo sadržaj First.asm fajla
na sledeće:

; Jednostavno sabiranje
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_HS_OSC & _LVP_OFF
temp equ 35 ; Definicija temp promenljive

org 0 ; Reset vektor


nop ; No operation
Start
movlw 5 ; Upisujemo prvu vrdnost u W registar
movwf temp ; Predajemo sadrzaj W reg. u temp
movlw 4 ; Upisujemo drugu vrdnost u W registar
addwf temp,0 ; Sabiramo W I temp
Kraj ; Rezultat se smesta u W reg.
goto Kraj ; Kraj
end

Posle uspešnog kompajliranja, podešavamo radno okruženje simulatora. Prozor sa


registrima iz Window > Special Function Registers , a prozor sa sadržajem program
memorije iz Window >Program Memory menija možemo aktivirati.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 87
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Simulaciju aktiviramo sa jednom opcijom iz Debug >Run menija, ili možemo


koristiti odgovarajuće dugme (shortcut). U ovom slučaju možemo pratiti sadržaj W
registra. Ako hoćemo korak po korak da izvršimo simulaciju, biramo opciju iz menija
Debug >Run > Step ili koristimo (shorcut) F7 dugme.

Slika 4.9: radno okruženje MPLAB simulatora.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 88
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

4.5 MONTIRANJE I KORIŠĆENJE ICD UREĐAJA:

MPLAB ICD (In Circuit Debugger) je jako koristan razvojni alat. Progame možemo
testirati u sopstvenom okruženju, na realnom sistemu. U ovom delu ćemo se upoznati
sa načinom montiranja ICD-a i mogućnostima koje nam pruža. Na slici 4.10 je ICD i
razvojna ploča.
RS 232 priključak za PC

Mesto spajanja ICD-a

Slika 4.10: povezivanje ICD uređaja i razvojne ploče PIC 16F877

Posle povezivanja hardvera potrebno je podešavati softver.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 89
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Razvojno okruženje se podešava u Options >Development Mode meniju na sledeći


način (slika 3.11).

Slika 4.11: podešavanje softvera ICD uređaja

Posle ovog podešavanja MPLAB je prepoznao postojanje ICD adaptera, nakon čega
će se pojaviti jedan novi prozor koji je softverski interfejs ICD-a (slika 4.12).

Brzina porta

Na koji
port je
vezan.

Slika 4.12: parametri ICD adaptera

Podešavanja vršimo pritiskom na Options dugme i to na sledeći način (slika 4.13):

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 90
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 4.13: podešavanje ICD adaptera

Nakon podešavanja možemo isključiti ICD Options prozor. Posle pritiska Reconnect
dugmeta nova podešavanja stupaju na snagu.

PRIMER 4.3:

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 91
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Na jednom primeru ćemo prikazati mogućnosti MPLAB ICD-a.

Ako naš prvi projekat (First.pjt) podesimo na ICD razvojno okruženje, videćemo
mogućnosti koje nam pruža ICD.

Modifikujmo sadržaj First.asm prema sledećem kodu:

; Aktiviranje jedne LED diode

list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_HS_OSC & _LVP_OFF
org 0 ; reset vektor
nop ; No operation
bcf STATUS, RP0 ; Odabiranje Bank0
clrf PORTD ; Inicijalizacija PortD
bsf STATUS, RP0 ;
movlw 0 ; Definisanje D porta za izlaz
movwf TRISD ; tako da TRISD popunimo 0.
bcf STATUS, RP0 ; Odabiranje Bank0
Start
movlw B'10000000' ; Upisemo u W reg. na koji izvod da nam
salje signal
movwf PORTD ; Posaljemo sadrzaj W-reg. na D port
Vege
goto Vege
end

Nakon uspešnog kompajliranja pritisnemo Program dugme koji će nam upisati naš
program u PIC mikrokontroler koji se nalazi na ICD-u. Čekamo sve dok ne dobijemo
poruku Waiting for user command (slika 4.14).

Slika 4.14: čekanje na komandu korisnika

Posle aktiviranja prozora editora može se početi testiranje programa (slika 4.15). Sa
funkcijskim tasterom F7 možemo korak po korak da izvršavamo naš program.
Možemo primetiti izvesnu sporost pri izvršavanju programa korak po korak. To je
zbog toga što ICD naš program upisuje red po red u flash memoriju PIC
mikrokonrolera što zahteva vremena.

Kada smo stigli do kraja programa primetićemo da se upalila D8 dioda na rajvojnoj


ploči.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 92
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 4.15: MPLAB ICD okruženje kod testiranja programa korak po korak

4.6 PICSTART PLUS PROGRAMATOR:

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 93
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Pomoću Picstart Plus programatora možemo razvijene programe upisati u EPROM


PIC mikrokontrolera, i isprobati u svom realnom hardverskom okruženju. Ovaj
programator je sposoban za programiranje bilo kojeg tipa PIC mikrokontrolera.

Picstart Plus programator se priključuje na neki od serijskih portova na PC računaru, a


pojavi se prozor za izbor opcija (slika 4.16).

Slika 4.16: prozor za komunikaciju Picstart plus ÍÎ čovek

Tokom programiranja u PIC se upisuje memorijski bafer MPLAB-a zajedno sa


podešenim konfiguracionim bitovima. U bafer MPLAB-a možemo učitati već gotov
.hex fajl (File > Import > Import To Memory), ili se .hex fajl stvara tokom
kompajliranja.

Takođe je moguće čitanje podataka iz PIC mikrokontrolera i snimanje u fajl sa


opcijom (File > Export > Export Memory).

Tip programera određujemo u Options > Programmer Options > Select


Programmer meniju.

A podešavanje serijskog porta u Options > Programmer Options >


Communications Port Setup meniju (slika 4.17).

Slika 4.17: podešavanje serijskog COM porta

Softversku podršku za PICSTART Plus programer aktiviramo u PICSTART Plus >


Enable Programmer meniju (slika 4.18).

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 94
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 4.18: izbor softverske podrške

Korisnik programatora PICSTART Plus komunicira sa uređajem preko korisničkog


interfejsa (slika 4.19).

Ako kliknemo na Cofiguration Bits dugme, dobićemo sledeći prozor (slika 4.19).
Podešavanja treba izvesti na način prikazan na slici. Programiranje PIC
mikrokontolera započinjemo klikom na Program dugme.

Slika 4.19: korisnički interfejs programatora PICSTART Plus

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 95
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

5. LABORATORIJSKE VEŽBE SA
EKSPERIMENTALNOM PLOČOM
PIC16F877

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 96
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

5.1 UVOD

Eksperimentalna ploča PIC 16F877 je projektovana za inženjere, studente u cilju


savladanja znanja projektovanja hardvera i softvera PIC kontrolera. Zajedno sa ICD
adapterom nudi korisniku moćno sredstvo u fazi projektovanja i testiranja. Uz
primenu perifernih ulaznih i izlaznih portova, za digitalne i analogne signale, kao i sa
tastaturom, displejom kompletan kontroler dobija se veoma pogodna konfiguracija za
realne aplikacije (poglavlje 4.).

U ovoj skripti izrađeni zadaci omogućuju studentima način učenja korak po korak, od
početničkog znanja do upoznavanja kompletne filozofije PIC kontrolera.

Studenti, koji žele izraditi diplomski rad koristeći ovu eksperimentalnu ploču mogu se
koncentrisati na zadatak, a zbog univerzalnosti ploče oslobođeni su od obaveze izrade
slične namenske štampane ploče za svoje aplokacije.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 97
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

5.2 VEŽBA BROJ 1

U prvoj laboratorijskoj vežbi ćemo prikazati osnovne korake u programiranju


PIC16F877 mikrokontrolera, kao što su inicijalizacija portova i slanje signala kroz
portove.

REŠENJE:

Na slici 5.1 je dat grubi dijagram toka za inicijalizaciju portova i za slanje signala
kroz portove.

Slika 5.1: Grubi dijagram toka vežbe broj 1

Grubi dijagram toka služi kod TOP-DOWN (odozgo-nadole) projektovanja za


prikazivanje rešenja u većim koracima, ne ulazeći u detalje. Na takav način možemo
se koncentrisati na strukturu rešenja, bez vođenja brige o sitnim detaljima.

Kad je grubi dijagram jasan i pregledan, moramo razraditi detaljno svaki korak, sve
do najnižeg nivoa programiranja, do asemblera. Korisno je koristiti teoriju
modularnog programiranja kod razvoja programa u asembleru (vidi skriptu autora
Asembler).

Ovaj korak, detaljna razrada blokova grubog dijagrama (slika 5.1) je prikazana na
slici 5.2.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 98
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.2: detaljan dijagram toka podešavanja hardvera

Nakon izrade detaljnog dijagrama toka sledi faza testiranja na papiru, a posle toga
pisanje programa pomoću editora razvojnog sistema, prevođenje, otklanjanje
eventualnih grešaka i implementacija programa u mikročip.

Kod razvojne ploče ICD adapter omogućuje testiranje programa na realnom sistemu
korak po korak, a posle te faze implementaciju ispravnog programa u mikročip sa
programatorom PICSTART Plus.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 99
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Listing programa je sledeći:

list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
org 0 ; Reset vektor
nop ; No operation
bsf STATUS,RP0 ; Set bit za bank0
movlw 0 ; Inicijalizacija D porta
movwf TRISD ; za izlaz
bcf STATUS,RP0 ; selekcija bank0
Start
movlw B'10000000' ; Upisujemo u W registar binarni kod,
; jedinica odredjuje koja diodica ce biti
upaljena.
movwf PORTD ; Posaljemo sadrzaj W registra na D port.
Kraj
goto Kraj ; Bezkonacna petlja, kraj programa
end

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 100
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

5.3 VEŽBA BROJ 2

U ovoj laboratorijskoj vežbi upoznaćemo se sa tajmerima (TIMER), i sa realizacijom


ciklusa u PIC asembleru.

REŠENJE:

Na slici 5.3 dat je grubi dijagram toka programa.

Slika 5.3 grubi dijagram toka vežbe 2

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 101
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Na slici 5.4 je dat detaljan dijagram toka softverskog kašnjenja.

Slika 5.4: detaljan dijagram toka softverskog kašnjenja

Program u asembleru je sledeći:


AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 102
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

;Palimo i gasimo LED-ove


LIST P=16F877
INCLUDE "P16F877.INC"
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF

TIMER1 EQU 20H


TIMER2 EQU 21H
;-------------[ Pocetak programa ]-----------------------------
org 0
Start
BANKSEL TRISD ;BANK1
CLRF TRISD ;PORTD Kao izlaz
BANKSEL PORTD ;BANK0
Main
movlw B'11111111' ; PORTD, bit 1
movwf PORTD
CALL WAIT ; Kasnjenje
movlw B'00000000' ; PORTD, bit 0
movwf PORTD
call WAIT ; Kasnjenje
goto Main ; Bezuslovni ciklus
;--------------[ Softversko kasnjenje ]-----------------------
WAIT
CLRF TIMER1
CLRF TIMER2
Delay
nop
nop
nop
nop
DECFSZ TIMER1,F
goto Delay
DECFSZ TIMER2,F
goto Delay
return
end

5.4 VEŽBA BROJ 3

U ovom zadatku treba realizovati trčeće svetlo.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 103
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

REŠENJE:

Podatke koje šaljemo na PORTD čitamo iz tabele.

Grubi dijagram toka programa je na slici 5.5.

Slika 5.5: grubi dijagram programa

Detaljan dijagram toka kašnjenja je na slici 5.6.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 104
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.6: detaljan dijagram toka kašnjenja

Program je sledeći:

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 105
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
Timer1 equ 32
Timer2 equ 33
Timer3 equ 34
Pointer equ 35
Counter equ 36
;----------------------------- Glavni program -----------------------
org 0 ; reset vektor
nop
bsf STATUS,RP0
movlw 0 ; D port izlaz
movwf TRISD
bcf STATUS,RP0 ; Selekcija bank0
;--------------------------------------------------------------------
Start
movlw 14 ; LED tabela sa 15 elementata
movwf Counter
clrf Pointer
Start1 movf Pointer,0
call Table
movwf PORTD
call Delay
incf Pointer,1
decfsz Counter,1
goto Start1
;---------------------------- Subrutine -----------------------------
Delay
movlw 10 ; Timer3 x 20 ms
movwf Timer3
Delay0 call Delay1
decfsz Timer3,1
goto Delay0
return
;--------------------------------------------------------------------
Delay1 movlw 130 ; kb. 20 ms
movwf Timer2
Delay2 decfsz Timer1,1
goto Delay2
decfsz Timer2,1
goto Delay2
return
;--------------------------------------------------------------------

Table addwf PCL,1


retlw B'10000000' ; '0'
retlw B'01000000' ; '1'
retlw B'00100000' ; '2'
retlw B'00010000' ; '3'
retlw B'00001000' ; '4'
retlw B'00000100' ; '5'
retlw B'00000010' ; '6'

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 106
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

retlw B'00000001' ; '7'


retlw B'00000010' ; '8'
retlw B'00000100' ; '9'
retlw B'00001000' ; '10'
retlw B'00010000' ; '11'
retlw B'00100000' ; '12'
retlw B'01000000' ; '13'
retlw B'10000000' ; '14'
goto Start
end

5.5 VEŽBA BROJ 4

Na levoj strani FD1 FLASH DEMO PANEL-a se nalazi potenciometar, sa kojim


možemo regulisati brzinu treperenja diodica. Upoznaćemo se sa korišćenjem PIC A/D
konvertora.

REŠENJE:

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 107
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Grubi dijagram toka programa je na slici 5.7.

Slika 5.7: grubi dijagram toka programa iz vežbe 4

Listing programa je:


LIST P=16F877
INCLUDE "P16F877.INC"
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF

TIMER1 EQU 20H


TIMER2 EQU 21H
ORG 0X003
START

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 108
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

MOVLW B'00001110' ;LEFT JUSTIFY,1 ANALOG CHANNEL


MOVWF ADCON1 ;VDD AND VSS REFERENCES
MOVLW B'01000001' ;FOSC/8, A/D ENABLED
MOVWF ADCON0
bcf STATUS, RP0 ; Selekcija Bank0
clrf PORTD
bsf STATUS, RP0
movlw 0 ; Definisemo port D kao izlaz
movwf TRISD ; Tako da u TRISD upisujemo 0.
bcf STATUS, RP0 ; Selekcija Bank0

MAIN
;---------------[ A/D KONVERZJA ]-----------------------------
BSF ADCON0,GO ;START A/D KONVERZIJU
WAITAD
BTFSS PIR1,ADIF
GOTO WAITAD
;---------------[ Glavna rutina ]--------------------------
movlw B'11111111' ;PORTD, BIT 1
movwf PORTD
CALL WAIT ;Cekanje
movlw B'00000000' ;PORTD, BIT 0
movwf PORTD
CALL WAIT ;Cekanje
GOTO MAIN ;Bezuslovan ciklus
;---------------[ Softversko kasnjenje ]----------------------
WAIT
MOVFW ADRESH
BTFSC STATUS,Z
INCF ADRESH,F
MOVWF TIMER2
CLRF TIMER1
Delay
NOP
NOP
NOP
NOP
DECFSZ TIMER1,F
GOTO Delay
DECFSZ TIMER2,F
GOTO Delay
RETURN
END

5.6 VEŽBA BROJ 5

D1 LED se pali i gasi pritiskom na K0 taster. Primer za programiranje tastera.

REŠENJE:

Dijagram toka programa je na slici 5.8.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 109
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.8: dijagram toka programa

Program je sledeći:
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
Timer1 equ 32
Timer2 equ 33
Timer3 equ 34

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 110
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

;-------------[ POCETAK PROGRAMA]-----------------------------


ORG 0 ; Reset vektor
nop
START
; PORTA, PORTB, PORTD konfiguracija
bcf STATUS,RP0
bsf STATUS,RP0 ; Selekcija bank1
movlw 14
movwf ADCON1
movlw B'00111111' ; PORTA ulaz
movwf TRISA
movlw B'11110000' ; RB0..3 izlaz, RB4..7 ulaz
movwf TRISB
clrf TRISD ; PORTD izlaz
bcf OPTION_REG,NOT_RBPU ; konfigurisanje pull up
otpornika
bcf STATUS,RP0 ; Selekcija bank0
Press
BTFSC PORTB,4 ; Da li smo pritisnuli
goto Press ; K0 dugme.
call Delay ; Kasnjenje
Rel
BTFSS PORTB,4 ; Cekamo da se dugme pusti
goto Rel
MOVFW PORTD
XORLW B'00000001' ; PORTD 0. bit inverzija
MOVWF PORTD
goto Press ; Ponovo
Delay
movlw 10 ; Timer3 x 20 ms
movwf Timer3
Delay0 call Delay1
decfsz Timer3,1
goto Delay0
return
Delay1 movlw 130 ; kb. 20 ms
movwf Timer2
Delay2 decfsz Timer1,1
goto Delay2
decfsz Timer2,1
goto Delay2
return

end
Ù

5.7 VEŽBA BROJ 6

U šestoj vežbi ćemo prikazati kako se vrši inicijalizacija LCD modula, i slanje
karaktera na LCD modul.

REŠENJE:

Grubi dijagram toka je na slici 5.9.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 111
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.9: grubi dijagram toka programa za programiranje LCD displeja

Detaljan dijagram toka podešavanja hardvera je na slici 5.10.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 112
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.10: detaljan dijagram toka programa za podešavanje hardvera

Dijagram toka programa za realizaciju tabele je na slici 5.11.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 113
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Slika 5.11: dijagram toka za realizaciju tabele

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 114
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Potprogram za slanje karaktera je na slici 5.12.

Slika 5.12: dijagram toka za slanje karaktera

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 115
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Program za slanje komande je na slici 5.13.

Slika 5.13: podprogram za slanje komande

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 116
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Podprogram za kontrolu zauzetnosti LCD-a je na slici 5.14.

Slika 5.14: program za kontrolu hardvera

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 117
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

Program za inicijalizaciju LCD displeja je na slici 5.15

Slika 5.15: program za inicijalizaciju LCD displeja

Listing programa je:

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 118
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF

TEMP EQU 20h


CHAR EQU 21h ;Promenjljiva za smestanje karaktera
Pointer equ 22h ;Brojac za tabelu
DAT EQU PORTD ;LCD data port
CNTRL EQU PORTE ;LCD control port
E EQU 2 ;LCD enable signal
RW EQU 1 ;LCD R/W signal
RS EQU 0 ;LCD register select

org 00h ;Reset vektor


nop

bsf STATUS,RP0 ;---Bank 1


movlw 07h ;PortA kao digitalni I/O
movwf ADCON1

bcf STATUS,RP0 ;---Bank 0


call LCDInit ;Inicijalizacija LCD modula
clrf Pointer
Loop
call SetupDelay
call SetupDelay
movf Pointer,0
call Table
bcf STATUS,RP0 ; LCD modul
call SendChar ; Slanje karaktera
incf Pointer,1
goto Loop
Table
addwf PCL,1
retlw 'M'
retlw 'i'
retlw 'k'
retlw 'r'
retlw 'o'
retlw 'r'
retlw 'a'
retlw 'c'
retlw 'u'
retlw 'n'
retlw 'a'
retlw 'r'
retlw 'i'
Stop
goto Stop

SetupDelay
nop
decfsz TEMP, F
goto SetupDelay
return

;*****************************************************************
;* SendChar - Salje karakter iz W reg. na LCD *
;*****************************************************************

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 119
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

SendChar
movwf CHAR ;W-reg kopiranje
call BusyCheck ;Cekanje na LCD
movf CHAR,w
movwf DAT ;LCD slanje podakta
bcf CNTRL,RW ;LCD read mode
bsf CNTRL,RS ;LCD data mode
nop
bsf CNTRL,E
nop
bcf CNTRL,E
return

;**************************************************************
;* SendCmd - Salje komandu iz W reg. na LCD *
;**************************************************************
SendCmd
movwf CHAR ;Upis karaktera u W reg.
call BusyCheck ;Cekanje na LCD
movf CHAR,w
movwf DAT ;LCD Slanje podataka
bcf CNTRL,RW ;LCD read mode
bcf CNTRL,RS ;LCD command mode
nop
bsf CNTRL,E
nop
bcf CNTRL,E
return

;**************************************************************

BusyCheck
clrf PORTD ;PortD ulaz
bsf STATUS,RP0 ; "
movlw 0FFh ; "
movwf TRISD ; "
bcf STATUS,RP0 ; "
bcf CNTRL,RS ;LCD u komandni rezim
bsf CNTRL,RW
nop
bsf CNTRL,E ;Set E high
nop
nop
movf DAT,W ;Read busy flag, DDram address
bcf CNTRL,E ;Set E low
movwf TEMP
btfsc TEMP,7 ;Check busy flag, high=busy
goto BusyCheck

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 120
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

bcf CNTRL,RW
bsf STATUS,RP0 ;Set PortD for output
movlw 000h ; "
movwf TRISD ; "
bcf STATUS,RP0 ; "
return

;**************************************************************
;* Inicijalizacija LCD modula *
;**************************************************************

LCDInit
bcf STATUS,RP0 ;---Bank 0
clrf PORTE
clrf PORTD
bsf STATUS,RP0 ;---Bank 1
movlw B'00000000' ;Set PortD as outputs
movwf TRISD
movlw B'00000000' ;Set PortE as outputs
movwf TRISE
bcf STATUS,RP0 ;---Bank 0
clrf PORTE ;Clear PortA
movlw B'00111000' ;Set LCD to 8 bit interface
movwf DAT
nop
bsf CNTRL,E ;toggle E for LCD
nop
bcf CNTRL,E
movlw 0x0 ;Setup call to SetupDelay
movwf TEMP
call SetupDelay ;Each call to delay is
call SetupDelay ;0.771ms, six makes 4.6ms
call SetupDelay ;This wait is necessary because
call SetupDelay ;the busy flag is not valid yet.
call SetupDelay ;
call SetupDelay ;

movlw B'00111000' ;Function set to 2 lines


movwf DAT ;of 5x7 bit chars
nop
bsf CNTRL,E ;toggle E for LCD
nop
bcf CNTRL,E
call SetupDelay

movlw B'00001110' ;Display on, cursor on


call SendCmd

movlw B'00000001' ;Clear display


call SendCmd
movlw B'00000110' ;Set entry mode inc, no shift
call SendCmd

movlw B'10000000' ;Address DDRam upper left


call SendCmd

return
end

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 121
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

LITERATURA

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 123
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII

1. Matijevics, István: MIKRORAČUNARI, skripta, Viša Tehnička


Škola, Subotica, 2000.
2. Matić, Nebojša: PIC MIKROKONTROLERI, knjiga,
Mikroelektronika 2002,
3. www.microchip.com, internet, Microchip
Technology Inc.
4. www.chipcad.hu, internet, Chipchad
Elektronikai Disztribúció Kft.

AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 124
22000033

You might also like