Timer 0 Interrupciones Pic16f887
Timer 0 Interrupciones Pic16f887
Timer 0 Interrupciones Pic16f887
TIMER 0 E
INTERRUPCIONES
PROF. LUIS ZURITA
Microcontroladores I
REGISTROS ASOCIADOS AL
TEMPORIZADOR TMR0
REGISTRO TMR0
Es el corazn del mdulo Timer0. Puede ser ledo o
escrito en cualquier momento. El TMR0 se
incrementar automticamente por cada ciclo de
instruccin y contar desde 0 (00H) hasta 255 (FFH)
(Contador de 8 bits).
Ejemplo. Escribir 100 en el TMR0=
movlw
.100
movwf
TMR0
Leer el valor del TMR0 y mostrarlo en el Puerto B=
movf
TMR0,0
movwf
PORTB
Microcontroladores I
00H
FFH
00H
(28 N10)
00H
FFH
Valor cargado
En el TMR0
00H
Microcontroladores I
QU ES EL PRESCALER?
Microcontroladores I
Temporizacin= 4*TOSC*ValorRealTMR0*ValorPreescaler
Microcontroladores I
Temporizac in
=
4 TOSC Valorprees caler
10,24ms
4 250ns 128
= 80
(256 N10) = 80, despejando N10 = (256 80) = 176, el valor que
debemos cargar en el TMR0 es 176, para que ste cuente desde 176
hasta 256.
Microcontroladores I
Temporizacin
50ms
=
4 TOSC Valorpreescaler
4 250ns Valorpreescaler
Microcontroladores I
Microcontroladores I
Microcontroladores I
1segundo
200.32
4.992 ms
Microcontroladores I
PS1 PSO
EJEMPLOS DE CONFIGURACIN
En el segundo caso:
movlw
bxx11x001
movlw
bxx0x0100
movwf
OPTION_REG
movwf
OPTION_REG
Microcontroladores I
Para que se produzca una interrupcin cada 50 ms, se hacen los clculos=
Temporizacin= 4 * 250 ns * (256 61 ) * 256 = 49.92 ms 50 ms
Qu valor se carga en el Prescaler?
Microcontroladores I
INTERRUPCIONES
Microcontroladores I
Instruccin 2
Instruccin 1
Instruccin 3
Instruccin 2
Instruccin 24
RETFIE
Instruccin 25
Instruccin N
Fin de programa
Microcontroladores I
DIAGRAMA DE
FLUJO RSI
Microcontroladores I
CAUSAS DE INTERRUPCIN
1.
2.
3.
4.
REGISTRO INTCON
Este registro se encuentra ubicado en la posicin 0BH del banco
0 de los registros de funciones especiales (SFR). A continuacin
se describirn cada uno de sus bits:
Microcontroladores I
INTCON
Microcontroladores I
INTCON
Microcontroladores I
Microcontroladores I
RB0/INT?
INTF=1?
RB4:RB7?
RBIF=1?
TMR0?
TOIF=1?
Programa Principal
Microcontroladores I
RSI
SALVANDO EL ENTORNO
Salvar el entorno, se refiere a mantener el valor exacto que
tienen los registros de trabajo STATUS y W, y cualquier otro de
importancia, incluyendo los puertos que controlan a los
actuadores, que no vaya a ser modificado dentro de la subrutina
de servicio de interrupcin.
Para salvar el entorno cuando ocurre una interrupcin se
recomienda seguir los siguientes pasos:
Salvar a w y a STATUS.
Almacenar a w en un registro general llamado W_TEMP
Almacenar a STATUS en un registro general llamado
STATUS_TEMP
Almacenar cualquier PortX que maneje actuadores
Se ejecuta la rutina de interrupcin (queda expresada para
efectos del ejemplo siguiente)
Restauramos a PortX
Restauramos a STATUS
Restauramos a w
NOTA: Los registros generales W_TEMP, STATUS_TEMP, y el de
puertos deben ser declarados al inicio del programa, para no
generar errores.
Microcontroladores I
SALVANDO EL ENTORNO
; Asuma que desea salvar el PORTB, durante una interrupcin=
; **** Rutina para salvar el entorno ****
PUSH movwf W_TEMP
; Salvamos w a este registro temporal
movf
STATUS,0
;
movwf STATUS_TEMP ; Salvamos STATUS en STATUS_TEMP
movf
PORTB,0
movwf CopiaPORTB
; Salvamos a PORTB
RUT_INT
;Aqu estar la rutina de servicio de interrupcin
;
POP
movf
CopiaPORTB,0 ; Restauramos el PORTB a su valor antes de
movwf PORTB
; haber entrado a la rutina de interrupcin
movf
STATUS_TEMP,0 ; Movemos w al registro STATUS,
; retornando el
movwf STATUS
; valor original
movf
W_TEMP,0
; W_TEMP lo trasladamos a w
; retornando el valor original que tena antes
; de entrar a la rutina de interrupcin.
Microcontroladores I
Microcontroladores I