Professional Documents
Culture Documents
Mikrokontroleri - Istvan Matijevic PDF
Mikrokontroleri - Istvan Matijevic PDF
IIS VÁ
TV NM
ÁN AT
MA EV
TIIJJE CS
VIIC S
MIKROKONTROLERI
- TEORIJA -
sskkrriippttaa
V
VIIŠŠA
ATTEEH
HNNIIČ
ČKKAA ŠŠK
KOOL
LAA
SSU
UBBO
OTTIIC
CAA
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
SADRŽAJ
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 1
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
SADRŽAJ 1.
0 PREDGOVOR 5.
1 UVOD 7.
1.1 MIKROPROCESOR, MIKRORAČUNAR, MIKRO-
KONTROLER 8.
1.1.1 MIKROPROCESOR 8.
1.1.2 MIKRORAČUNAR 8.
1.1.3 MIKROKONTROLER 9.
1.1.4 HARDVER MIKRORAČUNARA, MIKROKONTRO-
LERA 9.
1.1.5 MEMORIJA 12.
1.1.6 ULAZI – IZLAZI 12.
1.1.7 ADRESE 13.
1.1.8 CENTRALNA PROCESORSKA JEDINICA (CPU) 13.
1.1.9 ARITMETIČKO-LOGIČKA JEDINICA 14.
1.1.10 REGISTRI 15.
1.1.11 MAGISTRALE (SABIRNICE) 16.
1.1.12 REGISTAR NAREDBI I DEKODER 17.
2 MIKROKONTROLER PIC 16F877 19.
2.1 UVOD 20.
2.2 CISC I RISK ARHITEKTURE 22.
2.3 PODRUČJA PRIMENE MIKROKONTROLERA PIC
16F877 23.
2.4 TAKT FREKVENCIJA I INSTRUKCIJSKI CIKLUS 24.
2.5 PROTOČNA OBRADA INSTRUKCIJA (PIPELI-
NING) 25.
2.6 ZNAČENJE NOŽICA (PINOVA) 26.
2.7 GENERATOR TAKTA - OSCILATOR 27.
2.7.1 TIPOVI OSCILATORA 27.
2.8 RESET LOGIKA 30.
2.9 CENTRALNA PROCESORSKA JEDINICA 32.
2.10 ARITMETIČKO-LOGIČKA JEDINICA 33.
2.11 PORTOVI 34.
2.12 ORGANIZACIJA MEMORIJE 35,
2.12.1 PROGRAMSKA MEMORIJA 35.
2.12.2 MEMORIJA ZA PODATKE 35.
2.13 PROGRAMSKI BROJAČ 37.
2.14 STEK MEMORIJA 38.
2.15 PROGRAMIRANJE UNUTAR SISTEMA – IN
SYSTEM PROGRAMING 39.
3 SET INSTRUKCIJA MIKROKONTROLERA 40,
FAMILIJE PIC 16FXX
3.1 UVOD 41.
3.2 INSTRUKCIJE MIKROKONTROLERA 42.
3.2.1 PRENOS PODATAKA 42.
3.2.2 ARITMETIČKE I LOGIČKE OPERACIJE 42.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 2
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 3
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 4
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
0. PREDGOVOR
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 5
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Na kraju skripte je dat spisak literature, korišćenjem ovih izdanja student će dobiti
odgovor na pitanja, koja ne obuhvataju ove skripte. Pošto je skripta vezana za
mikrokontroler iz PIC familije, prilikom pisanja skripte korišćeni su izvori koji su
navedeni u literaturi.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 6
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1. UVOD
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 7
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1.1.1 MIKROPROCESOR
1.1.2 MIKRORAČUNAR
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 8
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1.1.3 MIKROKONTROLER
Najčešće se koristi von Neumann-ov model mikroračunara. Blok šema ovog sistema
se vidi na slici 1.1.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 9
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 10
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Time se postiže veći protok informacija kroz centralnu procesorsku jedinicu a samim
tim i veća brzina rada. Odvajanje programske i memorije za podatke dalje
omogućava da instrukcije ne moraju biti 8-bitne reči. U ovom slučaju kod
projektovanja računara može se odrediti optimalna dužina reči instrukcije.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 11
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1.1.5 MEMORIJA
Memorija računara se sastoji od velikog broja memorijskih ćelija ili lokacija (registri).
Svaka lokacija se može koristiti za upisivanje određenog broja bita binarne
informacije. Memorija služi za smeštanje binarno kodovanih informacija koje se
odatle po potrebi preuzimaju u procesu rada računara.
Skup naredbi smešten u logičan redosled koji odgovara zadatom algoritmu čini
program. Centralna procesorska jedinica preuzima jednu za drugom naredbe iz
zadatog programa i za svaku naredbu pojedinačno izvršava binarno kodovanu
operaciju sadržanu u naredbi. Na taj način se zadati algoritam ili funkcija procesiranja
realizuje programski izvršavanjem naredbi po logičkom redosledu koji odgovara
zadatom algoritmu.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 12
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1.1.7 ADRESE
Sve reči u memoriji ili memorijske lokacije imaju svoje adrese, koje počinju od 0 pa
sve do broja ukupnih reči u memoriji. Kapacitet memorije se najčešće izražava nekim
brojem iz povorke 2 N . Tipične memorije mikroračunara su 4096 (=2 12 ) i 8196 (=2 13 )
reči. Za takve memorije kažemo da imaju kapacitete od 4 kilobajta i 8 kilobajta ili 4K
i 8K, respektivno. Memorije većih kapaciteta se dele na stranice od po 1, 2 ili više
kilobajta.
Memorija u kojoj se u toku normalnog rada računara mogu upisivati i iz nje očitavati
sadržaj lokacija naziva se RAM memorija (Random Access Memory). Svaka lokacija
ove memorije se može adresirati u bilo kom trenutku. Kada se isključi napajanje
računara, sadržaji RAM-a se gube. Otuda se ova memorija koristi za upisivanje
podataka, privremenih naredbi ili operanada naredbi.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 13
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
ALU je deo CPU-a izveden u vidu logičkih kola koja omogućavaju izvršavanje
aritmetičkih i logičkih operacija nad podacima u binarnom kodu. Brojni procesori
imaju relativno proste ALU-e koji ne mogu da izvrše operacije množenja i delenja. Sa
takvim procesorima ove operacije se izvode programski-svođenjem, npr operacije
množenja na više sukcesivnih operacija sabiranja i rotiranja međurezultata.
ALU (slika 1.5) poseduje, takođe, izvestan broj registara za upisivanje podataka
(operanada) u vidu digitalnih reči. Na početku zadate operacije podatak se dostavlja u
ALU posredstvom upravljačkih kola CPU-a. ALU zatim izvršava aritmetičku ili
logičku operaciju zadatu preko kontrolera CPU-a i upisuje rezultate u poseban registar
CPU-a koji se naziva akumulator (ACC). Osim toga, po završetku zadate operacije,
ALU daje informaciju o nekoj osobenosti dobijenog rezultata. Na primer, ako ALU
oduzme dva broja, neophodno je da nas istovremeno sa pojavom rezultata u ACC
obavesti da li je rezultat veći, jednak ili manji od 0. Na sličan način, biće potrebno pri
sabiranju dva broja da nas ALU izvesti da li je brojna vrednost rezultata u binarnom
kodu duža od 8 bita, tj. da li je rezultat prekoračio 8 bita jednog bajta i preneo se u 9-ti
bit. Popularno se kaže da ALU daje signal zastavicom (flag-om) kojim nas upozorava
na neku osobenost dobijenog rezultata. Opcije mikroračunara uslovljene flegovima
biće kasnije detaljno opisane.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 14
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
1.1.10 REGISTRI
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 15
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 16
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 17
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
logičkih kola, dekodira svaki prispeli podatak (naredbu) u upravljački signal koji
aktivira svoj mehanizam unutar CPU-a za izvršavanje prispele naredbe.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 18
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 19
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
2.1 UVOD
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 20
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 21
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Već je rečeno da PIC16F877 ima RISC arhitekturu. Ovaj pojam se često sreće u
računarskoj literaturi i potrebno ga je malo detaljnije objasniti. Harvard-ska
arhitektura je noviji koncept od von Neumann-ove, a nastala iz potrebe da se rad
mikroprocesora ubrza. Kod harvard-ske arhitekture magistrala podataka i magistrala
adresa su odvojene. Time se postiže veći protok informacija kroz centralnu
procesorsku jedinicu a samim tim i veća brzina rada. Odvajanje programske i
memorije za podatke dalje omogućava da instrukcije ne moraju biti 8-bitne reči.
PIC16F877 koristi 14-bita za instrukcije što dozvoljava da sve instrukcije imaju
dužinu od jedne reči. Tipično još za harvard-sku arhitekturu je da ima manje
instrukcija od von Neumann-ove i da se instrukcije obično izvršavaju u jednom
ciklusu.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 22
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 23
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Takt iz oscilatora u mikrokontroler ulazi preko nožice OSCI gde ga interno kolo u
mikrokontroleru deli na četri podjednaka takta Q1, Q2, Q3 i Q4 koji se ne preklapaju.
Ova četri takta čine jedan instrukcijski ciklus (u žargonu se još naziva i mašinski
ciklus) u kome se izvršava jedna instrukcija.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 24
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 25
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
PIC16F877 ima ukupno 40 nožica (slika 2.5). Najčešće je u varijanti DIP 40 kućišta
ali se može sresti i u SMD kućištu koje je manje od DIP-a. Skraćenica DIP je nastala
od početnih slova engleskih reči "Dual In Package" što bi u prevodu značilo
"pakovanje sa nožicama sa obe strane". SMD je takode skraćenica od početnih slova
engleskih reči "Surface Mount Devices" ili u prevodu "komponente za površinsku
montažu" asocirajući da za lemljenje ove vrste komponenti nije potrebno imati rupe
kroz koje bi nožice prošle i bile zalemljene. Pin je žargonski izraz za nožicu
elektronskog kola ili jasnije rečeno spoljni izvod.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 26
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
XT oscilator
Srednji izvod elementa je masa dok se krajnji izvodi spajaju sa OSC1 i OSC2
pinovima mikrokontrolera. Pravilo je da se pri projektovanju uređaja oscilator stavlja
što bliže mikrokontroleru kako ne bi došlo do smetnji na linijama preko kojih
mikrokontroler dobija takt.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 27
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
RC oscilator
Bez obzira koji oscilator se koristi, njegov takt se deli sa 4, kako bi se dobio takt na
kome mikrokontroler radi. Takt oscilatora podeljen sa 4, dobija se i na
OSC2/CLKOUT nožici, i može se koristiti za testiranje ili sinhronizovanje drugih
logičkih kola (na primer A/D pretvarača), slika 2.9
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 28
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 29
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Da bi sprečili slučajno dovođenje logičke nule na pin MCLR (slika 2.11), potrebno ga
je preko otpornika spojiti na pozitivan pol napajanja (+ 5 V). Otpornik treba da je
vrednosti izmedu 5 kΩ i l0 kΩ. Ova vrsta otpornika čija je uloga da određenu liniju
preventivno drži na logičkoj jedinici naziva se "pull-up" što bi u prevodu značilo
"podići liniju".
Za nas su najvažniji izvori reseta naznačena u redosledu kao prvi i drugi. Prvi se javlja
svaki put kada se dovede napajanje mikrokontroleru i služi da se svi registri dovedu u
početno stanje, a drugi je proizvod namernog dovodenja logičke nule na pin MCLR u
toku normalnog rada mikrokontrolera. Ovaj drugi se često koristi prilikom razvijanja
programa.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 30
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Slika 2.12: primer rada pri padu napona ispod dozvoljene granice
Mikrokontroler je u reset stanju sve dok je PWRT aktivan. Međutim, problem nastaje
u toku rada uređaja kada napajanje ne padne na nulu već se samo smanji i to ispod
granice koja garantuje pravilan rad mikrokontrolera. Ovo je moguć slučaj u praksi
pogotovo u industrijskim okruženjima gde su smetnje i nestabilnost napajanja
svakodnevna pojava. Da bi se ovaj problem razrešio potrebno je osigurati da
mikrokontroler bude u reset stanju svaki put kada napajanje padne ispod dozvoljene
granice.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 31
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
MOVLW 0x20.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 32
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 33
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
2.11 PORTOVI
Svi pinovi portova mogu se definisati (iz programa) kao ulazni ili kao izlazni, već
prema potrebama uređaja koji se razvija. Da bi definisali pin kao ulazni ili kao
izlazni mora se u registar TRIS upisati odgovarajuća kombinacija nula i jedinica. Ako
je na odgovarajućem mestu u TRIS registru upisana logička jedinica "1" onda je taj
pin ulazni, u obratnom slučaju pin je izlazni. Svaki port ima svoj odgovarajući TRIS
registar.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 34
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
EEPROM memorija se sastoji od 64 osmobitne lokacije čiji se sadržaj ne gubi pri prekidu
napajanja. EEPROM se ne nalazi direktno u memorijskom prostoru već mu se pristupa
indirektno preko EEADR i EEDATA registara. Kako EEPROM memorija obično služi za
čuvanje važnih parametara (npr. zadanu ternperaturu kod temperaturnih regulatora) postoji
tačna procedura za upis u EEPROM koja se mora ispoštovati kako bi se izbegao slučajan
upis.
RAM memorija za podatke zauzima prostor u memorijskoj mapi od lokacije 0x0C do 0x4F
što iznosi 68 lokacija. Lokacije RAM memorije se još nazivaju i GPR registri od početnih
slova engleskih reči «General Purpose Registers» ili registri opšte namene. GPR registrima
se pristupa bez obzira koja je banka trenutno izabrana.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 35
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 36
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Programski brojač (PC) je 13-to bitni registar koji sadrži adresu instrukcije koja se
izvršava. Njegovim uvećavanjem ili promenom (npr. u slučaju skoka) mikrokontroler
izvršava jednu po jednu instrukciju programa.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 37
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
PIC16F877 ima 13-bitni stek (Stack) sa 8 nivoa ili drugim rečima, grupisanih 8
memorijskih lokacija širine 13 bita sa posebnom namenom. Njegova osnovna uloga je
da sačuva vrednost programskog brojača nakon što se iz glavnog programa skoči na
adresu podprograma koji se izvršava. Da bi program znao da se vrati na mesto odakle
je pošao, mora sa steka da vrati vrednost programskog brojača. Pri prelasku iz
programa u podprogram, programski brojač se potiskuje na stek (primer je instrukcija
CALL), a pri izvršenju instrukcija kao što su RETURN, RETLW ili RETFIE koje se
izvršavaju na kraju podprograma, vraća sa steka da bi program mogao da nastavi tamo
gde je stao pre nego što je bio prekinut. Ove operacije stavljanja i vraćanja sa steka
programskog brojača u žargonu se nazivaju PUSH i POP po instrukcijama koje pod
istim imenom postoje na nekim većim mikrokontrolerima.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 38
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 39
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 40
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
3.1 UVOD
Kompletan set koji obuhvata 35 instrukcija dat je u tabeli 3.1. Razlog ovako malog
broja instrukcija leži pre svega u činjenici da se radi o RISC mikrokontroleru čije su
instrukcije dobro optimizovane sa gledišta brzine rada, jednostavnosti arhitekture i
kompaktnosti koda. Jedina "mana" je, što se od programera očekuje da savlada
"neudobnu" tehniku korišćenja skromnog seta od 35 instrukcija.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 41
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Prve tri instrukcije obezbeđuju (tabela 3.1) upis konstante u W registar (MOVLW je
skaraćenica od MOVe Literal to W), zatim prepis podatka iz W registra u RAM i
prepis podataka iz RAM-a u W registar (ili u istu tu lokaciju RAM-a, pri čemu se
menja samo stanje flega Z). Instrukcija CLRF upisuje konstantu 0 u f registar, a
CLRW upisuje konstantu 0 u W registar. SWAPF instrukcija unakrsno izmeni mesta
četvorobitnim poljima (niblovima) unutar registra.
Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI, EX-ILI, negacije
(COMF) i rotiranja (RLF i RRF).
Instrukcije koje rotiraju sadržaj registra, pomeraju bitove unutar registra kroz fleg C
za po jedno mesto ulevo (ka bitu 7) ili udesno (ka bitu 0). Bit, koji "izlazi" iz registra,
upisuje se u fleg C, a stanje tog flega se upisuje u bit na "suprotnoj strani" registra.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 42
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Instrukcije BCF i BSF vrše resetovanje ili setovanje jednog bita bilo gde u memoriji.
Mada ovo izgleda kao jednostavna operacija, ona se izvršava tako što CPU najpre
pročita ceo bajt, izmeni jedan bit u njemu i onda ceo bajt upiše na isto mesto.
"RETLW k" instrukcija je identična RETURN instrukciji, osim što se pre povratka iz
podprograma u W registar upisuje konstanta koja je definisana operandom
instrukcije. Ova instrukcija nam omogućuje lako kreiranje Lookup tabela. Najčešće
se koriste tako što izračunamo poziciju podatka u tabeli, saberemo je sa adresom na
kojoj tabela počinje i sa te lokacije (koja se obično nalazi u programskoj memoriji)
pročitamo podatak.
Tabela se može formirati kao podprogram koji se sastoji od niza 'RETLW k'
instrukcija, gde će konstante `k' biti članovi tabele (tabela 3.).
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 43
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 44
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: -
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 45
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
Fleg: -
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 46
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 47
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operacija: 0 => W
Operand:
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
Primer CLRW
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 48
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operacija: 0 => f
Operand:
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 49
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: -
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 50
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: C,DC,Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 51
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: C,DC,Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 52
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: C,DC,Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 53
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: C,DC,Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 54
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 55
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 56
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 57
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 58
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 59
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 60
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 61
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 62
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Opis: Sadržaj f registra se rotira za jedno mesto ulevo prekoC (Carry) flega.
Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.
Operand: 0 ≤ f ≤ 127
d = [0,1] C registar f
Fleg: C
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 63
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Opis: Sadržaj f registra se rotira za jedno mesto udesno prekoC (Carry) flega.
Ako je d=0 rezultat se smešta u W registar.
Ako je d=1 rezultat se smešta u f registar.
Operand: 0 ≤ f ≤ 127
d = [0,1] C registar f
Fleg: C
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 64
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: Z
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 65
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
0≤b≤7
Fleg: -
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 66
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
0≤b≤7
Fleg: -
Broj reči: 1
Broj ciklusa: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 67
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
0≤b≤7
Fleg: -
Broj reči: 1
Nakon instrukcije ako je u REG registru prvi bit bio nula, programski brojač pokazuje
na adresu LAB_03
Ako je u REG registru prvi bit bio jedan, programski brojač pokazuje na LAB_02.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 68
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
0≤b≤7
Fleg: -
Broj reči: 1
Nakon instrukcije ako je u REG registru prvi bit bio jedan, programski brojač
pokazuje na adresu LAB_03
Ako je u REG registru prvi bit bio nula, programski brojač pokazuje na LAB_02.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 69
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: -
Broj reči: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 70
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ f ≤ 127
d = [0,1]
Fleg: -
Broj reči: 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 71
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 2048
Fleg: -
Broj reči: 1
Broj ciklusa: 2
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 72
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 2048
Fleg: -
Broj reči: 1
Broj ciklusa: 2
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 73
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: -
Fleg: -
Broj reči: 1
Broj ciklusa: 2
Primer: RETURN
Pre instrukcije: PC = x
TOS (vrh steka) = x
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 74
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: 0 ≤ k ≤ 255
Fleg: -
Broj reči: 1
Broj ciklusa: 2
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 75
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: -
Fleg: -
Broj reči: 1
Broj ciklusa: 2
Ù
Primer: RETFIE
Pre instrukcije: PC = x
GIE (bit dozvole prekida u STATUS reg) = 0
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 76
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operacija: -
Operand: -
Fleg: -
Broj reči: 1
Broj ciklusa: 1
Primer: NOP
Pre instrukcije: PC = x
Posle instrukcije: PC = x + 1
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 77
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: -
Fleg: TO, PD
Broj reči: 1
Broj ciklusa: 1
Primer: CLRWDT
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 78
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Operand: -
Fleg: TO, PD
Broj reči: 1
Broj ciklusa: 1
Primer: SLEEP
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 79
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 80
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
4.1 UVOD
Sve ove delove MPLAB-a ćemo opisati, a kao dodatak opisaće se jedan jako pogodan
razvojni alat koji se zove MPLAB-ICD (In Circuit Debugger).
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 81
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Toolbar
status bar
radni prostor
Slika 4.1: izgled MPLAB IDE v5.40 razvojnog sistema neposredno posle pokretanja
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 82
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Kao prvo treba zadati tip razvojnog okruženja, i tip PIC mikrokonrolera. To možemo
podesiti u Options >Development Mode meniju (slika 4.2).
Mogućnosti su:
• None (Editor Only) – u ovom modu imamo mogućnosti samo
za pisanje i kompajliranje programa,
• MPLAB-SIM – ovo treba koristiti ako nemamo ICD,
• MPLAB ICD-Debugger – ako imamo ICD, ovom opcijom ćemo
aktivirati podršku za ovaj hardver i
• Processor – tip odgovarajućeg procesora.
Kada menjamo razvojno okruženje uvek ćemo dobiti upozorenje (slika 4.3). Kao
odgovor, kliknemo na OK.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 83
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Sledeći korak, u Project > New Project meniju je zadavanje imena (naziva) projekta
(slika 4.4).
PRIMER 4.1:
Ako želimo da novi projekt ima naziv first.pjt, pored imena first.pjt moramo i putanju
odrediti, i mesto gde ćemo ga smestiti.
Kada smo zadali ime projekta i putanju, pritisnemo OK. Pojaviće se prozor Edit
Project (slika 4.5).
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 84
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
U ovom prozoru, kod prozora Project Files već možemo videti naš First [.hex] upis
(fajl).
Ovde zadajemo putanje za Include, Library i Linker Script fajlove, možemo menjati
već podešeno radno okruženje i tip PIC mikrokontrolera.
Ako kliknemo na First [.hex] upis, aktiviraće se Node Properties dugme, gde
možemo pogledati ili podešavati parametre kompajlera (slika 4.6).
Ako u Edit Project prozoru kliknemo na Add Node dugme, možemo priključiti
First.asm fajl (.asm je oznaka za izvorni fajl koji je napisan u asembleru). Naravno
ovaj fajl već mora postojati. Prilikom kreiranja novog projekta prvo moramo imati
neki ASM fajl. Ako još nemamo ASM fajl, moramo ga kreirati.
Kreiranje novog izvornog koda se dešava klikom na File > New meni. Otvoriće se
novi editor prozor gde se upisuje asembler kod (slika 4.7). Nakon kreiranja ćemo
snimiti zapis pod nekim imenom iz File >Save menija.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 85
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Na kraju možemo priključiti ASM fajl našem projektu iz Project > Edit Project
menija.
Pomoću File > Open menija učitavamo u editor MPLAB-a ASM fajl i možemo po
želji modifikovati naš program.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 86
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
PRIMER 4.2:
; Jednostavno sabiranje
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_HS_OSC & _LVP_OFF
temp equ 35 ; Definicija temp promenljive
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 87
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 88
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
MPLAB ICD (In Circuit Debugger) je jako koristan razvojni alat. Progame možemo
testirati u sopstvenom okruženju, na realnom sistemu. U ovom delu ćemo se upoznati
sa načinom montiranja ICD-a i mogućnostima koje nam pruža. Na slici 4.10 je ICD i
razvojna ploča.
RS 232 priključak za PC
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 89
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Posle ovog podešavanja MPLAB je prepoznao postojanje ICD adaptera, nakon čega
će se pojaviti jedan novi prozor koji je softverski interfejs ICD-a (slika 4.12).
Brzina porta
Na koji
port je
vezan.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 90
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Nakon podešavanja možemo isključiti ICD Options prozor. Posle pritiska Reconnect
dugmeta nova podešavanja stupaju na snagu.
PRIMER 4.3:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 91
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Ako naš prvi projekat (First.pjt) podesimo na ICD razvojno okruženje, videćemo
mogućnosti koje nam pruža ICD.
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_HS_OSC & _LVP_OFF
org 0 ; reset vektor
nop ; No operation
bcf STATUS, RP0 ; Odabiranje Bank0
clrf PORTD ; Inicijalizacija PortD
bsf STATUS, RP0 ;
movlw 0 ; Definisanje D porta za izlaz
movwf TRISD ; tako da TRISD popunimo 0.
bcf STATUS, RP0 ; Odabiranje Bank0
Start
movlw B'10000000' ; Upisemo u W reg. na koji izvod da nam
salje signal
movwf PORTD ; Posaljemo sadrzaj W-reg. na D port
Vege
goto Vege
end
Nakon uspešnog kompajliranja pritisnemo Program dugme koji će nam upisati naš
program u PIC mikrokontroler koji se nalazi na ICD-u. Čekamo sve dok ne dobijemo
poruku Waiting for user command (slika 4.14).
Posle aktiviranja prozora editora može se početi testiranje programa (slika 4.15). Sa
funkcijskim tasterom F7 možemo korak po korak da izvršavamo naš program.
Možemo primetiti izvesnu sporost pri izvršavanju programa korak po korak. To je
zbog toga što ICD naš program upisuje red po red u flash memoriju PIC
mikrokonrolera što zahteva vremena.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 92
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Slika 4.15: MPLAB ICD okruženje kod testiranja programa korak po korak
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 93
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 94
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Ako kliknemo na Cofiguration Bits dugme, dobićemo sledeći prozor (slika 4.19).
Podešavanja treba izvesti na način prikazan na slici. Programiranje PIC
mikrokontolera započinjemo klikom na Program dugme.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 95
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
5. LABORATORIJSKE VEŽBE SA
EKSPERIMENTALNOM PLOČOM
PIC16F877
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 96
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
5.1 UVOD
U ovoj skripti izrađeni zadaci omogućuju studentima način učenja korak po korak, od
početničkog znanja do upoznavanja kompletne filozofije PIC kontrolera.
Studenti, koji žele izraditi diplomski rad koristeći ovu eksperimentalnu ploču mogu se
koncentrisati na zadatak, a zbog univerzalnosti ploče oslobođeni su od obaveze izrade
slične namenske štampane ploče za svoje aplokacije.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 97
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
REŠENJE:
Na slici 5.1 je dat grubi dijagram toka za inicijalizaciju portova i za slanje signala
kroz portove.
Kad je grubi dijagram jasan i pregledan, moramo razraditi detaljno svaki korak, sve
do najnižeg nivoa programiranja, do asemblera. Korisno je koristiti teoriju
modularnog programiranja kod razvoja programa u asembleru (vidi skriptu autora
Asembler).
Ovaj korak, detaljna razrada blokova grubog dijagrama (slika 5.1) je prikazana na
slici 5.2.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 98
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Nakon izrade detaljnog dijagrama toka sledi faza testiranja na papiru, a posle toga
pisanje programa pomoću editora razvojnog sistema, prevođenje, otklanjanje
eventualnih grešaka i implementacija programa u mikročip.
Kod razvojne ploče ICD adapter omogućuje testiranje programa na realnom sistemu
korak po korak, a posle te faze implementaciju ispravnog programa u mikročip sa
programatorom PICSTART Plus.
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 99
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
org 0 ; Reset vektor
nop ; No operation
bsf STATUS,RP0 ; Set bit za bank0
movlw 0 ; Inicijalizacija D porta
movwf TRISD ; za izlaz
bcf STATUS,RP0 ; selekcija bank0
Start
movlw B'10000000' ; Upisujemo u W registar binarni kod,
; jedinica odredjuje koja diodica ce biti
upaljena.
movwf PORTD ; Posaljemo sadrzaj W registra na D port.
Kraj
goto Kraj ; Bezkonacna petlja, kraj programa
end
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 100
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
REŠENJE:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 101
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 103
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
REŠENJE:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 104
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Program je sledeći:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 105
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
Timer1 equ 32
Timer2 equ 33
Timer3 equ 34
Pointer equ 35
Counter equ 36
;----------------------------- Glavni program -----------------------
org 0 ; reset vektor
nop
bsf STATUS,RP0
movlw 0 ; D port izlaz
movwf TRISD
bcf STATUS,RP0 ; Selekcija bank0
;--------------------------------------------------------------------
Start
movlw 14 ; LED tabela sa 15 elementata
movwf Counter
clrf Pointer
Start1 movf Pointer,0
call Table
movwf PORTD
call Delay
incf Pointer,1
decfsz Counter,1
goto Start1
;---------------------------- Subrutine -----------------------------
Delay
movlw 10 ; Timer3 x 20 ms
movwf Timer3
Delay0 call Delay1
decfsz Timer3,1
goto Delay0
return
;--------------------------------------------------------------------
Delay1 movlw 130 ; kb. 20 ms
movwf Timer2
Delay2 decfsz Timer1,1
goto Delay2
decfsz Timer2,1
goto Delay2
return
;--------------------------------------------------------------------
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 106
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
REŠENJE:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 107
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 108
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
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
REŠENJE:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 109
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
Program je sledeći:
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
Timer1 equ 32
Timer2 equ 33
Timer3 equ 34
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 110
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
end
Ù
U šestoj vežbi ćemo prikazati kako se vrši inicijalizacija LCD modula, i slanje
karaktera na LCD modul.
REŠENJE:
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 111
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 112
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 113
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 114
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 115
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 116
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 117
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 118
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
list p=16F877
#include <p16F877.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC &
_LVP_OFF
SetupDelay
nop
decfsz TEMP, F
goto SetupDelay
return
;*****************************************************************
;* SendChar - Salje karakter iz W reg. na LCD *
;*****************************************************************
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 119
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
SendChar
movwf CHAR ;W-reg kopiranje
call BusyCheck ;Cekanje na LCD
movf CHAR,w
movwf DAT ;LCD slanje podakta
bcf CNTRL,RW ;LCD read mode
bsf CNTRL,RS ;LCD data mode
nop
bsf CNTRL,E
nop
bcf CNTRL,E
return
;**************************************************************
;* SendCmd - Salje komandu iz W reg. na LCD *
;**************************************************************
SendCmd
movwf CHAR ;Upis karaktera u W reg.
call BusyCheck ;Cekanje na LCD
movf CHAR,w
movwf DAT ;LCD Slanje podataka
bcf CNTRL,RW ;LCD read mode
bcf CNTRL,RS ;LCD command mode
nop
bsf CNTRL,E
nop
bcf CNTRL,E
return
;**************************************************************
BusyCheck
clrf PORTD ;PortD ulaz
bsf STATUS,RP0 ; "
movlw 0FFh ; "
movwf TRISD ; "
bcf STATUS,RP0 ; "
bcf CNTRL,RS ;LCD u komandni rezim
bsf CNTRL,RW
nop
bsf CNTRL,E ;Set E high
nop
nop
movf DAT,W ;Read busy flag, DDram address
bcf CNTRL,E ;Set E low
movwf TEMP
btfsc TEMP,7 ;Check busy flag, high=busy
goto BusyCheck
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 120
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
bcf CNTRL,RW
bsf STATUS,RP0 ;Set PortD for output
movlw 000h ; "
movwf TRISD ; "
bcf STATUS,RP0 ; "
return
;**************************************************************
;* Inicijalizacija LCD modula *
;**************************************************************
LCDInit
bcf STATUS,RP0 ;---Bank 0
clrf PORTE
clrf PORTD
bsf STATUS,RP0 ;---Bank 1
movlw B'00000000' ;Set PortD as outputs
movwf TRISD
movlw B'00000000' ;Set PortE as outputs
movwf TRISE
bcf STATUS,RP0 ;---Bank 0
clrf PORTE ;Clear PortA
movlw B'00111000' ;Set LCD to 8 bit interface
movwf DAT
nop
bsf CNTRL,E ;toggle E for LCD
nop
bcf CNTRL,E
movlw 0x0 ;Setup call to SetupDelay
movwf TEMP
call SetupDelay ;Each call to delay is
call SetupDelay ;0.771ms, six makes 4.6ms
call SetupDelay ;This wait is necessary because
call SetupDelay ;the busy flag is not valid yet.
call SetupDelay ;
call SetupDelay ;
return
end
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 121
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
LITERATURA
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 123
22000033
M
MIIK
KRRO
OKKO
ONNT
TRRO
OLLE
ERRII
AT
VIIŠŠA
V EH
TE NIIČ
HN ČK A ŠŠK
KA KO OLLA UB
A –– SSU OT
BO CA
TIIC A 124
22000033