Sunteți pe pagina 1din 14

uC & uP

w Interrupciones
w Timer 0
w Timer 1
w Timer 2
El Timer 0

Es un contador, un tipo de registro cuyo contenido es incrementado con una


cadencia regular y programable directamente por el hardware del PIC.

movlw 10 movlw 10
movwf TMR0 movwf TMR0
LAZO:
goto LAZO

el registro TMR0 es incrementado por el hardware interno del PIC al mismo


tiempo que se ejecuta el programa

Una vez alcanzado el valor 255, el registro TMR0 es puesto a cero automáticamente
reemprendiendo entonces el conteo nó desde el valor originariamente cargado sino
desde cero.
El Registro TMR0
(Bloques Internos)
Fosc/4 es una señal generada
internamente por el PIC Posibles fuentes de
tomada del circuito de reloj y reloj para el TMR0
que es igual a la frecuencia PSA = 1 watchDOG
del oscilador dividida por
cuatro. PSA = 0 TIMER0

T0CKI es una señal generada


por un posible circuito externo
y aplicada al pin T0CKI
correspondiente al pin 6 en el
PIC16F877.

TOSE =1 flanco de subida (Incrementa el contador)


TOSE = 0 flanco de bajada (Incrementa el contador)
Ejemplo de funcionamiento

Cristal de 4MHz
Ejemplo de funcionamiento
Ejemplo de funcionamiento:
Prescaler

PS2 PS1 PS0 Divisor Frecuencia de salida del prescaler (Hz)

0 0 0 2 500.000

0 0 1 4 250.000

0 1 0 8 125.000
TIMER0 :

TEMPORIZACION = 4 x Tosc x ( 256-TMR0) x Preescalador

Donde:
Tosc = 1 / Fosc
Ftimer = Fosc/4
El Timer 1

Trabaja como Timer o Contador de 16 bits:


Incrementa desde 0x0000 hasta 0xFFFF
Sus registros de control son:
T1CON
TMR1L
TMR1H
COMPARAMOS TIMER O CON TIMER 1

TMR0 EQUIVALENTE TMR1L (- significativos)


TMR1H (+significativos)

OPTION_REG EQUIVALENTE T1CON


El Timer 1
ejemplo

RUTINA PARA INICIALIZAR TIMER 1


init_timer1
movlw b'00100000' ; 1:4 prescale,
movwf T1CON ; inicializa Timer1
movlw 0x38 ;
movwf TMR1L ; inicializa Timer1 low
movlw 0x50 ;
movwf TMR1H ; inicializa Timer1 high
;--------------------------------
bsf T1CON,TMR1ON ; turn on Timer1 module
Bank1
bsf PIE1,TMR1IE ; habilita Interrupcion del TIMER 1
Bank0
return ; return from subroutine
ejemplo

INICIANDO TIMER0

init_timer0
Bank1
movlw b'11010111'
movwf OPTION_REG ; inicializa Timer0
Bank0
clrf TMR0 ; Cuenta desde 0
;--------------------------------
bsf INTCON,T0IE ; Habilita interrupcion Externa
return ; return from subroutine
Interrupciones !

Una interrupción consiste en una detención del programa en curso para


realizar una determinada rutina que atienda la causa que ha provocado la
interrupción.

Cuando se termina, se retorna al programa principal en el punto en que se


abandonó.

Por qué son útiles las interrupciones

?
Interrupciones: Causas (Fuentes)

Interrupción externa (RB0/INT)


Rebosamiento TMR0

Cambio de estado del puerto B (RB7-RB4)


Convertidor A/D

Rebosamiento TMR1

TMR2

La interfaz SCI asíncrono transmite o recibe


Puerto Serie asíncrono


Puerto paralelo secundario. Se lee o se escribe



Interrupciones: Fases

1. Se activa una posible causa de interrupción. El señalizador de dicha causa, el bit de


permiso correspondiente y el global para todas las interrupciones (GIE) están a nivel
alto.

1. 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.

1. El valor actual del PC se guarda en la Pila.

1. El PC se carga con el valor 0004h, que es el del vector de interrupción.

1. La rutina de interrupción comienza explorando el valor de los señalizadores, para


determinar la causa que la ha provocado.

1. Según la causa de la interrupción, la rutina se bifurca a la subrutina correspondiente.

1. Se borran los señalizadores por software, antes de realizar el retorno.

1. Cuando se llega a la ultima instrucción de la rutina de interrupción, que es la de


RETURN, se carga en el PC el valor que inicialmente se guardo en la Pila y se pone el
bit GIE = 1.

S-ar putea să vă placă și