You are on page 1of 24

Uputstvo za pripremu laboratorijskih vebi

Mikroraunarski sistemi maj 2015.


U nastavku ovog uputstva obrauje se priprema laboratorijskih vebi u MPLAB okruenju. Zadaci za
laboratorijske vebe rade se na maketi sa PIC16F870 mikrokontrolerom. Tekstovi zadataka bie unapred
dostupni na stranici predmeta.

Zadaci
C1. Upoznati se sa MPLAB razvojnim okruenjem, pravljenjem MPLAB projekta, dodavanjem fajlova sa
kodom u projekat, ispravljanjem greaka i prevoenjem projekta.
C2. Prouiti strukturu asemblerskog fajla primer.asm koji moe da poslui kao osnova za izradu
laboratorijskih vebi.
C3. Prouiti upotrebu i osnovne komande dibagera u MPLAB-u.
C4. Prouiti upotrebu stimulusa u dibageru koji pored ostalog omoguava da se simulira promena stanja na
nekom pinu mikrokontrolera.
C5. Prouiti logiku i elektrinu emu makete na kojoj e se testirati reenje zadataka (eme su dostupne
na sajtu a model kontrolera koji se nalazi na ovoj maketi je PIC16F870).
C6. Prouiti nain programiranja mikrokontrolera.

Verzija dokumenta

Promene

v1
v2
v3

inicijalna verzija za MPLAB X 2.35


dodato pojanjenje za ORG direktive
izmenjeno poglavlje koje objasnjava strukturu asm fajla da odgovara
primeru postavljenom na sajt

C1. MPLAB X 2.35


Dostupne se starije verzije MPLAB-a sa aktuelnom verzijom 8.92 i novije verzije MPLAB X okruenja.
Pravljenje novog projekta i dodavanje fajlova u projekat prikazano je u nastavku za MPLAB X okruenje.
Pravljenje novog projekta ide kroz nekoliko koraka:
1. Pokrenuti arobnjaka preko menija File->New Project

2. Izabrati Microchip Embedded projekat i opciju Standalone Project.

3. Za model mikrokontrolera izabrati PIC16F84.


Napomena: Za pokaznu lab. vebu koristie se ovaj model mikrokontrolera. Za izradu narednih lab. vebi
koristie se mikrokontroler PIC16F870 koji se nalazi na maketi.

Zadatak: Koristei dokumentaciju za PIC16F870 utvrditi koje su osnovne razlike izmeu ova dva ipa.

4. U sekciji Hardware tools izabrati opciju Simulator. Razvoj i testiranje programa radie se unutar
MPLAB softverskog simulatora. Druge mogunosti su korienje hardverskog dibagera kao to je PICKIT,
ICD3 itd.

5. Projekat e sadrati izvorne fajlove sa asemblerom tako da na sledeem prozoru treba izabrati mpasm
kompajler. Druga mogunost je XC8 C kompajler ili kompajleri drugih proizvoaa.

6. Dati naziv projektu i izabrati lokaciju snimanja fajlova projekta.

7. Zavriti pravljenje projekta klikom na Finish.


8. Do ovog koraka napravljen je prazan projekat pa treba dodati novi fajl sa kodom u sekciju Source Files
projekta preko menija New->Empty File.

9. Dati ime fajlu ukljuujui ekstenziju jer u prethodnom koraku nije izabran konkretan tip fajla.

10. U otvoreni prozor treba uneti asemblerski kod. U primeru sa slike iskopiran je kod primera primer.asm
koji je dostupan na stranici predmeta.

11. Prevoenje projekta postie se iz menija Run->Build Main Project.

12. Status prevoenja projekta prikazuje se u zasebnom prozoru. Ovde su prikazana sva upozorenja i
informacije o eventualnim grekama.

14. Pozicioniranje na liniju koda koja je proizvela upozorenje ili greku obavlja se klikom na liniju koja
prikazuje upozorenje ili greku u prozoru Output. Na slici je prikazana informacija o sintaksnoj greki i
pozicija u kodu.

C2. Struktura asemblerskog fajla


U nastavku je dat kratak opis strukture primer.asm fajla koji moe posluiti kao templejt za izradu vebi.
Fajl se moe pronai na stranici predmeta.
Zadatak: ta obavlja program korien kao primer za pokaznu vebu?

Zaglavlje (slika iznad) Definisanje tipa procesora direktivom list p= i ukljuivanje heder fajla sa.inc
ekstenzijom. Fajl sa ekstenzijom inc sadri definicije svih sistemskih registara i konfiguracionih parametara
(i onih u liniji koja poinje sa __CONFIG) za izabrani mikrokontroler, tako da je izbegnuto pisanje
definicija na poetku svakog programa. Zato u programu moemo napisati:
bsf STATUS, RP0
umesto
bsf 3,5
, to poveava razumljivost koda.
Linija koja poinje sa __CONFIG odnosi se na podeavanje kontrolera (ukljuivanje watchdog timer-a,
podeavanje tipa oscilatora-HS_OSC, ukljuivanje zatite koda-_CPD_OFF i sl.). Konfiguracioni
parametri ine posebne memorijske lokacije na kontroleru kojima je pristup omoguen u fazi programiranja
kontrolera i nisu dostupni u toku izvravanja programa.

Definisanje konstanti (slika iznad)- U ovom delu koda mogu se nai definicije svih konstanti koje se
koriste u kodu u obliku KONSTANTA EQU VREDNOST.
Npr. u ovu sekciju mogu se dodati sledee definicije:
1. BROJAC EQU 0x30 kreira promenljivu BROJAC na konstantnoj adresi 0x30 pa je mogue
napisati instrukciju movwf BROJAC iji je efekat pomeranje sadraja akumulatora u promenljivu
BROJAC.
2. POMERAJ EQU 0x0A kreira konstantu POMERAJ koja ima vrednost 0x0A pa je mogue napisati
instrukciju addlw POMERAJ iji je efekat sabiranje sadraja akumulatora sa 0x0A.

Definicija promenljivih (slika iznad)- Promenljive unutar bloka CBLOCK 0x30 zauzimaju adrese poev
od 0x30. Unutar ovog bloka mogu se navesti promenljive koje se koriste u programu. Promenljive unutar
ovog bloka e biti zapamene poev od adrese koja se navede nakon CBLOCK direktive, u registrima opte
namene (GPR). U primeru sa slike iznad, kreirane su etiri promenljive koje se smetaju poev od adrese
0x30 i slue za pamenje konteksta mikrokontrolera na poetku prekidne procedure. Ako bismo u ovu listu
posle FSR_TEMP dodali COUNTER, kreirali bismo promenljivu COUNTER na adresi 0x34.

Glavni program (slika iznad)- Glavni program poinje od labele ResetCode. Na ovu lokaciju stie se
preko reset vektora definisanim direktivom ORG 0x0000 koja na adresu nula programske memorije
postavlja instrukciju koja sledi ovu direktivu. Ta instrukcija je goto ResetCode koja se prva izvrava nakon
to mikrokontroler dobije stabilno napajanje i krene sa izvravanjem programa. Direktiva ORG 0x0004
oznaava interrupt vektor a instrukcija koja sledi ovu direktivu bie zapamena na adresi etiri programske
memorije i predstavlja instrukciju koja e biti prva izvrena nakon to kontroler prihvati prekid od bilo koja
etiri mogua izvora prekida i krene sa obradom prekida.
Napomena: Kada se u programu koristi prekidna procedura treba obrisati karakter ; sa poetka linije
sadri goto InterruptCode kao i instrukciju retfie sa poetka prekidne procedure (treba da stoji samo na
kraju).

Prekidna procedura (slika iznad) - Ovaj deo programa sadri kod prekidne procedure. Blok instrukcija
na poetku i na kraju prekidne procedure slui za uvanje i vraanje konteksta procesora i ne treba ih
menjati. Kod prekidne procedure treba da se nae izmeu ova dva bloka poev od linije koja sadri test
interrupt flags here.

C2.1 Izmena asm fajla za potrebe lab. vebi


Fajl primer.asm moe da poslui kao templejt za lab. vebe pri emu treba izmeniti glavni program i po
potrebi deo sa prekidnom procedurom.
Dodatak za laboratorijske vebe
Mikrokontroler PIC18F870 ima nekoliko karakteristika na koje se mora obratiti panja kada se radi sa
portovima. U nastavku su napomene koje treba uzeti u obzir prilikom izrade lab. vebi. Za sve dodatne
informacije o ovom kontroleru dostupna je dokumentacija koja se nalazi na adresi
http://ww1.microchip.com/downloads/en/DeviceDoc/30569b.pdf
1. Port A se na kontroleru PIC18F870 koristi se i za AD konverziju. Kako su LED indikatori na maketi
koja se koristi povezani na port A potrebno je podesiti ovaj port tako da bude digitalni u celini. Ovo se
postie upisivanjem 0x06 u kontrolni registar ADCON1. U nastavku je prikazan deo dokumentacije za ovaj
mikrokontroler koji opisuje port A i podeavanje AD konverzije.

U delu za inicijalizaciju za svaku od tri lab. vebe treba dodati sledee linije koda:
banksel ADCON1
movlw 0x06
movwf ADCON1
Napomena: Umesto uobiajenog naina za selekciju banke, moe se koristiti banksel makro iji je
parametar registar koji se koristi u delu koda koji je u nastavku (npr. banksel TRISA selektovae banku u
kojoj se nalazi registar TRISA).
2. Za treu laboratorijsku vebu, kodovi cifara koje se prikazuju se uitavaju iz EEPROM-a. Prvih deset
lokacija EEPROMA (adrese 0x00-0x09) sadre kodove redom cifara od 0 do 9 i upisane su u fazi
programiranja kontrolera. Asemblerski iseak za itanje lokacije iz EEPROM-a koji se moe nai i u
dokumentaciji kontrolera prikazan je na slici:

C3. MPLAB X 2.35 dibager


MPLAB dibager obezbeuje osnovne komande za kretanje kroz program kao to su Step into, Step over,
Run to Cursor i ostale. Dibager se pokree iz menija Debug->Debug Main Project. Pre pokretanja dibagera
moe se definisati od koje linije da se zapone izvrenje programa kao to je opisano u nastavku.

Da bi se zapoelo sa izvrenjem programa u dibageru najlake je postaviti prekidnu taku na izabranu


poetnu liniju programa desnim klikom na liniju i izborom opcije Toggle Line Breakpoint, To moe biti
linija koja sadri labelu ResetCode ili neka kasnija instrukcija.

Nakon toga linija u kodu izgledae kao na slici:

Potom se pokree dibager iz menija Debug.


Kontrole dibagera pojavljuju se na toolbar-u i one su redom: Finish, Pause, Reset, Continue, Step Over,
Step Into, Run to Cursor, Set PC at Cursor, Focus Cursor at PC. Step Into obezbeuje izvravanje
instrukcija redom, Step Over omoguava izvravanje potprograma i pozicioniranje na prvu liniju nakon
pozvanog potprograma. Komande koje u sebi ukljuuju re Cursor omoguavaju izvrenje programa do
linije u kojoj je pozicioniran kursor, postavljanje PC registra na adresu instrukcije na koju pokazuje kursor
i postavljanje kursora na trenutno izvravanu instrukciju, redom.

MPLAB simulator obezbeuje i prikaz sadraja registara opte namene, registara specijalne namene,
programske memorije, EEPROM memorije i omoguava praenje vrednosti promenljivih u toku izvrenja
programa, funkcijom watch. Sadraj memorijskih lokacija kontrolera i njihove promene mogue je pratiti
u prozorima koji se prikazuju preko menija Windows->PIC Memory Views.

Na slici u nastavku prikazan je sadraj registara specijalne namene, registara opte namene i programske
memorije za primer.asm.

Zadatak: Dodati novu promenljivu u sekciju CBLOCK, inicijalizovati je u glavnom programu a zatim
pratiti njenu vrednost u toku izvrenja programa koristei Debug->New Watch. Dodavanje promenljive u
CBLOCK i njena inicijalizacija prikazani su u nastavku.
Definicija promenljive:
CBLOCK
0x30
WREG_TEMP
STATUS_TEMP
PCLATH_TEMP
FSR_TEMP
COUNTER
ENDC
Inicijalizacija promenljive:

bcf
STATUS, 5
movlw 0xCE
movwf COUNTER
opet:
btfsc PORTB, 1

;storage for WREG during interrupt


;storage for STATUS during interrupt
;storage for PCLATH during interrupt
;storage for FSR during interrupt

Preko funkcije dibagera Watch mogue je prikazati sadraj promenljive u programu u toku izvrenja. Na
slici ispod prikazana je trenutna vrednost promenljive COUNTER u File registers prozoru kao i prozoru
Variables. Obratiti panju na memorijsku adresu ove promenljive koja iznosi 0x34 i njenu vrednost to je
0xCE.

Dibagerom se moe testirati i prekidna procedura, kada se pravilno podesi TMR0, INTCON i OPTION
registar. U prozoru koji prikazuje vrednosti registara specijalne namene moe se proizvoljno menjati
vrednosti registara kako bi se ubrzao ili kontrolisao proces debagiranja. Kada je re o registru TMR0
upisivanjem vrednosti 0xFF izbegava se ekanje do prekoraivanja vrednosti i omoguava se bri skok na
prekidnu proceduru. Na slici ispod prikazan je sadraj registra TMR0 i izvrenje koda prekidne proceure u
dibageru.

C3.1 Merenje vremena izvrenja dela koda


Korisna mogunost MPLAB-a je da prikae vreme izvrenja dela koda koji se koristi za generisanje tajmauta,
kanjenja i sl. Da bi se to postiglo, potrebno je podesiti radni takt kontrolera tj instrukcijski takt preko menija File>Project Properties u sekciji Simulator->Oscilator Options. Na slici je prikazano podeavanje instrukcijskog takta od
1MHz.

Da bi se izmerilo vreme izvrenja dela koda treba postaviti prekidne take na poetku i kraju tog dela koda. Nakon
toga bira se Stopwatch.

Pozicioniranjem koda na prvu prekidnu taku i pritiskom na Run, dibager e izvriti deo koda do druge
prekidne take. U donjem delu prozora prikazae se ukupno vreme izvrenja. Na slici ispod prikazan je deo
koda koji se izvrava 5us.

C4. MPLAB X 2.35 stimulus


Da bi se testirali svi delovi koda u programu nekada je potrebno da se simulira promena stanje na nekom
ulaznom pinu, vrednost neke promenljive i sl. MPLAB dibager obezbeuje simuliranje promene stanja na
pinovima mikrokontrolera preko funkcije stimulus kojoj se pristupa preko Window->Simulator->Stimulus.

Da bi se izvrio deo koda iz primera primer.asm poev od labele upali, koji se u programu uvek preskae,
potrebno je da se sa RB1 promeni vrednost na logiku jedinicu. Promena stanja na RB1 se postie
dodavanjem novog stimulusa tako to se u prozoru Stimulus doda novi red sa oznakom pina i eljene
promene. Na slici ispod, kreiran je Stimulus na pinu RB1 tipa toggle. Promena toggle oznaava da e pin
naizmenino menjati svoju vrednost na svaki pritisak tastera sa strelicom koji se nalazi na poetku reda koji
odgovara datom stimulusu.

Nakon promene vrednosti na pinu RB1, mogue je u dibageru izvriti deo koda koji poinje od labele upali
a prelazak na ovaj deo koda prikazan je na sledeoj slici.

Linija na dnu prozora pokazuje da je aktiviran stimulus tako da je izvren deo koda od labele upali.

C5. ema makete


Jedna od razlika izmeu PIC16F84A i PIC16F870 je postojanje dodatnog porta C, koji je na maketi povezan
na dve sedmosegmentne LED, i postojanje TRISC registra. Ostale karakteristike koje su bitne za izradu
vebi su ekvivalentne kontroleru PIC16F84A. Za izradu laboratorijskih vebi treba obratiti panju na nain
povezivanja segmenata na sedmosegmentni displej povezan na PORTC kao i realizaciju tastera povezanih
na PORTB i LED indikatora povezanih na PORTA kako bi se pravilno izvrilo testiranje u programu.
Prouiti logiku i elektrinu emu makete koji su dostupni na stranici predmeta.

C6. Programiranje kontrolera


Sintaksno ispravan asm fajl i logiki ispravan program koji je proveren u dibageru treba prevesti u
odgovarajui hex fajl. Hex fajl generie se desnim klikom na naziv projekta i izborom opcije Export Hex.

Generisani .hex fajl programira se na ip koristei mikroProg Suite aplikaciju. Potrebno je uitati hex fajl
(dugme Load) a zatim isprogramirati ip (dugme Write). Programator je povezan preko USB porta na
maketu.

tiklirana opcija Load/Save CODE oznaava da se prilikom programiranja prenosi kod a opcija Load/Save
DATA da se prilikom programiranja prenosi i sadraj EEPROM memorije.

You might also like