fo losir emp lab

Upload: florin-nechifor

Post on 16-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 Fo Losir Emp Lab

    1/8

    ver.2010.04 d

    Scrierea si depanarea unui program in MPLAB

    1. Se lanseazmediul MPLAB, si se selecteazProject

    -> ProjectWizarda. Next>

    b. Se selecteazmodelul de PIC cu care se valucra (exemplu: PIC16F887);Next>

    c. LaActive Toolsuitese selecteazMicrochipMPASM Toolsuite(in fereastra aceasta numodificai nici un director (din Location),altfel vor apare x-uri roii in dreptul lor sinu va funciona); Next>

    d. Se specifica directorul si numele proiectuluice 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 creeazun nou fiier sursa cu File -> New, urmat de File->SaveAs, se selecteazacelai directorcamai 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 cuextensia .mcw/.mcp), se activeazcu View->Project.In aceasta fereastra se da click dreapta pe SourceFiles,AddFilessi se

    selecteazfiierul cu extensia .asm salvat (ex: test.asm), din directorulde unde a fost salvat (fiierul o sa aparsub SourceFiles, nu in altaparte; 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) seadaugsi inHeaderFilesfiierul .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 inc:/program files/microchip/mpasm suite)

    5. Se scrie un program respectnd urmtoarele reguli:

    a.

    nici o instruciune nu ncepe din prima coloana (este preferabilsa se alinieze cu TAB-uri)

    b. definirea etichetelor si a simbolurilor se face numai din primacoloana (de la marginea din stnga)

    c. nu se vor folosi pentru variabile locaii de memorie mai mici de 20h (deoarece pentru majoritateaPICurilor acestea sunt rezervate)

    d. comentariile sunt precedate de ';'e. directiva #i ncl ude "p16f 887. i nc" 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->SelectDevicetrebuie sa fie toate in concordanta (sa serefere la acelai PIC)

  • 7/23/2019 Fo Losir Emp Lab

    2/8

    ver.2010.04 d

    f. directiva ORG specifica de la ce adresa vor fi asamblate instruciunile (la pornire, execuiancepe 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:

    7. Se salveazprogramul, apoi se asambleazcu una din comenzileMakesauBuild.Erorile si atenionrile sunt semnalate in fereastra Output.

    a. WarningssiMessegesde 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 eroaread. In cazul erorilor de asamblare care apar chiar de la nceput, putei verifica daca este selectatacelai PIC in Configure -> SelectDevice, in fereastra proiectului,HeaderFiles, si in program indirectiva #include.

    ; suma el ement el or unui vect or de 10 numere, ce i ncep de l a adr esa 20h#i ncl ude "p16f 887. i nc"r adi x dec ; sel ect eaza baza i mpl i ci t a zeci maler r or l evel 1, - 305 ; el i mi na warni ng- ur i l e ce au ca dest i nati e f

    cbl ock 0x20 ; al ocar ea var i abi l el or i ncepe de l a adr esa 0x20vect or: 10 ; vect or i ncepe de l a adr esa 0x20 si are al ocati 10 oct et icont or ; cont or va f i l a adr esa 0x2Asum ; sum va f i l a adr esa 0x2Bendc

    ORG 0 ; de ai ci i ncepe programul l a r esetnopcl r f PCLATHgoto mai n

    ORG 4mai n

    movl w 10 ; cont or = 10movwf cont ormovl w vect or ; i ncar ca i n W adr esa de i nceput a l ui vect ormovwf FSR ; FSR = 0x20; ai ci ar mai t r ebui ceva

    r epetamovf I NDF, w ; ci t este el ement ul cur entaddwf sum ; i l aduna l a sumai ncf FSR ; i ncr ement eaza poi nt erul

    decf sz cont or ; r epet a de `cont or` origoto r epeta

    gata ; pr ogr amul s- a t ermi natgot o gat a ; se i nt ra i nt r- o bucl a i nf i ni t a

    END

  • 7/23/2019 Fo Losir Emp Lab

    3/8

    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 incoloana Opcode. Se poate comuta afiarea intre modurile SymbolicsiMachine(de jos) pentru a afiadenumirile variabilelor (locaiilor de memorie) sau adresa lor.

    9. Din meniulDebugger -> SelectToolse selecteazMPLAB SIMpentru 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, celdin dreapta lui este de la adresa 21h, etc..); sunt afiai cte 16 (10h) octei pe linie.

  • 7/23/2019 Fo Losir Emp Lab

    4/8

    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 cudenumirile lor. Locaiile de memorie pot fi editate, scriind pur si simplu o alta valoare in hexa, sauscriind un sir de caractere in zonaAscii.

    11.Cu toate ca diversele variabile se pot urmri si in fereastra FileRegisters, este mai comod sa se facacestlucru din View->Watch; Se introduc pentru urmarire:

    a. simbolurile definite in program (i, sum), cuAddSymbol,b. registrul W (WREG) si eventual: STATUS, FSR, folosindAddSFR.

    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 completeazmanual cele 10 valori (a cror suma va fi calculata deprogram); 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.

  • 7/23/2019 Fo Losir Emp Lab

    5/8

    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.Dupexecuia fiecrei instruciuni, se examineazvariabilele / locaiile de memorie pentru a observa ces-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 ob ine 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 selectareRunToCursor;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 ruleazin microcontroler nu se opresc niciodatdin rulat; directiva end nunseamnca programul se va termina (aa cum se ntmpla in alte limbaje), ci doar ca zona de cod scrisade 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 infinitac. ori avem grija sa rulam pas cu pas pina se termina instruc iunile scrise de noi in program;

    Varianta a) este folosita pentru a rula un program din microcontroler, insa pentru nceput, lalaborator 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 incontinuare, executnd secvenial instruciuni gsite in memorie (al cror coninut este aleator).

  • 7/23/2019 Fo Losir Emp Lab

    6/8

    ver.2010.04 d

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

    16. Pentru a testa un alt program asm, fara a crea un nou proiect, se poate elimina programul curent dinfereastra proiectului, SourceFiles,Remove; si se poate aduga cel nou ca la punctul 3). Atenie la a nuedita 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 .

  • 7/23/2019 Fo Losir Emp Lab

    7/8

    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 nmuleasccu 4, sa scad7, iar rezultatul sa se gseascin alta variabila;3.

    In fereastra de Watch pregtii variabilele pentru urmrire;4. Dupasamblarea cu succes (F10), rulati programul (F7) pina in poziia indicata in imagine;5. Iniializai variabilele folosite (aa=0, bb=2, ee=3) din Watch

    sau File registers;6. Continuai sa rulai programul astfel:

    a. gndii-va ce efect are instruciunea pe care e sgeataverde;

    b. calculai nainte care ar trebui sa fie rezultatul;c. executai instruciunea (cu F7);d. vedei daca a produs rezultatul ateptat;

    7. Dupo rulare completa, rulai programul de la nceput (F6) si la

    pasul 5 iniializai cu alte valori (aa=0, bb=0, ee=1)

    Variabilele se potiniializa si dinprogram, imediat dupmain::

    cl r f aamovl w 2movwf bbmovl w 3

    movwf ee

  • 7/23/2019 Fo Losir Emp Lab

    8/8

    ver.2010.04 d

    FAQ:

    Daca ntlnii undeva P16F876A (un model de PIC folosit in anii anteriori) nlocui i cu P16F887 (nuP16F887A)

    Nu facei modificri in directorul comun; nu tergei si nu adugai fiiere. Toate salvrile deproiecte si modificrile le facei in directorul propriu (cel cu codul subgrupei).

    In funcie de fontul folosit in editor, cteodateste 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 conteazdaca 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 (coninndcaractere neobinuite); MPLABul este cteodatmofturos.

    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 (naintede 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 ruleazcu F7; nseamnca acolosunt 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 intereseazmai mult cum se executa fiecare instruciune in parte (F7) sicare 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 vedearezultatul final.

    Q: Tot fac modificri, insa de fiecare data mi da aceeai eroare, la aceeai linie, si eroarea nu corespunde cuceea 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 faceimodificrile in fereastra care s-a deschis, ori trebuie sa includei alt fiier in Project (nu trebuie sa aveidect unul la Source).