Sunteți pe pagina 1din 12

Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr.

Lecia nr. 3

MEDIUL DE PROGRAMARE MPLAB

3.1. INTRODUCERE
MPLAB IDE (MPLAB Integrated Development Environment) este un mediu integrat
de programare care permite dezvoltarea unor proiecte de aplicaii pe sisteme hardware
realizate n jurul microcontrolerelor PIC. Programul are urmtoarele faciliti de operare:
Crearea i editarea fiierului surs (cod surs) folosind un editor propriu,
Asamblarea, compilarea i linkeditarea codului surs,
Testarea logic i depanarea programelor cu un simulator propriu sau n timp real
cu MPLAB ICE (In Circuit Emulator) sau cu MPLAB ICD 2 (In Circuit
Debugger),
Efectuarea unor msurri de timp cu simulator sau emulator,
Afiarea variabilelor de program n ferestre specifice (Watch Windows),
ncrcarea programului (codul HEXA) n memoria de program a PIC-ului,
utiliznd MPLAB ICD2, PICSTART PLUS sau PRO MATE II,
On Line Help.
n cadrul Laboratorului de Sisteme Dedicate se va utiliza, pentru dezvoltarea unor
proiecte de aplicaii pentru microcontrolerul PIC 12F675, versiunea v6.40 a mediului
integrat de programare MPLAB.
Realizarea unei aplicaii n acest mediu de programare se va face parcurgnd
urmtoarele trei etape distincte:
Prima etap n dezvoltarea unei aplicaii este construirea proiectului. Etapa ncepe
cu editarea fiierului surs al aplicaiei, conform unei organigrame elaborate n
prealabil. Construirea proiectului aplicaiei presupune o serie de operaii de
programare realizate ntr-o anumit succesiune avnd ca rezultat obinerea
fiierului direct executabil n format Intel HEX;
Testarea/depanarea programului n regim de simulare utiliznd pentru aceasta
MPLAB SIM;
Rularea programului pe kit, utiliznd programul de interfa PICkit 1 FLASH
Starter Kit pentru gestionarea resurselor hardware ale kit-ului. Verificarea
funcionarii programului conform aplicaiei se va face folosind LED-urile de pe
plac sau echipamente electronice de msur/vizualizare.
Fiierele surs pentru programele de aplicaii vor fi scrise n limbaj de asamblare,
motiv pentru care n continuare se vor prezenta cerinele i regulile de baz n acest limbaj
de programare pentru PIC-uri.

23
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

3.2. LIMBAJUL DE ASAMBLARE


Un program surs scris n limbaj de asamblare pentru toate microcontrolere tip PIC
are aceeai structur cu cel scris pentru orice alt tip de microcontroler, i anume:
n partea de nceput sunt incluse declaraii i directive de definire a procesorului,
de definire a unor variabile specifice de program sau a unor registre specifice
aplicaiei (coninut i adrese);
Urmeaz apoi corpul programului care ncepe cu directiva ORG <adresa de
start> i conine instruciuni specifice aplicaiei, structurate pe subrutine i/sau
secvene de program, recunoscute prin Etichete.
Ultima linie de program trebuie s fie directiva END.
Comentariile (necesare pentru o mai bun nelegere a liniilor de program) se
scriu numai dup separatorul ; .
O linie de program are patru cmpuri distincte, avnd aceleai semnificaii ca n
cazul procesoarelor din familia Intel:
ETICHET MNEMONIC OPERANZI COMENTARII
Separatori de cmp pot fi unul sau mai multe spaii (Space) sau TAB, iar comentariul
trebuie s nceap cu ; .
Simbolurile care pot fi scrise n cmpul MNEMONIC i OPERANZI sunt:
f adresa unui registru cu funcii speciale (de la 00H pn la 7FH banc 0,
respectiv de la 80H pn la FFH banc 1);
W registru de lucru principal (Working register);
b bit adresabil ntr-un registru de 8 bii;
k cmp literal (constant sau etichet);
d cmp pentru selectarea destinaiei rezultatului:
d = 0 rezultatul va fi memorat n W,
d = 1 rezultatul va fi memorat n f (valoare implicit);
PC contorul de instruciuni (Program Counter);
TO Bit Time-Out din registrul STATUS;
PD Bit Power-Down din registrtul STATUS.
Instruciunile n limbaj de asamblare ale microcontrolerelor PIC sunt mprite n trei
categorii de baz, n funcie de natura operanzilor, astfel:
a. Operaii orientate pe byte,
b. Operaii orientate pe bit,
c. Operaii de control sau cu operanzi literali.
Fiecare instruciune se traduce, n cod executabil, printr-un cuvnt de 14 bii, a crui
structur este diferit n funcie de natura operanzilor, i anume:
13 8 7 6 0
OPCODE d f (FILE#) pentru operaii orientate pe byte

13 10 9 7 6 0
OPCODE b (BIT#) f (FILE#) pentru operaii orientate pe bit

24
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

13 8 7 0
OPCODE k(literal) pentru operaii de control sau cu operanzi literali

13 11 10 0
OPCODE k (literal) numai pentru instruciuni GOTO i CALL

Setul de instruciuni al microcontrolerului PIC 12F675 este prezentat n Anexa C.

3.3. REALIZAREA UNUI PROECT DE APLICAIE


n cadrul acestei lecii se va exemplifica modul de realizare a unui proiect
(construcie i rulare n simulator) n MPLAB, pentru o aplicaie de ncrcare cu constante a
unor registre de uz general din memoria microcontrolerului. Prin acest exemplu de program
se urmrete ilustrarea faptului c este implementat un singur bloc de memorie RAM de uz
general, de 64 octei, iar adresele registrelor din aceast zon sunt de la 20H pn la 5FH.
Concret, se va elabora programul care realizeaz aceast operaie, apoi se va construi
un proiect avnd ca fiier surs acest program, dup care se va face verificarea funcionrii
lui corecte.
Pentru o verificare transparent, se va exemplifica operaia ncrcnd registrele de la
adresele 20H i 21H (Bank 0) cu constantele 0x2, respectiv 0x4, iar registrele de la adresele
0A0H i 0A1H (Bank 1) cu constantele 0x3, respectiv 0x5.

3.3.1. ELABORAREA ORGANIGRAMEI


Se ntocmete organigrama (flowchart) de realizare a transferului conform enunului,
prezentat n figura 3.1.

ncrcare registre de
uz general

Setare, configurare microcontroler


Definirea registrelor de lucru

Se ncarc registrele din bank 0


cu valorile: 0x2, 0x4

Se ncarc registrele din bank 1


cu valorile: 0x3, 0x5

End

Figura 3.1. Organigrama aplicaiei

25
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

3.3.2. CREAREA FIIERULUI SURS

Precizri necesare
La elaborarea programului n limbaj de asamblare conform organigramei, se vor avea
n vedere urmtoarele detalii:
Pentru selectarea tipului de microcontroler se va utiliza directiva LIST i
INCLUDE iar pentru configurarea lui hardware, directiva CONFIG.
Pentru definirea registrelor implicate n transfer se va folosi directiva CBLOCK.
Pentru ncrcarea registrelor cu valorile 2 i 4, respectiv 3 i 5, se vor defini
variabilele C0, C1, C2, C3 cu directiva DEFINE.
Orice instruciune de operare cu registre trebuie precedat de operaia de selectare
a bancului de memorie n care se gsesc acestea.
Pentru selectarea unuia din cele dou bancuri de registre generale se vor utiliza
cele dou moduri posibile:
o cu directiva BANKSEL,
o cu setarea sau resetarea bitului RP0 din registrul STATUS.
Observaie: Toate directivele utilizate n program vor fi explicate n fiierul surs.
Pentru lmuriri suplimentare, se poate utiliza documentaia mediului de dezvoltare
MPLAB, dup lansarea lui n execuie, selectnd succesiv: Help Topic
MPASM Assembler Using MPASM Assembler Directive Usage.

Editarea fiierului surs


Scrierea fiierului surs se va face cu editorul propriu al mediului de programare,
MPLAB Editor, motiv pentru care urmtoarea operaie este lansarea n execuie a
programului MPLAB. Comanda de lansare n execuie deschide fereastra de ntmpinare a
programului, care are:
n partea superioar, bara de meniuri i butoane (instrumente) de lucru,
n partea stng, fereastra proiectului,
n restul spaiului, o zon de lucru n care pot fi deschise ferestre specifice, de
lucru sau de vizualizare, n funcie de etapa de procesare a aplicaiei.
Pentru editarea fiierului se vor parcurge succesiv paii urmtori:

Pasul 1 Se deschide editorul programului cu comanda File New


n spaiul de lucru (workspace) se va deschide o fereastr de editare n care se scrie
sau se copiaz fiierul surs al aplicaiei. Pentru exemplul propus, programul surs, conform
organigramei elaborate n etapa precedent, este urmtorul:
;Program de ncrcare cu constante a unor registre din Bank 0 si Bank 1.
list p=12f675 ;Directiva de definire a procesorului
#include <p12f675.inc> ;Directiva de includere n proiect a fiierului p12f675.inc n
; care sunt definite SFR-urile microcontrolerului
errorlevel -302 ;Elimin mesajul de tip 302 din fiierul de tip list
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF &
_PWRTE_ON & _INTRC_OSC_NOCLKOUT

26
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

;Directiva '__CONFIG' are ca aciune configurarea hardware a microcontrolerului. Semnificaia


; biilor din registrul CONFIG a fost prezentat n lecia 1. Reamintim aici doar semnificaia biilor
; care apar n directiv:
; CP_OFF - Cod Protection,
; WDT_OFF - WatchDog Timer,
; BODEN_ON - Brown-Out Detect ENable,
; PWRTE_ON - PoWeR-up Timer Enable,
; INTRC_OSC_NOCLKOUT - INTernal RC_OSCilator
; MCLRE_OFF - Master CLeaR Enable
; CPD_OFF - Data Code Protection
;Definirea unor registre specifice aplicaiei cu directiva CBLOCK
cblock 0x020
REG0_0 ;Registrul REG0_0 va avea adresa 0x020
REG0_1 ;Registrul REG0_1 va avea adresa 0x021
endc
cblock 0x0A0
REG1_0 ;Registrul REG1_0 va avea adresa 0x0A0
REG1_1 ;Registrul REG1_1 va avea adresa 0x0A1
endc
;Definirea variabilelor de program cu directiva DEFINE
#define Bank0 0x00 ;Definirea variabilei Bank0 (atribuirea adresei de nceput a
; bancului 0 de memorie simbolului Bank0)
#define Bank1 0x80 ;Definirea variabilei Bank1
#define C0 B'00000010' ;Definirea variabilei C0 prin valoarea ei binar
#define C1 0x4 ;Definirea variabilei C1 prin valoarea ei n hexazecimal
#define C2 0x3 ;Definirea variabilei C2
#define C3 0x5 ;Definirea variabilei C3

;Initialize: secvena de iniializare a SFR-urilor i a registrelor de uz general


org 0x005 ;Adresa de Start a memoriei program
Initialize
; call 0x3FF ;Restabilirea factorului de calibrare - instruciune comentariu
; necesar n cazul rulrii programului n simulator
banksel Bank1 ;Selectare Bank 1
movwf OSCCAL ;ncrcarea registrului OSCCAL cu valoarea factorului de
; calibrare
clrf REG1_0 ;Resetarea registrului REG1_0
clrf REG1_1
banksel Bank0 ;Selectare Bank 0
clrf REG0_0 ;Resetarea registrului REG0_0
clrf REG0_1
movlw C0 ;ncrcarea registrului W cu constanta 2H
movwf REG0_0 ;Transfer n REG0_0 (adresa 0x20) coninutul lui W
movlw C1
movwf REG0_1
bsf STATUS,RP0 ;Selectare Bank 1
movlw C2 ;ncrcarea registrului W cu constanta 3H
movwf REG1_0 ;Transfer n REG1_0 (adresa 0x0A0) coninutul lui W
movlw C3
movwf REG1_1
end

27
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

Pasul 2 Salvarea fiierului


Se salveaz cu Save As... din meniul File. n fereastra care se deschide se creeaz un
folder de proiect care se va denumi, de exemplu, incarcare_reg, n care se salveaz fiierul
surs cu nume.asm (de exemplu setare_reg.asm).
Observaie: Recomandm n mod expres crearea folderului de proiect pentru fiecare
aplicaie. n acesta vor fi salvate att fiierele create de utilizator ct i cele generate
de program.

3.3.3. INIIEREA PROIECTULUI


n aceast etap se va iniia un nou proiect pe baza codului surs n limbaj de
asamblare editat n etapa anterioar. Locaia lui va fi folderul creat de asemenea n etapa
precedent. Se recomand folosirea unui vrjitor lansat cu ajutorul comenzii Project
Wizard care permite setarea opiunilor de realizare a proiectului (tipul microcontrolerului,
limbajul de programare, includerea/tergerea unor fiiere). Aceast comand se lanseaz din
meniul Project. n fereastra deschis de aceast comand se apas butonul Next pentru
fiecare pas care trebuie fcut n continuare, i anume:

Pasul 1 Selectarea PIC-ului se face n fereastra Select a device


Se alege microcontrolerul pentru care a fost scris codul surs, n cazul nostru
PIC 12F675 (figura 3.2).

Figura 3.2. Selectarea microcontrolerului

Pasul 2 Selectarea limbajului de programare i a locaiei asamblorului se face n


fereastra Select a language toolsuite (figura 3.3)

28
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

Figura 3.3. Setarea limbajului de programare

Pasul 3 Introducerea unui nume i a unei locaii pentru proiect, n fereastra Name your
Project (figura 3.4)

Figura 3.4. Denumirea proiectului

29
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

Pasul 4 Adugarea unor fiiere necesare pentru dezvoltarea proiectului se realizeaz n


fereastra Add any existing files your project (figura 3.5) astfel:

Figura 3.5. Includerea fiierului surs n proiect

Figura 3.6. Sumarul proiectului

30
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

Se va selecta n fereastra din stnga numele i locaia fiierului surs scris n limbaj
de asamblare, n exemplul nostru setare_reg.asm din folderul incarcare_reg,
Se apas butonul Add pentru includerea acestuia n proiect.

Pasul 5 n fereastra deschis de ultimul Next este afiat sumarul proiectului (figura
3.6)
Mesajul din subsolul ferestrei anun crearea unui spaiu de lucru n care se va gsi
proiectul astfel construit.
n aceast fereastr se activeaz butonul Finish care va nchide fereastra Project
Wizard i va redeschide fereastra de lucru. n fereastra de lucru a proiectului, n cazul nostru
avnd numele proiect1.mcp, apar ultimele includeri de fiiere i setrile efectuate. Alte
fiiere pot fi incluse n proiect i cu comanda corespunztoare din meniul contextual
(obinut cu un click dreapta mouse cu cursorul poziionat n cmpul Source File din
fereastra proiectului).

3.3.4. CONSTRUIREA PROIECTULUI


Aceast operaie presupune asamblarea codului surs, linkeditarea i conversia
formatului object n format IntelHex, folosind instrumentele programului MPLAB.
Pentru a obine un proiect construit se selecteaz Project Build All sau butonul
. Aciunea comenzii este asamblarea cu succes sau nu a fiierului surs, cu mesaj
corespunztor n Output Window, care se deschide automat. n acelai timp, sunt generate i
salvate n folderul proiectului, fiierele de tip list (.LST), de eroare (.ERR) i a fiierul
direct executabil de tip IntelHex (.HEX).
Pot aprea dou situaii:
Construirea cu succes a proiectului, caz n care se poate trece la etapa urmtoare;
n desfurarea operaiei de construire au aprut erori. n aceast situaie mesajul
conine i descrierea sumar a erorilor. Un exemplu de eroare, de altfel cea mai
des ntlnit, este o instruciune scris greit (eroare de sintax), cum ar fi: clr
REG1_0 n loc de clrf REG1_0.
n aceast situaie, se deschide fiierul de tip LST, n care descrierea erorii este
fcut chiar deasupra liniei n care a aprut, se interpreteaz eroarea, se corecteaz
n fiierul surs i se reconstruiete proiectul.

3.3.5. RULAREA I DEPANAREA APLICAIEI


Proiectul aplicaiei construit n etapa precedent trebuie testat i eventual depanat
naintea ncrcrii lui pe sistemul hardware, n cazul nostru PICkit 1 FLASH Starter Kit.
Vom utiliza pentru aceasta programul de simulare MPLAB SIM care se activeaz prin
selecia succesiv a comenzilor: Debugger Select Tool MPLAB SIM.

Observaie: Setarea implicit pentru instrumentele de simulare este None.


Fereastra de lucru se va modifica dup aceast comand ca n figura 3.7.
n Status Bar (pe cadrul inferior al ferestrei de lucru) pot fi urmrite n timpul rulrii
programelor urmtoarele variabile de program:

31
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

coninutul registrelor PC, W


ultimii trei bii din registrul STATUS: z, dc, c.
Observaie: Dac simbolurile acestor bii sunt litere mici, valoarea lor este 0, iar
dac sunt litere mari, valoarea lor este 1.
cuvntul de configurare determinat de setrile din directiva CONFIG. n figura
3.7 acesta este constanta 0xc6c0.

1 Status bar se
modific n
MPLAB_SIM
2 n meniul Debugger
se activeaz comenzi
specifice de
simulare-depanare
3 Apar noi simboluri
de instrumente
(butoane) de lucru n
Debug Tool Bar

Figura 3.7. Fereastra de lucru n MPLB SIM

Vom descrie n continuare paii care trebuie parcuri n MPLAB SIM pentru
verificarea n regim de simulare a funcionrii corecte a programului aplicaiei.

Pasul 1 Afiarea registrelor de interes n rularea programului


Pentru vizualizarea coninutului registrelor microcontrolerului n diferite faze ale
rulrii programului, se pot folosi trei ferestre specifice, n care modificrile de date apar
imediat dup executarea instruciunii. Ele se deschid din meniul View:
Special Function Registers conine registrele cu funcii speciale n ordinea
adreselor pe care le au;
File Registers conine toate registrele din spaiul de memorie 00H 0FFH;
Watch Window este o fereastr n care pot fi selectate doar registrele utilizate n
cadrul programului ncrcat n simulator.
Recomandm pentru simularea acestui program folosirea ferestrei Watch n care vom
vizualiza coninutul registrelor de interes ale aplicaiei. Adugarea acestor registre n
fereastra de vizualizare se face astfel (figura 3.8):
o Adugarea unui registru cu funcii speciale al microcontrolerului (de exemplu
PCL, STATUS, WREG) se face n cmpul de selecie din dreapta butonului Add
SFR, dup care se valideaz cu comanda Add SFR.

32
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

o Adugarea unui registru sau a unei variabile definite n cadrul programului, de


exemplu REG0_0, se face nscriind numele registrului n csua de dialog, apoi se
valideaz cu butonul Add SFR sau cu tasta ENTER.
Cu comenzile de mai sus propunem includerea n fereastra Watch a registrelor cu
funcii speciale: PCL, STATUS, WREG i a registrelor definite cu directiva CBLOC:
REG0_0, REG0_1, REG1_0, REG1_1, ca n figura 3.8.

Figura 3.8. Fereastra Watch

Pasul 2 Deschiderea ferestrelor de lucru pentru urmrirea rulrii programului


n timpul rulrii programului n simulator, indicatorul liniei de program care se
execut la un moment dat este un cursor de culoare verde care se afieaz simultan n trei
ferestre i este poziionat n partea stng:
Disessembly Listing se deschide din meniul View i conine toate liniile
programului ncepnd cu seciunea de declaraii, apoi adresa, codul hexa i codul
surs al instruciunilor.
Program Memory se deschide tot din meniul View. Conine numai zona de
memorie de program n care liniile programului nostru sunt prezente cu adresa,
codul hexa i codul surs.
Source File se deschide cu comanda Open din meniul File.
Recomandm urmrirea execuiei programului doar n fereastra Disassembly Listing
aa nct se vor nchide celelalte dou ferestre.

Pasul 3 Rularea programului


Programul de simulare-depanare are implementate mai multe comenzi de execuie a
programelor, care vor fi utilizate n funcie de aplicaie i de scopurile urmrite. Indiferent
de comenzile folosite pentru rulare, orice lansare n execuie trebuie s se fac dup
comanda Reset (meniul Debugger) sau butonul , a crei aciune este resetarea PC-ului.
Lansarea n execuie a comenzilor de execuie a programelor se face fie din meniul
Debugger, fie din bara de butoane. Astfel, programul nostru poate fi rulat n patru moduri:

33
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 3

n mod continuu, cu comanda Run sau butonul . n acest caz, execuia


programului ncepe cu prima adres i continu pn la ultima adres din
memoria program a microcontrolerului selectat pentru proiect, dup care se reia
execuia cu prima adres de program, .a.m.d. Oprirea execuiei se face numai cu
comanda Halt sau butonul . Dup oprire se afieaz noul coninut al registrelor
implicate n rularea programului. Acest mod de rulare este indicat, de cele mai
multe ori, atunci cnd rularea programului se execut cu ntreruperi controlate (cu
breakpoint-uri).
n mod continuu, cu comanda Animate sau butonul . n acest mod de rulare
execuia programului este repetitiv, de la prima instruciune pn la directiva
END. Oprirea execuiei se face numai cu comanda Halt (sau ). Acest mod de
rulare este indicat n mod deosebit n execuia unor bucle de program care se
repet pn la ndeplinirea unor condiii.
Pas cu pas, cu comanda Step Into sau , urmrind simultan execuia fiecrei
instruciuni i modificrile n registrele de lucru.
Cu definirea unor puncte de ntrerupere (breakpoints sau, prescurtat, bkp).
Punctele de ntrerupere pot fi definite din meniul Debugger cu comanda
Breakpoints sau, mai simplu, fie cu un dublu click, fie din meniul contextual (Set
Breakpoint) n dreptul adresei la care se dorete definirea bkp-ului.
Observaie: Punctele de ntrerupere definite cu aceast comand pot fi ulterior
dezactivate, sau terse folosind comenzile Disable Breakpoint sau Remove
Breakpoint.
Cu presetarea registrului PCL cu adresa instruciunii la care dorim s se
opreasc rularea programului. n acest caz ne poziionm cu cursorul mouse-
ului pe linia cu adresa instruciunii pn la care dorim rularea programului i dm
comanda (din meniu contextual) Run to Cursor.
n cazul nostru este recomandat definirea a dou bkp-uri: la adresele 0x10 i 0x14.
Punctele definite vor fi marcate cu litera B pe o bulin de culoare roie. n aceast situaie,
pentru rularea programului se procedeaz astfel:
o Se d comanda Run. Rularea programului se va opri la primul bkp.
o Se comand din nou Run. Rularea programului se va opri la al doilea bkp.
o Se continu rularea cu Step Into pentru execuia ultimei instruciuni.
Dup fiecare comand, se vor urmri modificrile din registrele al cror coninut este
afiat n fereastra Watch.
Observaie: Indiferent de modul de rulare ales pentru execuia programului, se va
verifica c REG0_0 i REG0_1 vor avea n final coninutul identic cu REG1_0
respectiv REG1_1, dei adresele i constantele de ncrcare definite n program sunt
diferite, ceea ce demonstreaz c exist un singur set de registre de uz general
accesibile cu adrese diferite din Bank0 respectiv Bank1.

34

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