Beruflich Dokumente
Kultur Dokumente
Registro TMR0
Interrupciones
Una vez alcanzado el valor 255, el registro TMR0 es puesto a cero automáticamente
reemprendiendo entonces el conteo no desde el valor originariamente cargado sino
desde cero.
0 0 0 2 500.000
0 0 1 4 250.000
0 1 0 8 125.000
2. Para evitar que se produzca otra interrupción mientras dura el tratamiento de la que se
ha aceptado, el bit GIE se pone a 0.
#include <p16F877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
;Bloque de definición de variables
org 0x00
1 clrf PCLATH
goto PP
Salir_Interrupcion:
;Recupero W, STATUS, PCLATH. 3
retfie
4
;Bloque del programa principal.
PP:
;Configuración
7 PILA
;Configuración Interrupciones 6
goto Salir_Interrupcion
José Oliden Martínez
Interrupciones: Secuencia
1. Al iniciar el programa se salta todo el bloque de inicio y fin de interrupción con la
instrucción GOTO PP (Ir al Programa Principal).
TMR0 = 158
PASOS:
Banco1
movlw B'10000111‘ ; pull-up=off,preescalador a TMR0=1:256
movwf OPTION_REG
Banco0
; Habilitación de Interrupciones
movlw b'11000000' ;GIE=1,PEIE=1 hab. int perif., noTMR0
movwf INTCON
; Programa Principal e Inicio
INICIO:
bsf INTCON,T0IE ; Se habilitan interrupciones del TMR0
TMR0 = 60
PASOS:
Banco1
movlw B'10000111‘ ; pull-up=off,preescalador a TMR0=1:256
movwf OPTION_REG
Banco0
; Habilitación de Interrupciones
movlw b'11000000' ;GIE=1,PEIE=1 hab. int perif., noTMR0
movwf INTCON
; Programa Principal e Inicio
INICIO:
bsf INTCON,T0IE ; Se habilitan interrupciones del TMR0
Una señal oscilante por el pin RD0 con 100ms en alto y 100ms en bajo. Esta
programación debe estar en el programa principal.
Adicionalmente debe salir una señal oscilante por RD1 con 10ms en alto y 10ms
en bajo que debe ser programada usando la interrupción del TMR0.
Ton=100ms
RB0
Toff=100ms
RD0
Ton=10ms
uC RD1 Toff=10ms
RD2
Diagrama de Flujo
PP
Configuración
PORTD OUT
TIMER0
Activar
Interrupciones
GIE, TMR0IE
Iniciar Valores
TMR0=60
PORTD,0=0
Delay_100ms
PORTD,0=1
Delay_100ms
Interrupciones: IntTimer0.asm