Page 32 - Microcontrolere - Indrumator de laborator
P. 32
numărătorul de program PC cu adresa 0004H. Dacă aplicația software folosește
sistemul de întreruperi al microcontrolerului, la adresa 0004H se va găsi o instrucțiune
de salt necondiționat la o adresă din memoria program la care se găsește o rutină care
deservește instrucțiunea acceptată, GOTO adr_pt_intrerupere. Înainte de efectuarea
ramificării propriu zise, pe stiva circuitului de adresare a memoriei de date se va
depune adresa de revenire din întrerupere, adică adresa locației care urmează după
instrucțiunea la care a fost cedat controlul programului principal. Prima instrucțiune
din subrutina de deservire a întreruperii va realiza o invalidare globală a întreruperilor
cu ajutorul bitului nr. 7, bitul GIE, din registrul INTCON aflat în memoria de date.
Practic, cu această setare, se asigură execuția doar a subrutinei de deservire a
întreruperii.
Este foarte util, în multe aplicații, ca pe lângă adresa de revenire salvată pe
stivă să se mai salveze și contextul în care se găsea programul în momentul apariției
întreruperii, adică să fie salvat și conținutul registrelor STATUS, respectiv registru de
lucru W. Salvarea contextului poate fi făcută în primele 16 locații de memorie de uz
general din fiecare bank în parte. Practic, primele 16 locații de memorie de uz general
din bank-urile 1, 2 și 3 vor indica informațiile găsite în zona similară de memorie
aflată în bancul 0.
Revenirea din subrutina care tratează o întrerupere (cerere de întrerupere) se
realizează cu ajutorul instrucțiunii RETFIE. Rezultatul acestei instrucțiuni este acela
că de pe stivă se va lua adresa de revenire din subrutina de deservire a întreruperii și se
va plasa în registrul numărător de program, iar bitul nr. 7 din registrul INTCON (bitul
GIE va fi setat, validat astfel lucrul în continuare al microcontrolerului cu întreruperi).
După caz, înainte de revenirea din subrutina de deservire a întreruperii se reface
contextul inițial, pentru registrele STATUS și W.
Observațiile referitoare la sistemul de întreruperi pentru utilizarea modulului
de temporizare Timer2 se adaugă la secvența indicată mai sus în cadrul acestui
subcapitol.
PSECT udata_block0
STATUS_TEMP: DS 1
W_TEMP: DS 1
PSECT code
0004H GOTO rdi
...
CLRF INTCON ; se găsește în toate cele patru bank-uri de
; memorie
CLRF PIE1 ; invalidarea întreruperilor de la periferice
CLRF PIR1 ; ștergerea cererilor de întrerupere de la periferice
BANKSEL(PR2)
MOVLW 255
MOVWF PR2 ; se încarcă 255 în registrul de perioadă PR2
BANKSEL(T2CON)
CLRF TMR2 ; se șterge conținutul registrului TMR2
29