Professional Documents
Culture Documents
MPLABX MIKS Uputstvo Za Pripremu Laboratorijskih Vežbi - V3
MPLABX MIKS Uputstvo Za Pripremu Laboratorijskih Vežbi - V3
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
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.
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.
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.
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.
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:
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
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.
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.
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.
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.