Page 14 - Microcontrolere - Indrumator de laborator
P. 14
MOVLW 100h
MOVWF CONTOR
adr_3:
DECFSZ CONTOR, 1 ; Execuția acestei instrucțiuni scade
; 1 din conținutul locației de memorie
; de date și se testează dacă rezultatul
; este zero.
; În caz de rezultat nul, PC adresează instrucțiunea SUBWF ce urmează
; după instrucțiunea GOTO (incrementare PC cu doi). Altfel, se execută
; instrucțiunea GOTO care va avea ca efect decrementarea PC cu o unitate,
; iar instrucțiunea de la adresa adr_3 va fi executată din nou
GOTO adr_3
SUBWF CONTOR, 0
...
Un caz particular al instrucțiunii GOTO este acela în care conținutul PC
rămâne neschimbat în urma executării unei instrucțiuni, după cum se indică în
instrucțiunile următoare:
GOTO $
sau
adr_4: GOTO adr_4 ; buclă infinită de așteptare.
Aceste instrucțiuni se folosesc în special în cazul în care microcontrolerul se găsește
într-o stare de așteptare de întreruperi. Dacă apare o întrerupere (de exemplu,
recepționarea unui octet la portul serial EUSART) și întreruperea respectivă este
nemascată, numărătorul de program PC se încarcă cu adresa subrutinei de deservire a
cererii de întrerupere, după care în numărătorul de program PC se încarcă din nou
adresa la care se execută bucla de așteptare infinită.
D) Incrementarea automată a conținutului numărătorului de program PC cu o
unitate după execuția unei instrucțiuni, mai poate fi întreruptă de o instrucțiune de tip
CALL, a cărei execuție reprezintă un apel de subrutină. În cazul utilizării instrucțiunii
CALL se folosește din Fig. 1.1 și o stivă de memorie organizată pe opt nivele, fiecare
nivel fiind astfel conceput ca să rețină o adresă codată pe 13 biți folosită pentru
accesarea memoriei de program. Instrucțiunea CALL este folosită împreună cu
instrucțiuni de revenire, de ex. instrucțiunea RETURN. Cu ajutorul secvenței
următoare de instrucțiuni se poate observa rezultatul unei instrucțiuni de tip CALL, în
cazul unei testări software a apariției unei întreruperi la recepționarea unui octet pe
portul serial EUSART al microcontrolerului PIC16F887.
…
adr_5: BTFSS PIR1, RCIF ; Se așteaptă ca bitul RCIF din registrul cu
; funcții speciale PIR1 să treacă în 1 logic, fapt
; ce semnifică existența unui octet necitit
; în bufferul de recepție.
; După citirea octetului, bitul RCIF se
11