Professional Documents
Culture Documents
IstvAn Matijevics IstvAn Matijevics
IstvAn Matijevics IstvAn Matijevics
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
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
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.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.
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).
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).
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.
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.
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
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
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.
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.
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
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.
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
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
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
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
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
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
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.
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).
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
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
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
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.
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
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
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
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
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
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
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
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
movlw 2
call Lookup
addwf PCL,f
retlw k
retlw kl
retlw k2
:
.
retlw kn
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
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.1
MOVLW
Sintaksa:
[labela] MOVLW
Opis:
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:
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:
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:
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:
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
Sintaksa:
[labela] CLRF f, d
Opis:
Operacija:
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:
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:
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:
Operacija:
k - (W) => W
Operand:
0 k 255
Fleg:
C,DC,Z
Broj rei:
Broj ciklusa: 1
Primer 1
SUBLW 0x03
Pre instrukcije:
Posle instrukcije:
Pre instrukcije:
Posle instrukcije:
Pre instrukcije:
Posle instrukcije:
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:
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:
Posle instrukcije:
Pre instrukcije:
Posle instrukcije:
Pre instrukcije:
Posle instrukcije:
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:
Operacija:
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
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:
Operacija:
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
Broj ciklusa: 1
Primer 1
ANDWF FSR, 1
Pre instrukcije:
(0x17)
Posle instrukcije:
Primer 2
ANDWF FSR, 0
Pre instrukcije:
(0x17)
Posle instrukcije:
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
Sintaksa:
[labela] IORLW k
Opis:
Operacija:
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:
Operacija:
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
Sintaksa:
[labela] XORLW k
Opis:
Operacija:
Operand:
0 k 255
Fleg:
Broj rei:
Broj ciklusa: 1
Primer 1
XORLW 0xAF
Pre instrukcije:
W=0xB5
Posle instrukcije:
W=0x1A
Z=0
Primer 2
IORLW REG
Pre instrukcije:
W=0xAF
REG=0x37
Posle instrukcije:
W=0x98
Z=0
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
Sintaksa:
[labela] XORLW f, d
Opis:
Operacija:
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
Broj ciklusa: 1
Primer 1
XORLW REG, 0
Pre instrukcije:
REG=0xAF,W=0xB5
Posle instrukcije:
REG=0x1A,W=0xB5
Primer 2
XORLW REG, 1
Pre instrukcije:
REG=0xAF,W=0xB5
Posle instrukcije:
REG=0xAF,W=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:
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:
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
Sintaksa:
[labela] RLF f, d
Opis:
Operacija:
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
registar f
Broj ciklusa: 1
Primer 1
RLF REG, 0
Pre instrukcije:
Posle instrukcije:
Primer 2
RLF REG, 1
Pre instrukcije:
Posle instrukcije:
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
Sintaksa:
[labela] RRF f, d
Opis:
Operacija:
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
registar f
Broj ciklusa: 1
Primer 1
RRF REG, 0
Pre instrukcije:
Posle instrukcije:
Primer 2
RRF REG, 1
Pre instrukcije:
Posle instrukcije:
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:
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
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
Sintaksa:
[labela] BCF f, b
Opis:
Operacija:
Operand:
0 f 127
0b7
Fleg:
Broj rei:
Broj ciklusa: 1
Primer 1
BCF REG, 7
Pre instrukcije:
REG=0xC7
Posle instrukcije:
REG=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
Sintaksa:
[labela] BSF f, b
Opis:
Operacija:
Operand:
0 f 127
0b7
Fleg:
Broj rei:
Broj ciklusa: 1
Primer 1
BSF REG, 7
Pre instrukcije:
REG=0x07
Posle instrukcije:
REG=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
Sintaksa:
[labela] BTFSC f, b
Opis:
Operacija:
Operand:
0 f 127
0b7
Fleg:
Broj rei:
Primer
LAB_01
LAB_02
LAB_03
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
Sintaksa:
[labela] BTFSS f, b
Opis:
Operacija:
Operand:
0 f 127
0b7
Fleg:
Broj rei:
Primer
LAB_01
LAB_02
LAB_03
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
Sintaksa:
[labela] INCFSZ f, d
Opis:
Operacija:
(f) + 1 => d
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
Primer
LAB_01
LAB_02
LAB_03
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
Sintaksa:
[labela] DECFSZ f, d
Opis:
Operacija:
(f) - 1 => d
Operand:
0 f 127
d = [0,1]
Fleg:
Broj rei:
Primer
LAB_01
LAB_02
LAB_03
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:
Operacija:
Operand:
0 k 2048
Fleg:
Broj rei:
Broj ciklusa: 2
Primer
LAB_00
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
Sintaksa:
[labela] CALL k
Opis:
Operacija:
Operand:
0 k 2048
Fleg:
Broj rei:
Broj ciklusa: 2
Primer
LAB_01
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:
Operacija:
Operand:
Fleg:
Broj rei:
Broj ciklusa: 2
Primer:
RETURN
Pre instrukcije:
PC = x
TOS (vrh steka) = x
Posle instrukcije:
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
Sintaksa:
[labela] RETLW k
Opis:
Operacija:
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
Sintaksa:
[labela] RETFIE
Opis:
Operacija:
Operand:
Fleg:
Broj rei:
Broj ciklusa: 2
Primer:
RETFIE
Pre instrukcije:
PC = x
GIE (bit dozvole prekida u STATUS reg) = 0
Posle instrukcije:
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
Sintaksa:
[labela] NOP
Opis:
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
Sintaksa:
[labela] CRLWDT
Opis:
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:
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
Sintaksa:
[labela] SLEEP
Opis:
Operacija:
Operand:
Fleg:
TO, PD
Broj rei:
Broj ciklusa: 1
Primer:
SLEEP
Pre instrukcije:
WDT broja = x
WDT preskaler = x
Posle instrukcije:
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
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
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
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).
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).
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).
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
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
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
Start
movlw
movwf
movlw
addwf
5
temp
4
temp,0
goto
end
Kraj
Kraj
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.
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
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).
90
M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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:
;
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
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
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).
>
Programmer
Options
>
94
M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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
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
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
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
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
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.
102
M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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.
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
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'
107
M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
Grubi dijagram toka programa je na slici 5.7.
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
; 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
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
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
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
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
113
M
MIIK
KR
RO
OK
KO
ON
NT
TR
RO
OLLE
ER
RII
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.
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.
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.
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
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
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
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
;**************************************************************
;* 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
CNTRL,E
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
movlw
call
B'00001110'
SendCmd
movlw
call
B'00000001'
SendCmd
;Clear display
movlw
call
B'00000110'
SendCmd
movlw
call
B'10000000'
SendCmd
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