Sunteți pe pagina 1din 8

Scrierea si depanarea unui program in MPLAB

1. Se lanseaz mediul MPLAB, si se selecteaz Project


-> ProjectWizard
a. Next>
b. Se selecteaz modelul de PIC cu care se va
lucra (exemplu: PIC16F887); Next>
c. La Active Toolsuite se selecteaz Microchip
MPASM Toolsuite(in fereastra aceasta nu
modificai nici un director (din Location),
altfel vor apare x-uri roii in dreptul lor si
nu va funciona); Next>
d. Se specifica directorul si numele proiectului
ce va fi creat;
(ex: c:\users\pam\5321a\test7);
se specifica calea completa (att directorul cat si numele proiectului); Next>
e. (nu adugai inca fiiere la proiect); Next>
f. Finish>
2. Se creeaz un nou fiier sursa cu File -> New, urmat de File->SaveAs, se selecteaz acelai director ca
mai sus (acolo unde a fost creat proiectul) si se da un numele fiierului, cu extensia asm (Ex: test.asm).
Nu maximizai (inc) ferestrele; o sa avei nevoie sa vizualizai mai multe ferestre simultan.
3. Daca fereastra proiectului din coltul stnga-sus nu este vizibila(cea cu
extensia .mcw/.mcp), se activeaz cu View->Project.
In aceasta fereastra se da click dreapta pe SourceFiles, AddFiles si se
selecteaz fiierul cu extensia .asm salvat (ex: test.asm), din directorul
de unde a fost salvat (fiierul o sa apar sub SourceFiles, nu in alta
parte; o sa fie un singur fiier la SourceFile, nu mai multe).
4. Ignorai acest paragraf; trecei la pasul 5.
Daca este nevoie (depinde de cum a fost configurat MPLAB) se
adaug si in HeaderFiles fiierul .inc corespunztor PIC-ului selectat
(Ex: p16f887.inc); (Daca nu a fost copiat dinainte in directorul curent,
sau nu se afla in directorul comun, poate fi gsit de obicei in
c:/program files/microchip/mpasm suite)
5. Se scrie un program respectnd urmtoarele reguli:
a. nici o instruciune nu ncepe din prima coloana (este preferabil
sa se alinieze cu TAB-uri)
b. definirea etichetelor si a simbolurilor se face numai din prima
coloana (de la marginea din stnga)
c. nu se vor folosi pentru variabile locaii de memorie mai mici de 20h (deoarece pentru majoritatea
PICurilor acestea sunt rezervate)
d. comentariile sunt precedate de ';'
e. directiva #include "p16f887.inc" de la nceputul programului specifica ce tip de
procesor va fi folosit; Obs.: Fiierul adugat in HeaderFiles, cel specificat cu directiva
#include si PICul selectat in Configure->SelectDevice trebuie sa fie toate in concordanta (sa se
refere la acelai PIC)
ver.2010.04 d

f. directiva ORG specifica de la ce adresa vor fi asamblate instruciunile (la pornire, execuia
ncepe de la adresa zero);
g. codul sursa se va ncheia cu "end"
h. baza implicita in care vor fi scrise numerele poate fi selectata cu radix (ex: radix dec)
i. regitrii/locaiile de memorie speciale si numele predefinite ale biilor se scriu cu majuscule (ex:
STATUS, FSR, Z)
6. Exemplu de program:
; suma elementelor unui vector de 10 numere, ce incep de la adresa 20h
#include "p16f887.inc"
radix dec
; selecteaza baza implicita zecimal
errorlevel 1, -305
; elimina warning-urile ce au ca destinatie f
cblock 0x20
vector:10
contor
sum
endc

;
;
;
;

alocarea variabilelor incepe de la adresa 0x20


vector incepe de la adresa 0x20 si are alocati 10 octeti
contor va fi la adresa 0x2A
sum va fi la adresa 0x2B

ORG 0
nop
clrf
goto

; de aici incepe programul la reset


PCLATH
main

ORG 4
main
movlw
10
movwf
contor
movlw
vector
movwf
FSR
; aici ar mai trebui ceva
repeta
movf
addwf
incf
decfsz
goto

INDF, w
sum
FSR
contor
repeta

gata
goto

gata

; contor = 10
; incarca in W adresa de inceput a lui vector
; FSR = 0x20

;
;
;
;

citeste elementul curent


il aduna la suma
incrementeaza pointerul
repeta de `contor` ori

; programul s-a terminat


; se intra intr-o bucla infinita

END

7. Se salveaz programul, apoi se asambleaz cu una din comenzile Make sau Build.
Erorile si atenionrile sunt semnalate in fereastra Output.
a. Warnings si Messeges de obicei pot fi ignorate;
b. Asamblorul poate fi instruit sa nu mai afieze anumite mesaje (ex: errorlevel 1, -305)
c. Daca apar erori, se da dublu-click pe eroare pentru a poziiona cursorul pe linia cu eroarea
d. In cazul erorilor de asamblare care apar chiar de la nceput, putei verifica daca este selectat
acelai PIC in Configure -> SelectDevice, in fereastra proiectului, HeaderFiles, si in program in
directiva #include.

ver.2010.04 d

8. Pentru a vedea cum arata asamblat programul si codul maina se poate da View -> ProgramMemory.

Instruciunile in limbaj de asamblare sunt in coloana din dreapta, echivalentul lor in cod maina este in
coloana Opcode. Se poate comuta afiarea intre modurile Symbolic si Machine (de jos) pentru a afia
denumirile variabilelor (locaiilor de memorie) sau adresa lor.
9. Din meniul Debugger -> SelectTool se selecteaz MPLAB SIM pentru a putea rula programul in
simulare. In momentul acesta mai apare un toolbar cu butoane pentru depanare.
10. Pentru a examina memoria PICului (RAM) se deschide fereastra View->FileRegisters
In zona adreselor mici (primele 2 rnduri) se afla locaii speciale de memorie, nu o sa umblam la ele;
insa ncepnd de la adresa 20h, se afla variabilele definite in programul din exemplu.
Pe coloana din dreapta sunt trecute adresele (ex: octetul care este colorat este cel de la adresa 20h, cel
din dreapta lui este de la adresa 21h, etc..); sunt afiai cte 16 (10h) octei pe linie.

ver.2010.04 d

In coloana din dreapta (Ascii), pentru fiecare cod hexa este afiat caracterul corespunztor.
In modul de vizualizare Symbolic, vor fi afiate locaiile de memorie, una sub alta, mpreuna cu
denumirile lor. Locaiile de memorie pot fi editate, scriind pur si simplu o alta valoare in hexa, sau
scriind un sir de caractere in zona Ascii.
11. Cu toate ca diversele variabile se pot urmri si in fereastra FileRegisters, este mai comod sa se fac acest
lucru din View->Watch; Se introduc pentru urmarire:
a. simbolurile definite in program (i, sum), cu AddSymbol,
b. registrul W (WREG) si eventual: STATUS, FSR, folosind AddSFR.
In fereastra de Watch sunt afiate: adresa de memorie, numele variabilei si coninutul;
coninutul(valoarea) poate fi vizualizat in diverse baze (10/16/2):
dnd click dreapta pe capul de tabel si adugind noi coloane;
dnd click dreapta pe variabila si selectnd Properties.

12. ncepnd de la adresa 20h se completeaz manual cele 10 valori (a cror suma va fi calculata de
program); aceste valori se trec direct in hexa; opional se poate trece un sir de caractere in coloana din
dreapta ASCII, si automat codurile lor vor apare in dreapta.

Se observa ca valorile proaspt modificate apar colorate diferit.


ver.2010.04 d

13. Cu F7 (sau F8) se face execuia pas cu pas a instruciunilor. Sgeata ce apare in dreapta (in program)
indica urmtoarea instruciune de executat.
Dup execuia fiecrei instruciuni, se examineaz variabilele / locaiile de memorie pentru a observa ce
s-a modificat. Registrul W si flagurile se pot urmri si in josul ferestrei, in StatusBar, in mijloc.
Daca se dorete rularea programului de la nceput (reset) aceasta se poate obine apsnd F6.
Rularea pina la un anumit punct se poate face fie:
a. dnd click dreapta pe instruciunea pana la care se dorete rularea si selectare RunToCursor;
b. punnd un Breakpoint, dnd dublu-click pe marginea din stnga, in dreptul instruciunii unde se
dorete oprirea execuiei; breakpointul e semnalizat pe margine cu o bulina roie.
14. Atenie, programele ce ruleaz in microcontroler nu se opresc niciodat din rulat; directiva end nu
nseamn ca programul se va termina (aa cum se ntmpla in alte limbaje), ci doar ca zona de cod scrisa
de utilizator se termina acolo. Trebuie sa facem unul din lucrurile:
a. ori facem tot programul sa ruleze intr-o bucla infinita;
b. ori la sfritul programului se poate pune o bucla infinita
c. ori avem grija sa rulam pas cu pas pina se termina instruciunile scrise de noi in program;
Varianta a) este folosita pentru a rula un program din microcontroler, insa pentru nceput, la
laborator vom folosi varianta b). Varianta c) poate fi folosita numai cnd rulam pas cu pas.
Daca lansam in execuie un program fara a respecta una din a)b)c), atunci programul va rula in
continuare, executnd secvenial instruciuni gsite in memorie (al cror coninut este aleator).

ver.2010.04 d

15. ncercai aranjarea ferestrelor astfel incit sa fie vizibile (sau sa avei acces uor): programul, zona de
memorie si watch:

16. Pentru a testa un alt program asm, fara a crea un nou proiect, se poate elimina programul curent din
fereastra proiectului, SourceFiles, Remove; si se poate aduga cel nou ca la punctul 3). Atenie la a nu
edita un program, si in proiect sa fie inclus un altul (posibil cu acelai nume insa din alt director)
Greelile ce apar la crearea unui nou proiect sunt de obicei datorita neateniei la punctele marcate cu .

ver.2010.04 d

Exemplu de program mai simplu:


Urmnd instruciunile de mai sus:
1. Creai un nou proiect;
2. Creai un fiier asm (pe care l includei in proiect) cu coninutul din imagine; scopul lui este sa
adune 2 variabile, apoi sa nmuleasc cu 4, sa scad 7, iar rezultatul sa se gseasc in alta variabila;
3. In fereastra de Watch pregtii variabilele pentru urmrire;
4. Dup asamblarea cu succes (F10), rulati programul (F7) pina in poziia indicata in imagine;
5. Iniializai variabilele folosite (aa=0, bb=2, ee=3) din Watch
Variabilele se pot
sau File registers;
iniializa si din
6. Continuai sa rulai programul astfel:
program, imediat dup
a. gndii-va ce efect are instruciunea pe care e sgeata
main::
verde;
b. calculai nainte care ar trebui sa fie rezultatul;
clrf aa
c. executai instruciunea (cu F7);
movlw 2
movwf bb
d. vedei daca a produs rezultatul ateptat;
movlw 3
7. Dup o rulare completa, rulai programul de la nceput (F6) si la
movwf ee
pasul 5 iniializai cu alte valori (aa=0, bb=0, ee=1)

ver.2010.04 d

FAQ:

Daca ntlnii undeva P16F876A (un model de PIC folosit in anii anteriori) nlocuii cu P16F887 (nu
P16F887A)
Nu facei modificri in directorul comun; nu tergei si nu adugai fiiere. Toate salvrile de
proiecte si modificrile le facei in directorul propriu (cel cu codul subgrupei).
In funcie de fontul folosit in editor, cteodat este uor de confundat 1 cu l
Daca avei erori ncepei corectarea lor cu prima; citii cu atenie ce mesaj de eroare avei apoi dai
dublu-clic pe el.
Instruciunile nu conteaz daca le scriei cu litere mici sau mari, insa denumirile de locaii speciale
(FSR,INDF, STATUS, Z, C,...) trebuie scrise cu majuscule.

Q: Obin erori ciudate legate de linker.


A: Creai proiectul din nou. Nu folosii pentru directoare sau pentru fiiere nume ciudate (coninnd
caractere neobinuite); MPLABul este cteodat mofturos.
Q: Aps F7 insa nu se ntmpla nimic (nu apare sgeata verde)
A: Nu a fost activat simulatorul (vezi P.9)
Q: Cum adaug variabilele la Watch?
A: Se scrie (sau se selecteaz) numele variabilei din fereastra din dreapta, apoi se da Add Symbol (nainte
de asta ar trebui asamblat programul si activat simulatorul)
Q: WREG din Watch este chiar registrul W ?
A: Da.
Q: Ia uite, se modifica valori la adrese mici in File Registers cnd se ruleaz cu F7; nseamn ca acolo
sunt locaiile folosite/modificate de program...
A: Ignorai orice valori se modifica la adrese mici (mai mici de 20h) acelea sunt locaii speciale;
variabilele folosite in program (si care ne intereseaz) ncep abia de la 20h.
Q: Am scris programul si a afisat Compile Succesful; am terminat? pot sa trec la urmtorul?
A: Nu, programul trebuie rulat pentru si vzut daca face ce trebuie.
Q: Dau Run (F9) dar programul nu se oprete (eventual zice ceva de watchdog).
A: Nu dai Run!; nu ne folosete; ne intereseaz mai mult cum se executa fiecare instruciune in parte (F7) si
care este efectul ei. Citi si paragraful 14.
Q: Am apsat o data pe F7 insa nu s-a ntmplat mare lucru.
A: F7 executa numai cte o instruciune; trebuie rulat tot programul (de multe ori F7) pentru a vedea
rezultatul final.
Q: Tot fac modificri, insa de fiecare data mi da aceeai eroare, la aceeai linie, si eroarea nu corespunde cu
ceea ce am eu in program.
A: Fiierul care l editai nu e acelai cu cel care l avei inclus in proiect(si pe care MPLAB il asambleaz).
nchidei fereastra pe care o editai si dai dublu-click pe fiierul inclus in proiect la Source; ori facei
modificrile in fereastra care s-a deschis, ori trebuie sa includei alt fiier in Project (nu trebuie sa avei
dect unul la Source).
ver.2010.04 d

S-ar putea să vă placă și