Page 33 - Microcontrolere - Indrumator de laborator
P. 33

; registrul TMR2 se găsește în același bank de
                                      ; memorie cu registrul T2CON și PIE1
                 CLRF          T2CON ; T2CON este resetat
                 MOVLW         b'1111011'
                 MOVWF         T2CON ; se alege un factor de prescalare de 1:16 și un
                                      ; factor de postscalare tot de 1:16 presupunând
                                      ; frecvența semnalului de tact de 4 MHz
                 BANKSEL(PIE1)
                 BSF           PIE1, 1  ; validarea la nivel periferic a întreruperii
                                      ; modulului de temporizare Timer2
                 BSF           INTCON, 7 ; sau BSF  INTCON, GIE
                 BANKSEL(T2CON)
                 BSF           T2CON, 2 ; sau BSF  T2CON, TMR2ON
                                   ; se pornește modul Timer2
          loop:   BTFSS        PIR1, 1 ; sau BTFSS  PIR1, TMR2IF
                                      ; se așteaptă cererea de întrerupere de la Timer2
                 GOTO          loop
                 ...
          rdi:   BCF           INTCON, 7
                 ; după caz, urmează salvarea contextului care depinde de context
                 BANKSEL(STATUS_TEMP)
                 MOVWF         W_TEMP         ; W este salvat într-un registru temporar
                 SWAPF  STATUS, W     ; Operația SWAP între STATUS și W
                                              ; fără să fie afectați biții de stare
                 MOVWF         STATUS_TEMP; Rezultatul operației SWAP este
                                              ; salvat în registrul STATUS_TEMP
                 ...
                 ; se va indica rutina care deservește întreruperea, în cazul de față TMR2IF
                 ...
                 ; dacă a fost salvat contextul înainte de deservirea cererii de întrerupere
                 ; are loc refacerea acestui context
                 ; salvarea contextului este opțională, depinde de aplicație
                 ; PC este reîncărcat în mod automat cu adresa de pe vârful stivei

                 BANKSEL(STATUS_TEMP)
                 SWAPF  STATUS_TEMP, W ; Operația inversă SWAP salvată
                                                    ; în registrul W
                 MOVWF         STATUS         ; Conținutul lui W este salvat în
                                              ; registrul STATUS
                 MOVF          W_TEMP, 0      ; informația din registrul W_TEMP este
                                              ; readusă în registrul W
                 BANKSEL(PIR1, 1)
                 BCF           PIR1, 1  ; se șterge bitul TMR2IF pentru a putea
                                      ; să indice o nouă întrerupere

                                              30
   28   29   30   31   32   33   34   35   36   37   38