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
   27   28   29   30   31   32   33   34   35   36   37