Page 21 - Microcontrolere - Indrumator de laborator
P. 21
etichetă, iar dacă în urma operației de decrementare conținutul locației de memorie
este zero, are loc o incrementare a registrului numărător de program PC cu doi, altfel,
conținutul numărătorului de program PC este incrementat cu o unitate. Având în
vedere cele precizate mai sus, secvența de program următoare va fi repetată atât timp
cât COUNT1 este mai mare decât zero.
adr_3: NOP
DECFSZ COUNT1, 1
GOTO $-1
GOTO adr_2
Durata executării secvenței de program este echivalentă cu durata a 4 cicluri
mașină, adică cu un interval de timp de 4 µs. Astfel, pentru executarea instrucțiunii
NOP este necesară o microsecundă, pentru executarea instrucțiunii DECFSZ este
necesară încă o microsecundă (deoarece nu este îndeplinită condiția de conținut nul a
locației de memorie cu eticheta COUNT1), iar pentru executarea instrucțiunii GOTO
$-1 sunt necesare alte două microsecunde. Această secvență va fi executată de 250 de
ori, întrucât conținutul variabilei COUNT1 a fost setat inițial prin program la 250. În
consecință, până la apariția condiției de salt peste instrucțiunea GOTO $-1, se va
scurge un interval de timp de 250 µs.
În momentul în care, în urma decrementărilor repetate, conținutul locației de
memorie cu eticheta COUNT1 este nul, numărătorul de program PC este incrementat
cu două unități, situație în care se execută instrucțiunea GOTO adr_2. În urma acestei
instrucțiuni COUNT1 ia din nou valoarea 250, se decrementează cu o unitate
COUNT2 și se trece din nou la executarea repetată a secvenței de instrucțiuni de la
adresa adr_3. Se constată din nou că se va iniția un nou proces de temporizare cu
durata de 250 µs. Acest mod de funcționare se va încheia în momentul în care
COUNT2 devine egal cu zero și are apoi loc saltul la adr_4. Rezultatul acestui mod de
lucru este obținerea unei temporizări cu durata dată de relația următoare:
(COUNT2)*(COUNT1) = (COUNT2)*250 µs, sau cu alte cuvinte se obține o
durată de temporizare egală cu un multiplu de 250 de µs. La acest rezultat se mai
adaugă câteva µs (nesemnificative ca și durată față de cele 250 µs) datorate salturilor
realizate la adresele adr_2, adr_3 și adr_4.
Observație. Valorile cu care se realizează inițializarea COUNT1 și COUNT2
pot fi diferite față de cele folosite în rutina de mai sus, în funcție de întârzierea pe care
dorim să o obținem.
Dacă dorim să obținem intervale de timp mai mari, secvența de program
poate fi concepută ca o subrutină de program care poate să fie apelată de mai multe ori
cu ajutorul instrucțiunii CALL.
Programul indicat mai sus scris în limbaj de asamblare este convertit în cod
mașină executabil cu ajutorul unui program de asamblare, numit și asamblor, sau
folosind funcția BUILD din cadrul unui mediu integrat de dezvoltare MPLAB X IDE,
oferit de către compania Microchip.
18