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

IIS

S
CS
VIIC
EV
TIIJJE
AT
MA
NM
N
V
TV
ST

MIKROKONTROLERI
- TEORIJA -

sskkrriippttaa

V
VIIA
AT
TE
EH
HN
NII
K
KA
A K
KO
OL
LA
A
SSU
UB
BO
OT
TIIC
CA
A
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

SADRAJ

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

0
1
1.1
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
1.1.6
1.1.7
1.1.8
1.1.9
1.1.10
1.1.11
1.1.12
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.7.1
2.8
2.9
2.10
2.11
2.12
2.12.1
2.12.2
2.13
2.14
2.15
3
3.1
3.2
3.2.1
3.2.2

SADRAJ
PREDGOVOR
UVOD
MIKROPROCESOR, MIKRORAUNAR, MIKROKONTROLER
MIKROPROCESOR
MIKRORAUNAR
MIKROKONTROLER
HARDVER MIKRORAUNARA, MIKROKONTROLERA
MEMORIJA
ULAZI IZLAZI
ADRESE
CENTRALNA PROCESORSKA JEDINICA (CPU)
ARITMETIKO-LOGIKA JEDINICA
REGISTRI
MAGISTRALE (SABIRNICE)
REGISTAR NAREDBI I DEKODER
MIKROKONTROLER PIC 16F877
UVOD
CISC I RISK ARHITEKTURE
PODRUJA PRIMENE MIKROKONTROLERA PIC
16F877
TAKT FREKVENCIJA I INSTRUKCIJSKI CIKLUS
PROTONA OBRADA INSTRUKCIJA (PIPELINING)
ZNAENJE NOICA (PINOVA)
GENERATOR TAKTA - OSCILATOR
TIPOVI OSCILATORA
RESET LOGIKA
CENTRALNA PROCESORSKA JEDINICA
ARITMETIKO-LOGIKA JEDINICA
PORTOVI
ORGANIZACIJA MEMORIJE
PROGRAMSKA MEMORIJA
MEMORIJA ZA PODATKE
PROGRAMSKI BROJA
STEK MEMORIJA
PROGRAMIRANJE UNUTAR SISTEMA IN
SYSTEM PROGRAMING
SET
INSTRUKCIJA
MIKROKONTROLERA
FAMILIJE PIC 16FXX
UVOD
INSTRUKCIJE MIKROKONTROLERA
PRENOS PODATAKA
ARITMETIKE I LOGIKE OPERACIJE

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

1.
5.
7.
8.
8.
8.
9.
9.
12.
12.
13.
13.
14.
15.
16.
17.
19.
20.
22.
23.
24.
25.
26.
27.
27.
30.
32.
33.
34.
35,
35.
35.
37.
38.
39.
40,
41.
42.
42.
42.

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
3.2.3
3.2.4
3.2.5
3.3
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
3.3.8
3.3.9
3.3.10
3.3.11
3.3.12
3.3.13
3.3.14
3.3.15
3.3.16
3.3.17
3.3.18
3.3.19
3.3.20
3.3.21
3.3.22
3.3.23
3.3.24
3.3.25
3.3.26
3.3.27
3.3.28
3.3.29
3.3.30
3.3.31
3.3.32
3.3.33
3.3.34
3.3.35

OPERACIJE NAD BITOVIMA


UPRAVLJANJE TOKOM PROGRAMA
KORIENI TERMINI U ASEMBLERU
DETALJAN OPIS INSTRUKCIJA MIKROKONTROLERA PIC 16F877
MOVLW UPII KONSTANTU U REGISTAR W
MOVWF PREPII W U f
MOVF PREPII f U d
CLRW UPII 0 U W
CLRF UPII 0 U f
SWAPF ZAMENI MESTA GORNJOJ I DONJOJ
POLOVINI BAJTA
ADDLW SABERI W SA KONSTANTOM
ADDWF SABERI W I f
SUBLW ODUZMI W OD KONSTANTE
SUBWF ODUZMI W I f
ANDLW LOGIKO I W SA KONSTANTOM
ANDWF LOGIKO I SA f
IORLW LOGIKO ILI W SA KONSTANTOM
IORWF LOGIKO ILI W SA f
XORLW LOGIKO ISKLJUIVO ILI W SA
KONSTANTOM
XORWF LOGIKO ISKLJUIVO ILI SA f
INCF UVEAJ f
DECF UMANJI f
RLF ROTIRAJ f ULEVO KROZ CARRY
RRF ROTIRAJ f UDESNO KROZ CARRY
COMF KOMPLEMENTIRAJ f
BCF RESETUJ BIT b U f
BCF SETUJ BIT b U f
BTFSC TEST BIT b U f, PRESKOI AKO JE 0
BTFSS TEST BIT b U f, PRESKOI AKO JE 1
INCFSZ UVEAJ f, PRESKOI AKO JE 0
DECFSZ UMANJI f, PRESKOI AKO JE 0
GOTO SKOI NA ADRESU
CALL POZOVI PODPROGRAM
RETURN POVRATAK IZ PODPROGRAMA
RETLW POVRATAK IZ PODPROGRAMA SA
KONSTANTOM U W
RETFIE POVRATAK IZ PREKIDNE RUTINE
NOP BEZ OPERACIJE
CLRWDT INICIJALIZUJ WATCHDOG TAJMER
SLEEP PRELAZAK U STAND BY MOD

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

43.
43.
44.
45.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.
4.1
4.2
4.3
4.4
4.5
4.6
5.
5.1
5.2
5.3
5.4
5.5
5.6
5.7

UPUTSTVO ZA MPLAB IDE V5.40


UVOD
UPUTSTVO ZA MPLAB IDE V5.40
GENERISANJE NOVOG PROJEKTA
SIMULATOR MPLAB-A
MONTIRANJE I KORIENJE ICD UREAJA
PICSTART PLUS PROGRAMATOR
LABORATORIJSKE
VEBE
EKSPERIMENTALNOM PLOOM PIC 16F877
UVOD
VEBA BROJ 1
VEBA BROJ 2
VEBA BROJ 3
VEBA BROJ 4
VEBA BROJ 5
VEBA BROJ 6
LITERATURA

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

80.
81.
82.
83.
87.
89.
94.
SA
96.
97.
98.
101.
104.
108.
110.
112.
123.

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

0. PREDGOVOR

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Ova skripta, Mikrokontroleri predstavlja logian nastavak skripte Mikroraunari, koja
je u izdanju Vie Tehnike kole izila 2000. godine, i ini s njom jednu celinu.
Pisana je kao i skripta Mikroraunari, teorija sa primerima, i omoguava da se na lak
nain savlada gradivo koje je propisano planom i programom Vie Tehnike kole.
Gradivo je obraeno u pet poglavlja tako, da svako poglavlje ini zaokruenu celinu.
U skripti je obraena vrlo aktuelna problematika mikrokontrolera PIC familije preko
PIC 16F877 razvojne ploe.
Student koristei savladano teoretsko znanje iz skripte Mikroraunari moe da
prouava arhitekturu PIC 16F877 mikrokontrolera, moe da naui korienje MPLAB
okruenja za razvoj softvera, i na razvojnoj ploi, na realnom sistemu razvijeni softver
da testira.
Laboratorijske vebe opisane u petom poglavlju vode studenta korak po korak do
saznanja, koje e mu omoguiti samostalan rad na razvoju aplikacija sa
mikrokontrolerima u tehnici.
Na kraju skripte je dat spisak literature, korienjem ovih izdanja student e dobiti
odgovor na pitanja, koja ne obuhvataju ove skripte. Poto je skripta vezana za
mikrokontroler iz PIC familije, prilikom pisanja skripte korieni su izvori koji su
navedeni u literaturi.

U Subotici, 15.11.2002.

Istvn Matijevics

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1. UVOD

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1.1 MIKROPROCESOR, MIKRORAUNAR, MIKROKONTROLER


U skripti se daju elementi arhitekture mikrokontrolera, postupak programiranja i
korienja mikrokontrolera u realizaciji digitalnih sistema. Mikroprocesori se mogu
prouavati sa vie stanovita:
tehnolokog,
raunarskog i
korisnikog.
Prva dva stanovita su od interesa za inenjere mikroelektronike i za projektovanje
hardvera. U daljem e se panja uglavnom biti posveena prouavanju
mikrokontrolera sa stanovita korisnika.
Upisivanje programa u programsku memoriju, sprezanje procesora sa memorijom,
ulazno/izlaznim jedinicama, objektom upravljanja i drugim elementima okruenja je
posao inenjera hardvera. Za uspeno obavljanje ovog dela posla inenjer hardvera
mora poznavati arhitekturu, mogunost i karakteristike procesora, programsku
podrku 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 sreu se pojmovi:
mikroprocesor,
mikroraunar i
mikrokontroler.

1.1.1 MIKROPROCESOR
Pod mikroprocesorom se podrazumeva samo centralna procesorska jedinica (CPU),
koji sadri aritmetiko-logiku jedinicu (ALU) i upravljaku jedinicu (vidi skriptu
Mikroraunari).

1.1.2 MIKRORAUNAR
Mikroraunar se dobije sprezanjem mikroprocesora sa operativnom (radnom)
memorijom, ulazno-izlaznim jedinicama i drugim periferijama.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1.1.3 MIKROKONTROLER
Mikroraunari skromnijih mogunosti i ograniene namene izvedeni unutar samo
jednog ipa sa kojim se u cilju poveanja mogunosti i ograniene namene mogu
sprezati spoljni moduli. Kada se mikroraunar fiziki izvede u vidu jednog ipa strogo
namenjenog za projektovanje digitalnih sistema naziva se mikrokontroler.
Dakle sa gledita raunarske tehnike razlika izmeu mikroraunara 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
omoguavaju funkcije tipine 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 okruenjem tako da obavljaju zahtevne funkcije
sistema upravljanja. Za razumevanje rada i naina njihovog korienja potrebna su
izvesna znanja iz raunarske tehnike, koja se mogu izuavati generalno i detaljno ili
samo korisniki posmatrajui odreeni mikrokontroler.

1.1.4 HARDVER MIKRORAUNARA, MIKROKONTROLERA


Najee se koristi von Neumann-ov model mikroraunara. Blok ema ovog sistema
se vidi na slici 1.1.
Upravljaka jedinica iz operativne memorije ita odreenu instrukciju, realizuje je i
ide na sledeu instrukciju, gde e ponoviti prethodnu operaciju.
Operativna memorija je zajednika za program i za podatke, u principu sve je jedno,
gde se nalaze unutar te zajednike memorije podaci ili instrukcije. Poto u ovom
sluaju duina rei instrukcije, odnosno podataka je ista, i/ili za instrukciju, i/ili za
podatke nije mogue odrediti optimalnu duinu. Nadalje, kod isitivanja instrukcije iz
memorije, odnosno podataka
se koristi ista magistrala,
prema tome sporo radi
komunikacija
procesormemorija.

Slika 1.1: von Neumann-ov


model raunara.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Prednost reenja je u tome, to je hardver relativno jednostavan, a i u operativnoj
memoriji je jednostavno odrediti odnos duine blokova program-podaci. Krai
program sa mnogo podataka, ili dui, komplikovaniji program sa manje podataka
mogu da budu upisani u istu operativnu memoriju.
Raunar se sastoji od tri osnovna dela (Slika 1.2):
centralne procesorske jedinice(CPU-Central Processing Unit),
memorija i
ulazno/izlazni prikljuci (I/O Input/Output Ports).

Slika 1.2: arhitektura Neumann-ovog modela raunara


Harvard arhitektura raunara 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 raunara


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

10

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Time se postie vei protok informacija kroz centralnu procesorsku jedinicu a samim
tim i vea brzina rada. Odvajanje programske i memorije za podatke dalje
omoguava da instrukcije ne moraju biti 8-bitne rei. U ovom sluaju kod
projektovanja raunara moe se odrediti optimalna duina rei instrukcije.
Raunar se sastoji od etiri osnovna dela (Slika 1.4):
centralne procesorske jedinice(CPU-Central Processing Unit),
programska memorija,
memorija podataka i
ulazno/izlazni prikljuci (I/O Input/Output Ports).

Slika 1.4: arhitektura harvard-ovog modela raunara


Na primer neki mikrokontroleri koriste 14 bita za instrukcije to dozvoljava da sve
instrukcije budu od jedne rei. Tipino jo za harvard-sku arhitekturu je da ima manje
instrukcija od Neumann-ove i da se obino izvravaju u jednom ciklusu.
Mikrokontroleri sa Harvard-skom arhitekturom se jo nazivaju i `RISC
mikrokontroleri'. Naziv RISC je nastao od poetnih slova engleskih rei Reduced
Instruction Set Computer to u prevodu znai "Raunar sa smanjenim brojem
instrukcija". Mikrokontroleri sa von-Neumann-ovom arhitekturom se nazivaju `CISC
mikrokontroleri'. Naziv CISC je nastao od poetnih slova engleskih rei Complex
Instruction Set Computer ili u prevodu "Raunar sa kompleksnim setom instrukcija".

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

11

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1.1.5 MEMORIJA
Memorija raunara se sastoji od velikog broja memorijskih elija ili lokacija (registri).
Svaka lokacija se moe koristiti za upisivanje odreenog broja bita binarne
informacije. Memorija slui za smetanje binarno kodovanih informacija koje se
odatle po potrebi preuzimaju u procesu rada raunara.
U operativnoj memoriji raunara su:
binarni kodovi operacije, koje CPU moe da izvri i
binarni kodovi brojeva koji uestvuju u procesu obrade zadatog
algoritma.
Skup naredbi smeten u logian redosled koji odgovara zadatom algoritmu ini
program. Centralna procesorska jedinica preuzima jednu za drugom naredbe iz
zadatog programa i za svaku naredbu pojedinano izvrava binarno kodovanu
operaciju sadranu u naredbi. Na taj nain se zadati algoritam ili funkcija procesiranja
realizuje programski izvravanjem naredbi po logikom redosledu koji odgovara
zadatom algoritmu.

1.1.6 ULAZI - IZLAZI


Raunar sadri ulazne jedinice:
disk,
prekida,
D/A pretvara,
mikrofon,
tastatura itd.
Raunar sadri izlazne jedinice:
tampa,
ploter,
monitor,
disk,
D/A pretvara,
relej, itd.
Upravljaka jedinica sinhronizuje rad celog raunarskog sistema sa upravljakim
signalima. CPU preuzima naredbe iz memorije, dekodira njihovu binarnu notaciju i
izvrava njihove operacije.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

12

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1.1.7 ADRESE
U operativnoj memoriji svaku memorijsku lokaciju sainjava skup od n bita koji
nazivamo re. Rei u memoriji su istih duina, tj. sadre isti broj bita koji nazivamo
duinom rei. Ova duina je konstantna i nemoe se menjati u korienom raunaru.
Memorije poseduju razliite duine rei od 8 bita do 128 bita ili vie u velikim
raunarima opte namene. Mikroraunari i mikrokontroleri obino imaju duine rei
od 8 ili 16 bita.
Sve rei u memoriji ili memorijske lokacije imaju svoje adrese, koje poinju od 0 pa
sve do broja ukupnih rei u memoriji. Kapacitet memorije se najee izraava nekim
brojem iz povorke 2 N . Tipine memorije mikroraunara su 4096 (=2 12 ) i 8196 (=2 13 )
rei. Za takve memorije kaemo da imaju kapacitete od 4 kilobajta i 8 kilobajta ili 4K
i 8K, respektivno. Memorije veih kapaciteta se dele na stranice od po 1, 2 ili vie
kilobajta.
Informacije se upisuju u memoriju ili itaju iz memorije koristei adresu lokacije.
Naime, u koritenju raunara nikada se ne pozivamo na sadraj informacije, ve
iskljuivo na adresu memorijske lokacije gde treba upisati odnosno oitati
informaciju. Na prvi pogled ovakav postupak komuniciranja sa memorijom se ini
jednostavnim; ipak, vano je da se pravilno shvati zato je to tako.
Memorija u kojoj se u toku normalnog rada raunara mogu upisivati i iz nje oitavati
sadraj lokacija naziva se RAM memorija (Random Access Memory). Svaka lokacija
ove memorije se moe adresirati u bilo kom trenutku. Kada se iskljui napajanje
raunara, sadraji RAM-a se gube. Otuda se ova memorija koristi za upisivanje
podataka, privremenih naredbi ili operanada naredbi.
Memorija sa lokacijama iji se sadraji mogu samo oitavati, dakle ne i upisivati, u
toku normalnog rada raunara naziva se ROM memorija (Read Only Memory). Ova
memorija se koristi za upisivanje programa koji se izvrava vie puta, pa otuda
sadraji njenih lokacija moraju biti nepromenljivi, ak i u uslovima prekida napajanja
raunara. Dakle, sam mikroraunar ne upisuje nove informacije u program; samo
oitava sukcesivne naredbe smetene u lokacijama ROM-a i izvrava 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 najvanija komponenta svakog mikroraunara, mikrokontrolera;
predstavlja deo hardvera, u naem sluaju mikroprocesor, koji vri obradu podataka i
upravlja funkcijama svih ostalih delova mikroraunara, mikrokontrolera.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

13

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

CPU je takoe odgovoran za pravilno izvravanje svih funkcija mikroraunara. CPU


generie veinu impulsa (upravljakih signala) za kontrolu vremenskog redosleda po
kome spoljne jedinice komuniciraju sa raunarom. Veinu upravljakih funkcija
raunara vri hardver ili maina sa konanim brojem stanja ili FSN (Finite-StateMachine), koja je deo CPU-a. Ova maina primorava procesor da sekvencijalno
izvrava naredbe upisanog programa. Kad ukljuimo napajanje raunara, FSM zna
odakle treba da oita prvu naredbu iz programa. Kada preuzme neku naredbu, upie je
u registar naredbi gde se dekodira tako da CPU zna tano koju operaciju treba da
izvri. Tipian CPU se sastoji iz meusobno spregnutih:
registara ,
aritmetiko-logike jedinice(ALU) i
logikih modula za kontrolu vremenskog redosleda i upravljanja.

1.1.9 ARITMETIKO-LOGIKA JEDINICA


ALU je deo CPU-a izveden u vidu logikih kola koja omoguavaju izvravanje
aritmetikih i logikih operacija nad podacima u binarnom kodu. Brojni procesori
imaju relativno proste ALU-e koji ne mogu da izvre operacije mnoenja i delenja. Sa
takvim procesorima ove operacije se izvode programski-svoenjem, npr operacije
mnoenja na vie sukcesivnih operacija sabiranja i rotiranja meurezultata.
ALU (slika 1.5) poseduje, takoe, izvestan broj registara za upisivanje podataka
(operanada) u vidu digitalnih rei. Na poetku zadate operacije podatak se dostavlja u
ALU posredstvom upravljakih kola CPU-a. ALU zatim izvrava aritmetiku ili
logiku operaciju zadatu preko kontrolera CPU-a i upisuje rezultate u poseban registar
CPU-a koji se naziva akumulator (ACC). Osim toga, po zavretku 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 vei, jednak ili manji od 0. Na slian nain, bie potrebno pri
sabiranju dva broja da nas ALU izvesti da li je brojna vrednost rezultata u binarnom
kodu dua od 8 bita, tj. da li je rezultat prekoraio 8 bita jednog bajta i preneo se u 9-ti
bit. Popularno se kae da ALU daje signal zastavicom (flag-om) kojim nas upozorava
na neku osobenost dobijenog rezultata. Opcije mikroraunara uslovljene flegovima
bie kasnije detaljno opisane.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

14

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 1.5: aritmetiko-logika 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 veini
mikroprocesora i mikrokontrolera ovaj registar je osmobitni ili esnaestnobitni.
Osobenosti akumulatora su dvojake. U veini maina zadata aritmetika ili logika
operacija se ne moe izvesti nad sadrajima bilo koja dva radna registra unutar CPUa; jedan od njih mora biti akumulator. tavie, rezultat izvrene operacije uvek ostaje
upisan u ACC.
Druga vana osobenost ACC ogleda se u njegovoj ulozi posrednika u procesu
podataka izmeu memorije i CPU-a. Naime, ovaj prenos se uvek vri preko ACC.
Stoga postoje naredbe za upisivanje sadraja memoriske lokacije u ACC, kao i
naredbe za upisivanje sadraja ACC u memorijsku lokaciju, jer je samo ACC snop
elektronskih provodnika povezanih sa memorijom. tavie, sadraj ACC se moe
neposredno upisati u bilo koji registar unutar CPU-a, takoe bilo koji par registara
unutar CPU-a moe neposredno razmenjivati svoje sadraje.
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

15

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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.
Obino 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 maina mogla brzo i pouzdano da izvrava zadate operacije, mora se
uspostaviti i odravati stalna veza izmeu ovih hardverskih komponenata:
CPU-om,
memorijom i
I/ O portovima.
Takva povezivanja se izvode magistralama koje zapravo, predstavljaju snopove
elektrinih provodnika grupisanih prema prirodi digitalnih signala koje prenose. Na
slici 1.6 su prikazani osnovni moduli povezani magistralama.

Slika 1.6: arhitektura mikroraunara, mikrokontrolera


Magisrala podataka je snop od osam provodnika koji prenose pojedine bitove
podataka i to u oba smera na relacijama izmeu CPU-a, memorije i I/O portova.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

16

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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.
Upravljaka 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 odreuju aktivnosti koje se mogu realizovati. Tipovi
aktivnosti mogu biti:
oitaj sadraj memoriske lokacije,
upii podatak u memorijsku lokaciju,
oitaj prispeli podatak na I/O portu,
prenesi podatak dobijen u rezultatu procesiranja na I/O portu,
potvrdi nastanak signala prekida itd.
Prednost korienja magistrala je oigledna: umesto pojedinanih provodnika za
povezivanje parova brojnih komponenti raunara veze izmeu komponenti se
ostvaruju snopovima provodnika, koji se proteu kroz ceo sistem. Razume se, pri
ovakvom povezivanju arhitekta raunara mora predvideti obezbeenje 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 moe da izvri se indentifikuje svojim
bajtom (digitalnom rei od 8 bita), koji se naziva kod operacije (OP CODE-Operation
Code). Poto je sa 8 bita mogue formirati 256(=2 8 ) razliitih bajtova, osmobitni
mikroraunari imaju najee 256 ili manje bajtova u naredbama. Ali, budui da
jedna naredba moe imati najmanje jedan a najvie tri bajta, ukupan broj naredbi je
manji od 256.
Kod mikrokontrolera poto organizacija programske memorije ne zavisi od memorije
podataka realizovana je obino 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
informiu CPU o tipu naredbe ije izvrenje zahteva programer, dajui mu binarno
kodovanu verziju naredbe. Pretpostavimo da CPU zna da je sledea 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 upravljake magistrale. Pretpostavimo da je binarni kod podatka u
lokaciji 15 jednak 01001000. Adresirana lokacija e se odazvati na upravljaki signal
dostavljanjem svog sadraja 01001000 na magistralu podataka. Poto CPU zna da
broj 01001000 u ovom sluaju nije podatak, ve binarno kodovana naredba, on nee
broj dostaviti u akumulator, ve u registar naredbi i dekoder (IRD). Registarski deo
IRD-a slui za upisivanje prispelog podatka, a dekoder, koji u stvari predstavlja mreu
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

17

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
logikih kola, dekodira svaki prispeli podatak (naredbu) u upravljaki signal koji
aktivira svoj mehanizam unutar CPU-a za izvravanje prispele naredbe.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

18

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2. MIKROKONTROLER PIC 16F877

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

19

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.1 UVOD
PIC 16F877 spada u 8-bitne mikrokontrolere RISC arhitekture. Njegova uoptena
struktura je predstavljena na slici 2.1 sa osnovnim blokovima.

Slika 2.1: blok ema mikrokontrolera PIC16F877

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

20

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Programska memorija (FLASH) je namenjena za smetanje napisanog programa.
Kako se memorija izraena u FLASH tehnologiji moe vie puta brisati i
programirati, zbog toga je ovaj mikrokontroler pogodan za razvoj ureaja.
EEPROM memorija je namenjena za podatke koje treba sauvati i kada napajanja
nema. Obino se koristi za smetanje vanih 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 dovoenju napajanja bilo potrebno jo jednom
izvriti podeavanje, ime ureaj gubi na svojoj samostalnosti u radu.
RAM memorija namenjena je za podatke koje koristi program u svom izvravanju. U
RAM se smetaju svi meurezultati ili privremeni podaci koje nisu od vanosti za rad
ureaja u sluaju nestanka napajanja.
PORTA, PORTB, PORTC, PORTD i PORTE koriste se za fizike veze
mikrokontrolera sa spoljnim svetom. Port A ima est noica, portovi B, C i D osam, a
port E tri noice (pin-ova).
SLOBODNI BROJA je osmobitni registar unutar mikrokontrolera koji radi
nezavisno od programa. Na svaki etvrti takt iz oscilatora on uvea svoju vrednost
dok ne dostigne maksimum (255), a onda brojanje kree ponovo od nule. Kako se
tano zna vreme izmeu svaka dva uveanja sadraja brojaa, on se moe iskoristiti
za merenje vremena to je veoma korisno kod nekih ureaja.
CENTRALNA PROCESORSKA JEDINICA vri ulogu veznog elementa izmeu
ostalih blokova mikrokontrolera. Ona koordinira rad ostalih blokova i izvrava
korisniki program.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

21

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.2 CISC I RISC ARHITEKTURE


Ve je reeno da PIC16F877 ima RISC arhitekturu. Ovaj pojam se esto sree u
raunarskoj 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 postie vei protok informacija kroz centralnu
procesorsku jedinicu a samim tim i vea brzina rada. Odvajanje programske i
memorije za podatke dalje omoguava da instrukcije ne moraju biti 8-bitne rei.
PIC16F877 koristi 14-bita za instrukcije to dozvoljava da sve instrukcije imaju
duinu od jedne rei. Tipino jo za harvard-sku arhitekturu je da ima manje
instrukcija od von Neumann-ove i da se instrukcije obino izvravaju u jednom
ciklusu.
Mikrokontroleri sa harvard-skom arhitekturom se jo nazivaju i `RISC
mikrokontroleri'. Naziv RISC je nastao od poetnih slova engleskih rei Reduced
Instruction Set Computer to u prevodu znai "Raunar sa smanjenim brojem
instrukcija". Mikrokontroleri sa von Neumann-ovom arhitekturom se nazivaju `CISC
mikrokontroleri'. Naziv CISC je nastao od poetnih slova engleskih rei Complex
Instruction Set Computer ili u prevodu "Raunar sa kompleksnim setom instrukcija".
Kako je PIC16F877 RISC mikrokontroler to znai da ima smanjen set instrukcija,
tanije 35 (npr. Intel-ovi i Motorolini mikrokontroleri imaju preko sto instrukcija)
koje se sve izvravaju u jednom ciklusu sem instrukcija skokova i grananja. Po
reima proizvoaa PIC 16F877 obino dostie rezultate od 2:1 u kompresiji koda i
4:1 u brzini u odnosu na druge 8-bitne mikrokontrolere u svojoj klasi.
Razlika izmeu Neumann-ove i harvard-ske arhitekture je na slici 2.1.

Slika 2.2: razlika izmeu arhitekture CISC i RISC

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

22

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.3 PODRUJA PRIMENE MIKROKONTROLERA PIC 16F877


PIC 16F877 savreno odgovara za razne primene, od automobilske industrije i
kontrole kunih ureaja do industrijskih ureaja, daljinskih senzora, elektronskih
brava i sigurnosnih ureaja. Takoe je idealan za "smart" kartice kao i za baterijski
napajane ureaje zbog svoje male potronje.
EEPROM memorija olakava primenu mikrokontrolera u ureajima gde je potrebno
trajno uvanje raznih parametara (kodovi za predajnike, brzine motora, frekvencije
prijemnika, itd.). Niska cena, mala potronja, lakoa 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 veim
sistemima, koprocesorske aplikacije itd.).
Programabilnost unutar sistema (In System Programmability) ovog ipa (uz
korienje samo dve noice za prenos podataka) omoguava fleksibilnost proizvoda
posle potpunog sastavljanja i testiranja. Ova mogunost moe biti iskoriena za
serijalizovanje proizvodnje, uvanje kalibracijskih podataka dostupnih samo po
finalnom testiranju ili poboljavanje programa na zavrenim proizvodima.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

23

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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 rei Clock. Zadatak
oscilatora je sinhronizacija rada mikrokontrolera.
Takt iz oscilatora u mikrokontroler ulazi preko noice 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 mainski
ciklus) u kome se izvrava jedna instrukcija.
Izvrenje instrukcije kree pozivanjem instrukcije koja je na redu iz programske
memorije na svaki Ql, i njenim upisom u instrukcijski registar na Q4. Deifrovanje i
izvravanje instrukcije se obavlja izmeu narednih Q1 i Q4 ciklusa. Na slici 2.3 se
vidi odnos instrukcijskog ciklusa i takta oscilatora (OSCI) kao i internih taktova Q1Q4. Sa PC je oznaen programski broja (Program Counter) koji sadri informaciju o
adresi naredne instrukcije.

Slika 2.3: vremenski dijagram izvrenja instrukcije

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

24

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.5 PROTONA OBRADA INSTRUKCIJA (PIPELINING)


"Instrukcijski ciklus" se sastoji iz ciklusa Ql, Q2, Q3 i Q4. Ciklusi pozivanja i
izvravanja instrukcija su tako povezani da je za pozivanje potreban jedan
instrukcijski ciklus, a za deifrovanje i izvravanje jo jedan. Meutim, zbog protone
obrade, svaka instrukcija se efektivno izvrava u jednom ciklusu. Ako instrukcija
prouzrokuje promenu na programskom brojau tj. on ne ukazuje na narednu adresu
ve na neku drugu (to je sluaj sa skokovima ili pozivanjem podprograma), onda su
potrebna dva ciklusa za izvravanje instrukcije jer se mora ponovo uzeti u obradu
instrukcija, ali ovaj put sa prave adrese.
Ciklus pozivanja poinje na Ql taktu, upisivanjem u "instrukcijski registar (IR)" a
deifrovanje i izvravanje tokom Q2, Q3 i Q4 takta (slika 2.4).

Slika 2.4: protona obrada instrukcija


U tabeli 2.1 je dato objanjenje za vremenski dijagram sa slike 2.4
Tabela 2.1: protona obrada instrukcija kod mikrokontrolera PIC 16F877
TCY0 uitava se instrukcija MOVLW 55h (nije nam bitno koja se instrukcija tada
izvrila zbog ega i nema donjeg pravougaonika)
TCY1 izvrava se instrukcija MOVLW 55h i uitava MOVWF PORTB
TCY2 izvrava se MOVWF PORTB a uitava CALL SUB_1
TCY3 izvrava se poziv podprograma CALL SUB_1 i uitava instrukcija BSF
PORTA, BIT3. Kako ova instrukcija nije ona koja nam treba, tj. nije prva
instrukcija podprograma SUB_1 ije je izvrenje na redu mora se uitati
ponovo instrukcija. Ovo je dobar primer kada za izvrenje instrukcije treba
vie od jednog ciklusa
TCY4 instrukcijski ciklus je ceo iskorien za uitavanje prve instrukcije iz
podprograma na adresi SUB_1
TCY5 izvrava se prva instrukcija iz podprograma SUB_1 i uitava naredna

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

25

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.6 ZNAENJE NOICA (PINOVA)


PIC16F877 ima ukupno 40 noica (slika 2.5). Najee je u varijanti DIP 40 kuita
ali se moe sresti i u SMD kuitu koje je manje od DIP-a. Skraenica DIP je nastala
od poetnih slova engleskih rei "Dual In Package" to bi u prevodu znailo
"pakovanje sa noicama sa obe strane". SMD je takode skraenica od poetnih slova
engleskih rei "Surface Mount Devices" ili u prevodu "komponente za povrinsku
montau" asocirajui da za lemljenje ove vrste komponenti nije potrebno imati rupe
kroz koje bi noice prole i bile zalemljene. Pin je argonski izraz za noicu
elektronskog kola ili jasnije reeno spoljni izvod.

Slika 2.5: raspored noica mikrokontrolera PIC 16F877

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

26

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.7 GENERATOR TAKTA-OSCILATOR


Oscilatorno kolo se koristi kako bi se obezbedio takt mikrokontroleru. Takt je
potreban da bi mikrokontroler bio u mogunosti da izvrava program tj. programske
instrukcije.

2.7.1 TIPOVI OSCILATORA


PIC16F877 moe da radi sa etiri razliite oscilatorske konfiguracije. Kako su
konfiguracije sa kristalnim oscilatorom i otpornik-kondenzator (RC) najzastupljenije,
bie pomenute samo one. Tip mikorokontrolera sa kristalnim oscilatorom u svojoj
oznaci ima XT a sa otpornik-kondenzator parom RC. Ovo je bitno, jer je vano
navesti tip oscilatora prilikom kupovine mikrokontrolera.
XT oscilator
Kristalni oscilator je smeten u metalno kuite sa dva izvoda na kome je naznaena
frekvencija na kojoj kristal osciluje. Na svaku noicu potrebno je spojiti po jedan
keramiki 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 zajedniko kuite sa tri izvoda.
Takav element se naziva "keramiki 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 ureaja oscilator stavlja
to blie mikrokontroleru kako ne bi dolo do smetnji na linijama preko kojih
mikrokontroler dobija takt.

Slika 2.7: povezivanje rezonatora na


mikrokontroler

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

27

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
RC oscilator
Za aplikacije u kojima nije potrebna izuzetna vremenska preciznost, RC oscilator
(slika 2.8) nudi dodatnu utedu na ceni. Rezonantna frekvencija RC oscilatora zavisi
od vrednosti napona napajanja, otpornosti R, kapacitivnosti C i radne temperature.
Treba napomenuti da na rezonantnu uestanost imaju uticaja i normalne varijacije
parametara procesa, tolerancija eksternih R i C komponenata itd. Pin Takt/4 se moe
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 moe postati nestabilan, ili ak zaustaviti
oscilovanje, a sa vrlo visokim vrednostima R (npr. 1M) postaje osetljiv na um i
vlagu. Preporuuje se da vrednost otpornika R bude izmedu 3 k i 100 k. Iako e
oscilator raditi i bez eksternog kondenzatora (C = 0pF), preporuuje 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 noici, i moe se koristiti za testiranje ili sinhronizovanje drugih
logikih kola (na primer A/D pretvaraa), slika 2.9

Slika 2.9: odnos takta i broja instrukcijskih ciklusa

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

28

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Nakon dovoenja napajanja oscilator kree 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-frekvencija nakon ukljuivanja mikrokontrolera


Da bi spreili da ovakav nepravilan takt utie na rad mikrokontrolera, potrebno je za
vreme stabilizacije takta oscilatora drati mikrokontroler u resetovanom stanju.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

29

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.8 RESET LOGIKA


Reset se koristi za dovoenje mikrokontrolera u poznato stanje (poetno stanje). To
praktino znai, da se mikrokontroler pod odreenim nepovoljnim uslovima moe
ponaati nepravilno. Da bi se nastavio pravilan rad potrebno ga je resetovati, kako bi
se svi registri postavili u poetni poloaj. Reset se ne koristi samo kada se
mikrokontroler ne ponaa kako elimo, on se moe koristiti i kao prekid izvrenja
programa prilikom isprobavanja ureaja ili pripreme mikrokontrolera za uitavanje
programa.

Slika
2.11:
Korienje
unutranjeg reset kola

Da bi spreili sluajno dovoenje logike 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 odreenu liniju
preventivno dri na logikoj jedinici naziva se "pull-up" to bi u prevodu znailo
"podii liniju".
Mikrokontroler PIC16F877 poznaje nekoliko izvora reseta:
resetovanje pri dovoenju napajanja, POR Power-On Reset),
resetovanjem tokom regularnog rada dovodenjem logike nule na pin MCLR
mikrokontrolera,
resetovanjem za vreme SLEEP reima,
resetovanje na prekoraenju sigurnosnog brojaa (WDT) tokom regularnog
rada i
resetovanje na prekoraenju sigurnosnog brojaa (WDT) tokom SLEEP
reima rada.
Za nas su najvaniji izvori reseta naznaena u redosledu kao prvi i drugi. Prvi se javlja
svaki put kada se dovede napajanje mikrokontroleru i slui da se svi registri dovedu u
poetno stanje, a drugi je proizvod namernog dovodenja logike nule na pin MCLR u
toku normalnog rada mikrokontrolera. Ovaj drugi se esto koristi prilikom razvijanja
programa.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

30

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Prilikom reseta, memorijske lokacije RAM-a se ne resetuju, oni su nepoznati na
ukljuenju i ne menjaju se na bilo kom resetovanju. Za razliku od njih SFR registri se
resetuju na polazno stanje. Jedan od najvanijih efekata reseta je postavljanje
programskog brojaa (PC) na nulu (0000h) ime se obezbeuje da program pone da
se izvrava od prve napisane instrukcije.
Reset na pad napona ispod dozvoljene granice (Brown-out Reset)
Impuls za resetovanje pri dovodenju napajanja (pri ukljuenju) generie 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. Meutim, problem nastaje
u toku rada ureaja kada napajanje ne padne na nulu ve se samo smanji i to ispod
granice koja garantuje pravilan rad mikrokontrolera. Ovo je mogu sluaj u praksi
pogotovo u industrijskim okruenjima gde su smetnje i nestabilnost napajanja
svakodnevna pojava. Da bi se ovaj problem razreio potrebno je osigurati da
mikrokontroler bude u reset stanju svaki put kada napajanje padne ispod dozvoljene
granice.
Ukoliko po elektrinoj specifikaciji interno reset kolo mikrokontrolera ne moe da
zadovolji potrebe, mogu se iskoristiti posebne elektronske komponente koje su u
stanju da generiu eljeni reset signal. Pored te funkcije mogu imati i funkciju
nadgledanja napona napajanja. Ukoliko napon padne ispod odreenog nivoa
pojavljuje se logika nula na MCLR pinu, koja mikrokontroler dri u reset stanju sve
dok napon ponovo ne bude u granicama koje garantuju ispravan rad.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

31

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.9 CENTRALNA PROCESORSKA JEDINICA


Centralna procesorska jedinica se u strunoj literaturi oznaava kao CPU (
2.13). Skraenica je nastala od poetnih slova engleskih rei "Centrall Procesing Unit
"pa se odatle i u svakodnevnom govoru zove CPU. CPU se obino shvata kao
"mozak" mikrokontrolera. Taj deo je odgovoran za pronalaenje i pribavljanje
odgovarajue instrukcije koja se treba izvriti, dekodiranje te instrukcije i na kraju
njeno izvrenje.

Slika 2.13: ema centralne procesorske jedinice - CPU


Centralna procesorska jedinica povezuje sve delove mikrokontrolera u jednu celinu.
Najvanija uloga je svakako dekodiranje programskih instrukcija. Kada programer
napie program, instrukcije imaju za oveka jasan oblik kao npr.:
MOVLW 0x20.
Meutim, da bi mikrokontroler to razumeo, taj "slovni" oblik instrukcije se mora
prevesti u niz nula i jedinica koji se naziva "opkod" po engleskoj rei "opcode ". Taj
prevod iz slovnog u binarni oblik rade prevodioci kao to je npr. asemblerski
prevodilac (skraeno 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 izvravaju potreban zadatak definisan
u toj instrukciji. Kako instrukcije u sebi mogu sadrati zadatke koji zahtevaju razna
prebacivanja podataka iz jedne memorije u drugu, iz memorije na portove ili neka
izraunavanja, to onda CPU mora biti povezan sa svim delovima mikrokontrolera.
Ovo omoguuje magistrala podataka i adresna magistrala.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

32

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.10 ARITMETIKO LOGIKA JEDINICA


Aritmetiko logika jedinica (Arithmetic Logic Unit -ALU) zaduena je za obavljanje
operacija sabiranja, oduzimanja, pomeranja (levo ili desno unutar registra) i logikih
operacija. Pomeranje podatka unutar registra je poznatije jo i kao "iftovanje". Naziv
je nastao od engleske rei "shift" to znai pomeriti. Kako je ovaj termin odomaen,
koristie se u daljem tekstu. PIC16F877 sadri 8-bitnu aritmetiko logiku jedinicu i
8-bitne radne registre ( 2.14).

Slika 2.14: aritmetiko-logika jedinica i nain njenog rada


U instrukcijama sa dva operanda, obino je jedan operand u radnom registru (W
registar), a drugi je neki od registara ili konstanta. Pod "operandom" se podrazumeva
sadraj nad kojim se vri neka operacija, a registar je bilo koji od GPR ili SFR
registara. GPR je skraenica 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 izvoenje aritmetikih i logikih
operacija, ALU kontrolie statusne bitove (bitovi koji se nalaze u STATUS registru).
Izvravanje nekih instrukcija utie na status bitove, to zavisi od stanja samog
rezultata. Zavisno od instrukcije koja se izvrava, ALU moe uticati na vrednost
Carry bita (C), Digit Carry (DC), i Zero (Z) bitova u STATUS registru.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

33

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.11 PORTOVI
"Port" je engleski izraz za grupu pinova mikrokontrolera kojima se istovremeno
moe pristupati tj. postaviti eljenu kombinaciju nula i jedinica na njih ili sa njih
proitati postojee stanje. Kako je re "port" duboko odomaena, koristie se u
daljem tekstu.
Fiziki, port (slika 2.15) je registar unutar mikrokontrolera koji je provodnicima
povezan sa pinovima mikrokontrolera. Portovi su fizika 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 vri 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 ureaja koji se razvija. Da bi definisali pin kao ulazni ili kao
izlazni mora se u registar TRIS upisati odgovarajua kombinacija nula i jedinica. Ako
je na odgovarajuem mestu u TRIS registru upisana logika jedinica "1" onda je taj
pin ulazni, u obratnom sluaju pin je izlazni. Svaki port ima svoj odgovarajui TRIS
registar.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

34

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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 omoguava da se
mikrokontroler programira vie puta pre nego to se ugradi u ureaj, a i nakon
ugradnje ako doe do eventualnih izmena programa ili parametara procesa. Veliina
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 sadraj 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 obino slui za
uvanje vanih parametara (npr. zadanu ternperaturu kod temperaturnih regulatora) postoji
tana procedura za upis u EEPROM koja se mora ispotovati kako bi se izbegao sluajan
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 poetnih
slova engleskih rei General Purpose Registers ili registri opte namene. GPR registrima
se pristupa bez obzira koja je banka trenutno izabrana.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

35

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 2.16: memorijska organizacija mirokontrolera PIC 16F877

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

36

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.13 PROGRAMSKI BROJA


Programski broja (PC) je 13-to bitni registar koji sadri adresu instrukcije koja se
izvrava. Njegovim uveavanjem ili promenom (npr. u sluaju skoka) mikrokontroler
izvrava jednu po jednu instrukciju programa.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

37

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.14 STEK MEMORIJA


PIC16F877 ima 13-bitni stek (Stack) sa 8 nivoa ili drugim reima, grupisanih 8
memorijskih lokacija irine 13 bita sa posebnom namenom. Njegova osnovna uloga je
da sauva vrednost programskog brojaa nakon to se iz glavnog programa skoi na
adresu podprograma koji se izvrava. Da bi program znao da se vrati na mesto odakle
je poao, mora sa steka da vrati vrednost programskog brojaa. Pri prelasku iz
programa u podprogram, programski broja se potiskuje na stek (primer je instrukcija
CALL), a pri izvrenju instrukcija kao to su RETURN, RETLW ili RETFIE koje se
izvravaju na kraju podprograma, vraa sa steka da bi program mogao da nastavi tamo
gde je stao pre nego to je bio prekinut. Ove operacije stavljanja i vraanja sa steka
programskog brojaa u argonu se nazivaju PUSH i POP po instrukcijama koje pod
istim imenom postoje na nekim veim mikrokontrolerima.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

38

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

2.15 PROGRAMIRANJE UNUTAR SISTEMA - IN SYSTEM


PROGRAMIG:
Da bi se programirala programska memorija, mikrokontroler mora biti postavljen u
specijalni reim rada podizanjem MCLR noice na napon od 13.5V, a napon
napajanja Vdd mora biti stabilan izmedu 4.5 V do 5.5 V. Programska memorija se
moe programirati serijski, korienjem dve data/clock noice koje prethodno
moraju biti odspojene sa linija u ureaju, kako ne bi dolo do greaka pri
programiranju.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

39

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3. SET INSTRUKCIJA MIKROKONTROLERA


FAMILIJE PIC 16FXX

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

40

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.1 UVOD
Kompletan set koji obuhvata 35 instrukcija dat je u tabeli 3.1. Razlog ovako malog
broja instrukcija lei pre svega u injenici da se radi o RISC mikrokontroleru ije su
instrukcije dobro optimizovane sa gledita brzine rada, jednostavnosti arhitekture i
kompaktnosti koda. Jedina "mana" je, to se od programera oekuje da savlada
"neudobnu" tehniku korienja skromnog seta od 35 instrukcija.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

41

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.2 INSTRUKCIJE MIKROKONTROLERA


Razliite instrukcije po zadacima moemo grupisati kao i instrukcije za:
prenos podataka,
aritmetike i logike operacije,
operacije nad bitovima i
upravljanje tokom programa.

3.2.1 PRENOS PODATAKA


Prenos podataka u mikrokontroleru obavlja se izmeu radnog (W registra) i "f"
registra koji predstavlja bilo koju lokaciju internog RAM-a (bez obzira da li su to
registri specijalne ili opte namene).
Prve tri instrukcije obezbeuju (tabela 3.1) upis konstante u W registar (MOVLW je
skaraenica 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 ARITMETIKE I LOGIKE OPERACIJE


Od svih aritmetikih operacija, PIC kao i veina mikrokontrolera podrava samo
sabiranje i oduzimanje. Flegovi C, DC, Z postavljaju se u zavisnosti od rezultata
sabiranja ili oduzimanja, ali sa jednim izuzetkom: poto se oduzimanje obavlja kao
sabiranje sa negativnom vrednou, fleg C je posle oduzimanja inverzan, znai
setovan je ako je operacija mogua, a resetovan ako je vei broj oduzet od manjeg.
Logika jedinica PIC-a ima mogunost izvoenja operacija I, ILI, EX-ILI, negacije
(COMF) i rotiranja (RLF i RRF).
Instrukcije koje rotiraju sadraj 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

42

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.2.3 OPERACIJE NAD BITOVIMA


Instrukcije BCF i BSF vre resetovanje ili setovanje jednog bita bilo gde u memoriji.
Mada ovo izgleda kao jednostavna operacija, ona se izvrava tako to CPU najpre
proita ceo bajt, izmeni jedan bit u njemu i onda ceo bajt upie na isto mesto.

3.2.4 UPRAVLJANJE TOKOM PROGRAMA


Instrukcije GOTO, CALL, RETURN izvravaju se isto kao i na svim drugim
mikrokontrolerima, s tim to je stek nezavisan od internog RAM-a i ogranien je na
osam nivoa.
"RETLW k" instrukcija je identina RETURN instrukciji, osim to se pre povratka iz
podprograma u W registar upisuje konstanta koja je definisana operandom
instrukcije. Ova instrukcija nam omoguuje lako kreiranje Lookup tabela. Najee
se koriste tako to izraunamo poziciju podatka u tabeli, saberemo je sa adresom na
kojoj tabela poinje i sa te lokacije (koja se obino nalazi u programskoj memoriji)
proitamo podatak.
Tabela se moe 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
Lookup

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

Poziciju lana tabele upiemo 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 poetnom adresom tabele koja se nalazi u PCL registru i tako
dobijamo stvarnu adresu podatka u programskoj memoriji. Pri povratku iz
podprograma u W registru imaemo sadraj adresiranog lana tabele. U prethodnom
primeru, nakon povratka iz podprograma u W registru bie konstanta "k2".

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

43

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.2.5 KORIENI TERMINI U ASEMBLERU


f
W
b
d
label
TOS
[]
<>

bilo koja memorijska lokacija mikrokontrolera


radni registar
pozicija bita u f registru
odredini bit
skup od najvie osam karaktera koji oznaava poetak dela programa.
vrh steka ( Top Of Stack)
opcija
polje bita u registru

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

44

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3 DETALJAN OPIS INSTRUKCIJA MIKROKONTROLERA PIC


16F877

3.3.1

MOVLW

Upii konstantu u registar W

Sintaksa:

[labela] MOVLW

Opis:

8-mo bitnu konstantu k upisuje u W registar.

Operacija:

k => (W)

Operand:

0 k 255

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

MOVLW
0x5A
Posle instrukcije:
W=0x5A

Primer 2

MOVLW

REGISTAR

Pre instrukcije:
Posle instrukcije:

W=0x10 i REGISTAR=0x40
W=0x40

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

45

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.2

MOVWF

Prepii W u f

Sintaksa:

[labela] MOVWF

Opis:

Sadraj W registra prepisuje se u f registar.

Operacija:

(W) => f

Operand:

0 f 127

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

Primer 2

MOVWF

OPTION_REG=0x20

Pre instrukcije:

OPTION_REG=0x20
W=0x40

Posle instrukcije:

OPTION_REG=0x40
W=0x40

MOVWF

INDF

Pre instrukcije:

W=0x17
FSR=0xC2
sadraj adrese 0xC2=0x00

Posle instrukcije:

W=0x17
FSR=0xC2
sadraj adrese 0xC2=0x17

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

46

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.3 MOVF

Prepii f u d

Sintaksa:

[labela] MOVF

Opis:

Sadraj f registra smeta se na lokaciju koju odreuje operand d.


Ukoliko je d=0, odredite je W registar.
Ukoliko je d=1, odredite je sam f registar.
Opcija d=1 se koristi za testiranje sadraja f registra jer izvravanje
ove instrukcije utie na Z fleg u STATUS registru.

Operacija:

(f) => d

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

f,d

Broj ciklusa: 1

Primer 1

MOVF

FSR, 0

Pre instrukcije:

FSR=0xC2
W=0x00

Posle instrukcije:
Z=0

W=0xC2

Primer 2

MOVF

INDF, 0

Pre instrukcije:

W=0x17
FSR=0xC2
sadraj adrese 0xC2=0x00

Posle instrukcije:

W=0x17
FSR=0xC2
sadraj adrese 0xC2=0x00
Z=1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

47

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.4

CLRW

Upii 0 u W

Sintaksa:

[labela] CLRW

Opis:

Sadraj W registra se izjednaava sa nulom, a Z fleg u STATUS


registru se setuje na jedan

Operacija:

0 => W

Operand:
Fleg:

Broj rei:

Broj ciklusa: 1

Primer

CLRW
Pre instrukcije:

W=0x55

Posle instrukcije:

W=0x00
Z=1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

48

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.5

CLRF

Upii 0 u f

Sintaksa:

[labela] CLRF f

Opis:

Sadraj f registra se izjednaava sa nulom, a Z fleg u STATUS registru


se setuje na jedan

Operacija:

0 => f

Operand:
Fleg:

Broj rei:

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
sadraj adrese 0xC2=0x33

Posle instrukcije:

FSR=0xC2
sadraj adrese 0xC2=0x00
Z=1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

49

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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 smeta u W registar.
Ako je d=1 rezultat se smeta 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 rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

50

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.7

ADDLW

Saberi W sa konstantom

Sintaksa:

[labela] ADDLW k

Opis:

Sadraj W registra se sabira sa 8-mo bitnom konstantom k i rezultat se


smeta u W registar.

Operacija:

(W) + k => W

Operand:

0 k 255

Fleg:

C,DC,Z

Broj rei:

Broj ciklusa: 1

Primer 1

ADDLW 0x15
Pre instrukcije:

W=0x10

Posle instrukcije:

W=0x25

Primer 2

ADDLW REG
Pre instrukcije:

W=0x10
sadraj registra REG=0x37

Posle instrukcije:

W=0x47

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

51

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.8

ADDWF

Saberi W i f

Sintaksa:

[labela] ADDWF f, d

Opis:

Sabira sadraj registra W sa registrom f.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

(W) + f => d

Operand:

0 f 127
d = [0,1]

Fleg:

C,DC,Z

Broj rei:

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
sadraj adrese 0xC2=0x20

Posle instrukcije:

W=0x17
FSR=0xC2
sadraj adrese 0xC2=0x37

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

52

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.9

SUBLW

Oduzmi W od konstante

Sintaksa:

[labela] SUBLW k

Opis:

Sadraj W registra se oduzima od konstante k i rezultat se smeta u W


registar.

Operacija:

k - (W) => W

Operand:

0 k 255

Fleg:

C,DC,Z

Broj rei:

Broj ciklusa: 1

Primer 1

SUBLW 0x03
Pre instrukcije:

W=0x01, C=x, Z=x

Posle instrukcije:

W=0x02, C=1, Z=0

Pre instrukcije:

W=0x03, C=x, Z=x

Posle instrukcije:

W=0x00, C=1, Z=1

Pre instrukcije:

W=0x04, C=x, Z=x

Posle instrukcije:

W=0xFF, C=0, Z=0 rezultat je negativan

rezultat je pozitivan

rezultat je nula

Primer 2

SUBLW REG
Posle instrukcije:

W=0x10
sadraj REG = 0x37

Pre instrukcije:

W=0x27
C=1

rezultat je pozitivan

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

53

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.10

SUBWF

Oduzmi W i f

Sintaksa:

[labela] SUBWF f, d

Opis:

Sadraj registra W se oduzima od sadraja f registra.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

(f) - (W)=> d

Operand:

0 f 127
d = [0,1]

Fleg:

C,DC,Z

Broj rei:

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

Pre instrukcije:

REG=2, W=2, C=x, Z=x

Posle instrukcije:

REG=0, W=2, C=1, Z=0

Pre instrukcije:

REG=1, W=2, C=x, Z=x

Posle instrukcije:

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

rezultat je pozitivan

rezultat je nula

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

54

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.11

ANDLW

Logiko I W sa konstantom

Sintaksa:

[labela] ANDLW k

Opis:

Vri operaciju logiko I nad sadrajem W registra i konstante k.


Rezultat se smeta u W registar.

Operacija:

(W) .AND. k => W

Operand:

0 k 255

Fleg:

Broj rei:

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:

Posle instrukcije:

W=0xA3

;1010 0011

(0xA3)

REG=0x37

;0011 0111

(0x37)

W=0x23

---------------------------;00100011
(0x23)

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

55

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.12

ANDWF

Logiko I W sa f

Sintaksa:

[labela] ANDLW f, d

Opis:

Vri operaciju logiko I nad sadrajima W i f registra.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

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

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

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)

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

56

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.13

IORLW

Logiko ILI W sa konstantom

Sintaksa:

[labela] IORLW k

Opis:

Nad sadrajem W registra i osmobitnom konstanatom k vri se


operacija logiko ILI i rezultat se smeta u W registar.

Operacija:

(W) .OR. k => W

Operand:

0 k 255

Fleg:

Broj rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

57

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.14

IORWF

Logiko ILI W sa f

Sintaksa:

[labela] IORLW f, d

Opis:

Nad sadrajem W i f registra vri se operacija logiko ILI.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

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

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

Primer 2

IORLW REG, 0
Pre instrukcije:

REG=0x13,W=0x91

Posle instrukcije:

REG=0x13,W=0x93
Z=0

IORLW REG, 1
Pre instrukcije:

REG=0x13,W=0x91

Posle instrukcije:

REG=0x93,W=0x91
Z=0

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

58

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.15 XORLW

Logiko iskljuivo ILI W sa konstantom

Sintaksa:

[labela] XORLW k

Opis:

Nad sadrajem W registra i konstante k vri se operacija iskljuivo ILI


(eng. XOR) i rezultat se smeta u W registar.

Operacija:

(W) .XOR. k => W

Operand:

0 k 255

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

XORLW 0xAF
Pre instrukcije:

W=0xB5

;1010 1111 (0xAF)

Posle instrukcije:

W=0x1A
Z=0

;1011 0101 (0xB5)


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

Primer 2

IORLW REG
Pre instrukcije:

W=0xAF
REG=0x37

Posle instrukcije:

W=0x98
Z=0

;1010 1111 (0xAF)


;0011 0111 (0x37)
----------------------;1001 1000 (0x98)

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

59

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.16

XORWF

Logiko iskljuivo ILI W sa f

Sintaksa:

[labela] XORLW f, d

Opis:

Nad sadrajem W i f registra vri se logika operacija isljuivo ILI.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

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

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

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)

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

60

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.l7

INCF Uveaj f

Sintaksa:

[labela] INCF f, d

Opis:

Uveaj f registar za jedan.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

(f) + 1 => d

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

INCF REG, 1
Pre instrukcije:
Posle instrukcije:

REG=0xFF
Z=0
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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

61

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.l8

DECF

Umanji f

Sintaksa:

[labela] DECF f, d

Opis:

Umanjuje f registar za jedan.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

(f) - 1 => d

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

INCF REG, 1
Pre instrukcije:
Posle instrukcije:

REG=0x01
Z=0
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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

62

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.l9

RLF Rotiraj f ulevo kroz CARRY

Sintaksa:

[labela] RLF f, d

Opis:

Sadraj f registra se rotira za jedno mesto ulevo prekoC (Carry) flega.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

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

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

registar f

Broj ciklusa: 1

Primer 1

RLF REG, 0
Pre instrukcije:
Posle instrukcije:

REG = 1110 0110


C=0
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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

63

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.20

RRF Rotiraj f udesno kroz CARRY

Sintaksa:

[labela] RRF f, d

Opis:

Sadraj f registra se rotira za jedno mesto udesno prekoC (Carry) flega.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.

Operacija:

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

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

registar f

Broj ciklusa: 1

Primer 1

RRF REG, 0
Pre instrukcije:
Posle instrukcije:

REG = 1110 0110


W=x
C=0
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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

64

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.21

COMF

Komplementiraj f

Sintaksa:

[labela] COMF f, d

Opis:

Sadraj f registra se komplementira.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.
__
(f) => d

Operacija:
Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1

Primer 1

COMF REG, 0
Pre instrukcije:

REG=0x13

Posle instrukcije:

REG=0x13
W=0xEC

;0001 0011 (0x13)


;komplementiraj
;--------------------;1110 1100 (0xEC)

Primer 2

COMF INDF, 1
Pre instrukcije:

FSR = 0xC2
sadraj adrese (FSR)= 0xAA

Posle instrukcije:

FSR = 0xC2
sadraj adrese (FSR)=0x55

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

65

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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

Fleg:

Broj rei:

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
sadraj adrese (FSR)= 0x2F

Posle instrukcije:

W = 0x17
FSR = 0xC2
sadraj adrese (FSR)=0x27

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

66

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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

Fleg:

Broj rei:

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
sadraj adrese (FSR)= 0x20

Posle instrukcije:

W = 0x17
FSR = 0xC2
sadraj adrese (FSR)=0x28

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

67

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.24

BTFSC

Test bit b u f, preskoi ako je = 0

Sintaksa:

[labela] BTFSC f, b

Opis:

Ako je bit b u f registru jednak nuli, onda se preskae naredna


instrukcija. Ukoliko je bit b jednak nuli, tokom izvravanja tekue
instrukcije, onemoguuje se izvravanje naredne i umesto nje, izvrava
se NOP instrukcija, inei tekuu instrukciju dvociklusnom.

Operacija:

Preskoi narednu instrukciju ako je (f <b>) = 0

Operand:

0 f 127
0b7

Fleg:

Broj rei:

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

Primer

LAB_01
LAB_02
LAB_03

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


....
; Preskoi ovu liniju ako je = 0
....
; Ovde skoi 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

68

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.25

BTFSS Test bit b u f, preskoi ako je = 1

Sintaksa:

[labela] BTFSS f, b

Opis:

Ako je bit b u f registru jednak jedinici, onda se preskae naredna


instrukcija. Ukoliko je bit b jednak jedinici, tokom izvravanja tekue
instrukcije, onemoguuje se izvravanje naredne i umesto nje, izvrava
se NOP instrukcija, inei tekuu instrukciju dvociklusnom.

Operacija:

Preskoi narednu instrukciju ako je (f <b>) = 1

Operand:

0 f 127
0b7

Fleg:

Broj rei:

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

Primer

LAB_01
LAB_02
LAB_03

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


....
; Preskoi ovu liniju ako je = 0
....
; Ovde skoi 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

69

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.26

INCFSZ

Uveaj f, preskoi ako je =0

Sintaksa:

[labela] INCFSZ f, d

Opis:

Sadraj f registra se uveava za jedan.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.
Ukoliko je rezultat = 0 naredna instrukcija se izvrava kao NOP inei
tekuu instrukciju dvociklusnom.

Operacija:

(f) + 1 => d

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1 ili 2 u zavisnosti od rezultata.

Primer

LAB_01
LAB_02
LAB_03

INCFSZ REG,1; Uveaj sadraj REG za jedan


....
; Preskoi ovu liniju ako je = 0
....
; Ovde skoi ako je = 0

Sadraj programskog brojaa pre instrukcije, PC = adresa LAB_01


Sadraj REG registra posle izvravanja 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

70

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.27

DECFSZ

Umanji f, preskoi ako je =0

Sintaksa:

[labela] DECFSZ f, d

Opis:

Sadraj f registra se umanjuje za jedan.


Ako je d=0 rezultat se smeta u W registar.
Ako je d=1 rezultat se smeta u f registar.
Ukoliko je rezultat = 0 naredna instrukcija se izvrava kao NOP inei
tekuu instrukciju dvociklusnom.

Operacija:

(f) - 1 => d

Operand:

0 f 127
d = [0,1]

Fleg:

Broj rei:

Broj ciklusa: 1 ili 2 u zavisnosti od rezultata.

Primer

LAB_01
LAB_02
LAB_03

DECFSZ CNT,1; Umanji sadraj REG za jedan


....
; Preskoi ovu liniju ako je = 0
....
; Ovde skoi ako je = 1

Sadraj programskog brojaa pre instrukcije, PC = adresa LAB_01


Sadraj CNT registra posle izvravanja 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

71

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.28

GOTO

Skoi 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 rei:

Broj ciklusa: 2

Primer

LAB_00
LAB_01

GOTO LAB_01 ;Skoi na labelu LAB_01


:
:
.......

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

72

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.29

CALL Pozovi podprogram

Sintaksa:

[labela] CALL k

Opis:

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


smeta na stek, a zatim se 11-to bitni direktni operand k, koji sadri
adresu podprograma, smeta 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 rei:

Broj ciklusa: 2

Primer

LAB_01
LAB_02

CALL LAB_02 ; Pozovi podprogram LAB_02


:
:
.......

Pre instrukcije:

PC = adresa LAB_01
TOS (vrh steka) = x

Posle instrukcije:

PC = adresa LAB_02
TOS (vrh steka) = LAB_1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

73

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.30

RETURN

Povratak iz podprograma

Sintaksa:

[labela] RETURN

Opis:

Sadraj sa vrha steka smeta se u programski broja.

Operacija:

TOS => Programski broja PC

Operand:

Fleg:

Broj rei:

Broj ciklusa: 2

Primer:

RETURN

Pre instrukcije:

PC = x
TOS (vrh steka) = x

Posle instrukcije:

PC = TOS (vrh steka)


TOS (vrh steka) = TOS 1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

74

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.31 RETLW

Povratak iz podprograma sa konstantom u W

Sintaksa:

[labela] RETLW k

Opis:

Osmobitna konstanta k smeta se u W registar, a u programski broja


se smeta vrednost sa vrha steka.

Operacija:

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

Operand:

0 k 255

Fleg:

Broj rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

75

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.32

RETFIE

Povratak iz prekidne rutine

Sintaksa:

[labela] RETFIE

Opis:

Povratak iz podprograma. Vrednost iz TOS-a smeta se u programski


broja PC. Omoguuju se interapti setovanjem GIE bit-a. (eng. Global
Interrupt Enable GIE )

Operacija:

(TOS) => PC; 1 => GIE

Operand:

Fleg:

Broj rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

76

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.33

NOP Bez operacije

Sintaksa:

[labela] NOP

Opis:

Ne izvrava nijednu operaciju niti utie na bilo koji fleg.

Operacija:

Operand:

Fleg:

Broj rei:

Broj ciklusa: 1

Primer:

NOP

Pre instrukcije:

PC = x

Posle instrukcije:

PC = x + 1

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

77

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.34

CLRWDT

Inicijalizuj watchdog tajmer

Sintaksa:

[labela] CRLWDT

Opis:

Resetuje Watchdog tajmer. Takoe 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 rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

78

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

3.3.35

SLEEP

Prelazak u Stand by mod

Sintaksa:

[labela] SLEEP

Opis:

Procesor ulazi u mod niske potronje. 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 rei:

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

79

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4. UPUTSTVO ZA MPLAB IDE V5.40

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

80

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.1 UVOD
Programski paket MPLAB emo koristiti kao razvojno okruenje za PIC
mikrokonrolere. Ovo uputstvo ne zamenjuje prirunik, ali pokuava objasniti osnove
korienja programskog paketa MPLAB i onima koji ne vladaju engleskim jezikom.
Programski paket MPLAB sadri sledee 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 opisae se jedan jako pogodan
razvojni alat koji se zove MPLAB-ICD (In Circuit Debugger).

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

81

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.2 UPUTSTVO ZA MPLAB IDE V5.40


Posle pokretanja programa u Windows okruenju e se pojaviti prozor za
komunikaciju MPLAB ovek, odnosno radna povrina (slika 4.1).
Toolbar

status bar
radni prostor

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

82

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.3 GENERISANJE NOVOG PROJEKTA


Kao prvo treba zadati tip razvojnog okruenja, i tip PIC mikrokonrolera. To moemo
podesiti u Options >Development Mode meniju (slika 4.2).

Slika 4.2: Options >Development Mode meni


Mogunosti su:
None (Editor Only)
u ovom modu imamo mogunosti samo
za pisanje i kompajliranje programa,
MPLAB-SIM
ovo treba koristiti ako nemamo ICD,
MPLAB ICD-Debugger
ako imamo ICD, ovom opcijom emo
aktivirati podrku za ovaj hardver i
tip odgovarajueg procesora.
Processor
Posle selektovanja eljenih opcija, kliknemo na OK dugme.
Kada menjamo razvojno okruenje uvek emo dobiti upozorenje (slika 4.3). Kao
odgovor, kliknemo na OK.

Slika 4.3: upozorenje posle selekcije podmenija

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

83

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Sledei 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. Pojavie se prozor Edit
Project (slika 4.5).

Slika 4.5: prozor Edit Project


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

84

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
U ovom prozoru, kod prozora Project Files ve moemo videti na First [.hex] upis
(fajl).
Ovde zadajemo putanje za Include, Library i Linker Script fajlove, moemo menjati
ve podeeno radno okruenje i tip PIC mikrokontrolera.
Ako kliknemo na First [.hex] upis, aktivirae se Node Properties dugme, gde
moemo pogledati ili podeavati parametre kompajlera (slika 4.6).

Slika 4.6: Node Properties prozor


Ako u Edit Project prozoru kliknemo na Add Node dugme, moemo prikljuiti
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 deava klikom na File > New meni. Otvorie se
novi editor prozor gde se upisuje asembler kod (slika 4.7). Nakon kreiranja emo
snimiti zapis pod nekim imenom iz File >Save menija.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

85

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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


Na kraju moemo prikljuiti ASM fajl naem projektu iz Project > Edit Project
menija.
Pomou File > Open menija uitavamo u editor MPLAB-a ASM fajl i moemo po
elji modifikovati na program.
Za snimanje naeg projekta koristimo Project > Save Project meni, a za
kompajliranje Project > Build All . U sluaju greke kompajler nam javlja greku i
na program nee biti izkompajliran.
Nakon uspenog kompajliranja dobiemo poruku Slika 4.8):

Slika 4.8: poruka nakon uspenog kompajliranja

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

86

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.4 SIMULATOR MPLAB-A:


Simulator nam slui da bi programe pisane za PIC mikrokontrolere mogli da
testiramo.
Kod simulacije, tokom izvravanja programa postoje sledee mogunosti:
ispisivanje i eventualno modifikacija sadraja bilo kojeg registra
mikrokontrolera. (watch),
mogunost postavljanje tzv.breakpoint-a,
izvravanje programa korak po korak (single step),
simuliranje signala iz spoljanjeg sveta, odnosno uitavanje iz fajla
(ulazi), stimulus.

PRIMER 4.2:
Na jednom jednostavnom primeru emo prikazati mogunosti MPLAB simulatora
(slika 4.9). Da se vratimo na na prvi projekat (First.pjt / First.asm) koji inae samo
izvrava tri no operation (NOP) komande. Modifikovaemo sadraj First.asm fajla
na sledee:
;

Jednostavno sabiranje

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

equ
org
nop

35
0

; Definicija temp promenljive


; Reset vektor
; No operation

Start
movlw
movwf
movlw
addwf

5
temp
4
temp,0

goto
end

Kraj

Kraj

; Upisujemo prvu vrdnost u W registar


; Predajemo sadrzaj W reg. u temp
; Upisujemo drugu vrdnost u W registar
; Sabiramo W I temp
; Rezultat se smesta u W reg.
; Kraj

Posle uspenog kompajliranja, podeavamo radno okruenje simulatora. Prozor sa


registrima iz Window > Special Function Registers , a prozor sa sadrajem program
memorije iz Window >Program Memory menija moemo aktivirati.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

87

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Simulaciju aktiviramo sa jednom opcijom iz Debug >Run menija, ili moemo
koristiti odgovarajue dugme (shortcut). U ovom sluaju moemo pratiti sadraj W
registra. Ako hoemo korak po korak da izvrimo simulaciju, biramo opciju iz menija
Debug >Run > Step ili koristimo (shorcut) F7 dugme.

Slika 4.9: radno okruenje MPLAB simulatora.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

88

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

4.5 MONTIRANJE I KORIENJE ICD UREAJA:


MPLAB ICD (In Circuit Debugger) je jako koristan razvojni alat. Progame moemo
testirati u sopstvenom okruenju, na realnom sistemu. U ovom delu emo se upoznati
sa nainom montiranja ICD-a i mogunostima koje nam prua. Na slici 4.10 je ICD i
razvojna ploa.
RS 232 prikljuak za PC

Mesto spajanja ICD-a

Slika 4.10: povezivanje ICD ureaja i razvojne ploe PIC 16F877

Posle povezivanja hardvera potrebno je podeavati softver.


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

89

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Razvojno okruenje se podeava u Options >Development Mode meniju na sledei
nain (slika 3.11).

Slika 4.11: podeavanje softvera ICD ureaja


Posle ovog podeavanja 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

Podeavanja vrimo pritiskom na Options dugme i to na sledei nain (slika 4.13):


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

90

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 4.13: podeavanje ICD adaptera


Nakon podeavanja moemo iskljuiti ICD Options prozor. Posle pritiska Reconnect
dugmeta nova podeavanja stupaju na snagu.

PRIMER 4.3:
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

91

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Na jednom primeru emo prikazati mogunosti MPLAB ICD-a.
Ako na prvi projekat (First.pjt) podesimo na ICD razvojno okruenje, videemo
mogunosti koje nam prua ICD.
Modifikujmo sadraj First.asm prema sledeem 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
nop
bcf
clrf
bsf
movlw
movwf
bcf

; reset vektor
; No operation
STATUS,
RP0
; Odabiranje Bank0
PORTD
; Inicijalizacija PortD
STATUS,
RP0
;
0
; Definisanje D porta za izlaz
TRISD
; tako da TRISD popunimo 0.
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 uspenog 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 moe se poeti testiranje programa (slika 4.15). Sa
funkcijskim tasterom F7 moemo korak po korak da izvravamo na program.
Moemo primetiti izvesnu sporost pri izvravanju 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 primetiemo da se upalila D8 dioda na rajvojnoj
ploi.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

92

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 4.15: MPLAB ICD okruenje kod testiranja programa korak po korak

4.6 PICSTART PLUS PROGRAMATOR:


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

93

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Pomou Picstart Plus programatora moemo razvijene programe upisati u EPROM
PIC mikrokontrolera, i isprobati u svom realnom hardverskom okruenju. Ovaj
programator je sposoban za programiranje bilo kojeg tipa PIC mikrokontrolera.
Picstart Plus programator se prikljuuje na neki od serijskih portova na PC raunaru, 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
podeenim konfiguracionim bitovima. U bafer MPLAB-a moemo uitati ve gotov
.hex fajl (File > Import > Import To Memory), ili se .hex fajl stvara tokom
kompajliranja.
Takoe je mogue itanje podataka iz PIC mikrokontrolera i snimanje u fajl sa
opcijom (File > Export > Export Memory).
Tip programera odreujemo u Options > Programmer Options > Select
Programmer meniju.
A podeavanje serijskog porta u Options
Communications Port Setup meniju (slika 4.17).

>

Programmer

Options

>

Slika 4.17: podeavanje serijskog COM porta

Softversku podrku za PICSTART Plus programer aktiviramo u PICSTART Plus >


Enable Programmer meniju (slika 4.18).
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

94

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 4.18: izbor softverske podrke


Korisnik programatora PICSTART Plus komunicira sa ureajem preko korisnikog
interfejsa (slika 4.19).
Ako kliknemo na Cofiguration Bits dugme, dobiemo sledei prozor (slika 4.19).
Podeavanja treba izvesti na nain prikazan na slici. Programiranje PIC
mikrokontolera zapoinjemo klikom na Program dugme.

Slika 4.19: korisniki interfejs programatora PICSTART Plus

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

95

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

5. LABORATORIJSKE VEBE SA
EKSPERIMENTALNOM PLOOM
PIC16F877

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

96

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

5.1 UVOD
Eksperimentalna ploa PIC 16F877 je projektovana za inenjere, studente u cilju
savladanja znanja projektovanja hardvera i softvera PIC kontrolera. Zajedno sa ICD
adapterom nudi korisniku mono 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 izraeni zadaci omoguuju studentima nain uenja korak po korak, od
poetnikog znanja do upoznavanja kompletne filozofije PIC kontrolera.
Studenti, koji ele izraditi diplomski rad koristei ovu eksperimentalnu plou mogu se
koncentrisati na zadatak, a zbog univerzalnosti ploe osloboeni su od obaveze izrade
sline namenske tampane ploe za svoje aplokacije.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

97

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

5.2 VEBA BROJ 1


U prvoj laboratorijskoj vebi emo prikazati osnovne korake u programiranju
PIC16F877 mikrokontrolera, kao to su inicijalizacija portova i slanje signala kroz
portove.
REENJE:
Na slici 5.1 je dat grubi dijagram toka za inicijalizaciju portova i za slanje signala
kroz portove.

Slika 5.1: Grubi dijagram toka vebe broj 1


Grubi dijagram toka slui kod TOP-DOWN (odozgo-nadole) projektovanja za
prikazivanje reenja u veim koracima, ne ulazei u detalje. Na takav nain moemo
se koncentrisati na strukturu reenja, bez voenja brige o sitnim detaljima.
Kad je grubi dijagram jasan i pregledan, moramo razraditi detaljno svaki korak, sve
do najnieg 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.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

98

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.2: detaljan dijagram toka podeavanja hardvera


Nakon izrade detaljnog dijagrama toka sledi faza testiranja na papiru, a posle toga
pisanje programa pomou editora razvojnog sistema, prevoenje, otklanjanje
eventualnih greaka i implementacija programa u mikroip.
Kod razvojne ploe ICD adapter omoguuje testiranje programa na realnom sistemu
korak po korak, a posle te faze implementaciju ispravnog programa u mikroip sa
programatorom PICSTART Plus.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

99

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Listing programa je sledei:


list
p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
org
nop
bsf
movlw
movwf
bcf

0
STATUS,RP0
0
TRISD
STATUS,RP0

;
;
;
;
;
;

Reset vektor
No operation
Set bit za bank0
Inicijalizacija D porta
za izlaz
selekcija bank0

Start
movlw B'10000000' ;
;
upaljena.
movwf PORTD
;
Kraj
goto Kraj
;
end

Upisujemo u W registar binarni kod,


jedinica odredjuje koja diodica ce biti
Posaljemo sadrzaj W registra na D port.
Bezkonacna petlja, kraj programa

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

100

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

5.3 VEBA BROJ 2


U ovoj laboratorijskoj vebi upoznaemo se sa tajmerima (TIMER), i sa realizacijom
ciklusa u PIC asembleru.
REENJE:
Na slici 5.3 dat je grubi dijagram toka programa.

Slika 5.3 grubi dijagram toka vebe 2

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

101

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Na slici 5.4 je dat detaljan dijagram toka softverskog kanjenja.

Slika 5.4: detaljan dijagram toka softverskog kanjenja

Program u asembleru je sledei:


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

102

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

;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 VEBA BROJ 3


U ovom zadatku treba realizovati tree svetlo.
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

103

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
REENJE:
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 kanjenja je na slici 5.6.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

104

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.6: detaljan dijagram toka kanjenja

Program je sledei:
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

105

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

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

PCL,1
B'10000000'
B'01000000'
B'00100000'
B'00010000'
B'00001000'
B'00000100'
B'00000010'

;
;
;
;
;
;
;

'0'
'1'
'2'
'3'
'4'
'5'
'6'

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

106

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
goto
end

B'00000001'
B'00000010'
B'00000100'
B'00001000'
B'00010000'
B'00100000'
B'01000000'
B'10000000'
Start

;
;
;
;
;
;
;
;

'7'
'8'
'9'
'10'
'11'
'12'
'13'
'14'

5.5 VEBA BROJ 4


Na levoj strani FD1 FLASH DEMO PANEL-a se nalazi potenciometar, sa kojim
moemo regulisati brzinu treperenja diodica. Upoznaemo se sa korienjem PIC A/D
konvertora.
REENJE:
V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

107

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Grubi dijagram toka programa je na slici 5.7.

Slika 5.7: grubi dijagram toka programa iz vebe 4

Listing programa je:


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

EQU
EQU

20H
21H

0X003

START

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

108

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
MOVLW
MOVWF
MOVLW
MOVWF
bcf
clrf
bsf
movlw
movwf
bcf

B'00001110'
ADCON1
B'01000001'
ADCON0
STATUS,
PORTD
STATUS,
0
TRISD
STATUS, RP0

;LEFT JUSTIFY,1 ANALOG CHANNEL


;VDD AND VSS REFERENCES
;FOSC/8, A/D ENABLED
RP0

; Selekcija Bank0

RP0
; Definisemo port D kao izlaz
; Tako da u TRISD upisujemo 0.
; 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 VEBA BROJ 5


D1 LED se pali i gasi pritiskom na K0 taster. Primer za programiranje tastera.
REENJE:
Dijagram toka programa je na slici 5.8.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

109

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.8: dijagram toka programa

Program je sledei:
list
p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
Timer1
Timer2
Timer3

equ
equ
equ

32
33
34

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

110

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
;-------------[ POCETAK PROGRAMA]----------------------------ORG
0
; Reset vektor
nop
START
; PORTA, PORTB, PORTD konfiguracija
bcf
bsf
movlw
movwf
movlw
movwf
movlw
movwf
clrf
bcf
otpornika
bcf
Press
BTFSC
goto
call
Rel
BTFSS
goto
MOVFW
XORLW
MOVWF
goto
Delay

STATUS,RP0
STATUS,RP0 ; Selekcija bank1
14
ADCON1
B'00111111'
; PORTA ulaz
TRISA
B'11110000'
; RB0..3 izlaz, RB4..7 ulaz
TRISB
TRISD
; PORTD izlaz
OPTION_REG,NOT_RBPU
; konfigurisanje pull up
STATUS,RP0

; Selekcija bank0

PORTB,4
Press
Delay

; Da li smo pritisnuli
; K0 dugme.
; Kasnjenje

PORTB,4
; Cekamo da se dugme pusti
Rel
PORTD
B'00000001' ; PORTD 0. bit inverzija
PORTD
Press
; Ponovo
movlw 10
; Timer3 x 20 ms
movwf Timer3
call Delay1
decfsz
Timer3,1
goto Delay0
return

Delay0

Delay1

movlw 130
; kb. 20 ms
movwf Timer2
decfsz
Timer1,1
goto Delay2
decfsz
Timer2,1
goto Delay2
return

Delay2

end

5.7 VEBA BROJ 6


U estoj vebi emo prikazati kako se vri inicijalizacija LCD modula, i slanje
karaktera na LCD modul.
REENJE:
Grubi dijagram toka je na slici 5.9.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

111

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.9: grubi dijagram toka programa za programiranje LCD displeja

Detaljan dijagram toka podeavanja hardvera je na slici 5.10.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

112

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.10: detaljan dijagram toka programa za podeavanje hardvera

Dijagram toka programa za realizaciju tabele je na slici 5.11.


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

113

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

Slika 5.11: dijagram toka za realizaciju tabele

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

114

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Potprogram za slanje karaktera je na slici 5.12.

Slika 5.12: dijagram toka za slanje karaktera

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

115

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Program za slanje komande je na slici 5.13.

Slika 5.13: podprogram za slanje komande

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

116

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Podprogram za kontrolu zauzetnosti LCD-a je na slici 5.14.

Slika 5.14: program za kontrolu hardvera

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

117

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Program za inicijalizaciju LCD displeja je na slici 5.15

Slika 5.15: program za inicijalizaciju LCD displeja

Listing programa je:


V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

118

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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
Pointer
equ
22h
DAT
EQU
PORTD
CNTRL
EQU
PORTE
E
EQU
2
RW
EQU
1
RS
EQU
0
org
nop

00h

;Promenjljiva za smestanje karaktera


;Brojac za tabelu
;LCD data port
;LCD control port
;LCD enable signal
;LCD R/W signal
;LCD register select
;Reset vektor

bsf
STATUS,RP0
movlw 07h
movwf ADCON1

;---Bank 1
;PortA kao digitalni I/O

bcf
call
clrf

STATUS,RP0
LCDInit
Pointer

;---Bank 0
;Inicijalizacija LCD modula

call
call
movf
call
bcf
call
incf
goto

SetupDelay
SetupDelay
Pointer,0
Table
STATUS,RP0
SendChar
Pointer,1
Loop

addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

PCL,1

goto

Stop

Loop

; LCD modul
; Slanje karaktera

Table
'M'
'i'
'k'
'r'
'o'
'r'
'a'
'c'
'u'
'n'
'a'
'r'
'i'

Stop

SetupDelay
nop
decfsz
goto
return

TEMP, F
SetupDelay

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

119

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
SendChar
movwf
call
movf
movwf
bcf
bsf
nop
bsf
nop
bcf
return

CHAR
BusyCheck
CHAR,w
DAT
CNTRL,RW
CNTRL,RS

;W-reg kopiranje
;Cekanje na LCD
;LCD slanje podakta
;LCD read mode
;LCD data mode

CNTRL,E
CNTRL,E

;**************************************************************
;* SendCmd - Salje komandu iz W reg. na LCD
*
;**************************************************************
SendCmd
movwf
call
movf
movwf
bcf
bcf
nop
bsf
nop
bcf
return

CHAR
BusyCheck
CHAR,w
DAT
CNTRL,RW
CNTRL,RS

;Upis karaktera u W reg.


;Cekanje na LCD
;LCD Slanje podataka
;LCD read mode
;LCD command mode

CNTRL,E
CNTRL,E

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

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

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

120

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
bcf
bsf
movlw
movwf
bcf
return

CNTRL,RW
STATUS,RP0
000h
TRISD
STATUS,RP0

;Set PortD for output


; "
; "
; "

;**************************************************************
;* 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
movwf
nop
bsf
nop
bcf

B'00111000'
DAT

;Set LCD to 8 bit interface

CNTRL,E

;toggle E for LCD

movlw
movwf
call
call
call
call
call
call

0x0
TEMP
SetupDelay
SetupDelay
SetupDelay
SetupDelay
SetupDelay
SetupDelay

CNTRL,E
;Setup call to SetupDelay
;Each call to delay is
;0.771ms, six makes 4.6ms
;This wait is necessary because
;the busy flag is not valid yet.
;
;

movlw
B'00111000'
movwf
DAT
nop
bsf
CNTRL,E
nop
bcf
CNTRL,E
call SetupDelay

;Function set to 2 lines


;of 5x7 bit chars

movlw
call

B'00001110'
SendCmd

;Display on, cursor on

movlw
call

B'00000001'
SendCmd

;Clear display

movlw
call

B'00000110'
SendCmd

;Set entry mode inc, no shift

movlw
call

B'10000000'
SendCmd

;Address DDRam upper left

;toggle E for LCD

return
end

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

121

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

LITERATURA

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

123

M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII

1. Matijevics, Istvn:
MIKRORAUNARI, skripta, Via Tehnika
kola, Subotica, 2000.
2. Mati, Neboja:
PIC
MIKROKONTROLERI,
knjiga,
Mikroelektronika 2002,
3.
www.microchip.com,
internet,
Microchip
Technology Inc.
internet,
Chipchad
4.
www.chipcad.hu,
Elektronikai Disztribci Kft.

V
A
CA
TIIC
OT
UB
BO
A SSU
OLLA
KO
A K
KA
K
NII
EH
HN
TE
AT
VIIA
22000033

124

You might also like