1
TIMERS
• Registro contador.
• Contaje de impulsos de reloj:
– Derivado del oscilador principal: TIMER.
– Señal externa: COUNTER.
• Longitud: 8 bits (0-255) o 16 bits (0-65535)
• Cíclicos: puesta a cero al desbordamiento.
• El desbordamiento activa un flag y puede provocar interrupción (si está habilitada).
2
TIMERS
• Aplicaciones:
– Temporizaciones
– Contaje de eventos
– Generación de señales
– Medida de periodos
• Timers en el PIC 16f877:
– Timer 0: 8 bits con pre-escalado
– Timer 1: 16 bits con pre-escalado
– Timer 2: 8 bits con pre y post-escalado
11
P.Principal
Habilitación de
interrupciones
General y particular
Configuración y
arranque del timer 0
Interrupciones
Retorno Int.
Incrementar
Puerto B
Borrado del
flag
Ejemplo: T0 en modo timer
12
;Uso del timer0.Cada vez que se desborda el timer 0, se incrementa la salida del puerto BLIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'ORG 0x00goto inicioorg 0x04goto interORG 0x05
iniciomovlw b'10100000' ;Habiltación de la interrupción externamovwf INTCON bsf STATUS,RP0 ;Selección del banco 1 de registrosclrf TRISB ;puerto B como salidamovlw b'10000111' ;timer 0 como timer conmovwf OPTION_REG ;preescalado a 255 ( aprox 65 msg)bcf STATUS,RP0 ;Selección del banco 0 de registrosclrf PORTB ;puerto B a cero
lazogoto lazo
interincf PORTB,1 ; incrementa la salida del puerto Bbcf INTCON, T0IF ; borrado del flagretfieEND
Vector de reset
Vector de interrupción
Programa principal
Rutina deinterrupción
13
P.Principal
Habilitación de
interrupciones
General y particular
Configuración y
arranque del timer 0
Desbordamientos=15
Interrupciones
Retorno Int.
Incrementar
Puerto B
Borrado del
flag
Desbordamientos=0
decrementar
desbordamientos
Desbordamientos=15
Ejemplo: T0 en modo timer
14
;Se incrementa el puerto B cada segundoLIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'desbord EQU 0x20 ORG 0x00goto inicioorg 0x04goto interORG 0x05
iniciomovlw b'10100000' movwf INTCON bsf STATUS,RP0clrf TRISBmovlw b'10000111'movwf OPTION_REGbcf STATUS,RP0clrf PORTBmovlw b'00001111'movwf desbord
lazogoto lazo
Programaprincipal
Vector de reset
Vector de interrupción
Inicializando desbord a 15
15
interdecfsz desbord,1goto saltoincf PORTB,1movlw b'00001111'movwf desbord
saltobcf INTCON, T0IFretfie
END
Rutina deinterrupción
Decrementandodesbord
Desbord > 0
Desbord = 0
16
HabilitaciónOscilador externo.
Selección de reloj.
Nivel de peescalado.
Arranque/paradadel timer.
Desbordamiento.
TIMER 1
18
Habilitación general.
Habilitación de periféricos.
Flag de desbordamiento.
Habilitación particular.
19
P.Principal
Habilitación de
interrupciones
General y particular
Configuración (como counter) y
arranque del timer 1
Timer 1 inicializado a (256-10)
Interrupciones
Retorno Int.
Incrementar
Puerto B
Borrado del
flag
Timer 1 inicializado
a (256-10)
Ejemplo: T1 en modo counter
20
;Timer 1 como counter.Cada vez que se desborda el timer 1 (a los 10 pulsos), se incrementa la salida del puerto B
LIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'ORG 0x00goto inicioorg 0x04goto interORG 0x05
Inicio ;Programa principalmovlw b'11000000' ;Habiltación global de interrupcionesmovwf INTCON ;ojo! hay que activar el bit PEIEbsf STATUS,RP0 ;Selección del banco 1 de registrosmovlw b'00000001'movwf PIE1 ;Habilitación particular del timer 1clrf TRISB ;puerto B como salidabcf STATUS,RP0 ;Selección del banco 0 de registrosclrf PORTB ;puerto B a ceromovlw b'00000011' ;timer 1 como counter, sin preescaladomovwf T1CONmovlw b'11111111' ;Timer 1 inicializado para desbordarsemovwf TMR1H ;a los 10 pulsos (256-10)movlw b'11110110'movwf TMR1L
lazogoto lazo
21
;Rutina de atención a la interrupción
interincf PORTB,1 ; incrementa la salida del puerto Bbcf PIR1, TMR1IF ;borrado del flagmovlw b'11111111' ;Timer 1 inicializado para desbordarsemovwf TMR1H ;a los 10 pulsos (256-10)movlw b'11110110'movwf TMR1LretfieEND
24
Habilitación general.
Habilitación de periféricos.
Flag de desbordamiento.
Habilitación particular.
25
Tareas propuestas
• Un sensor acoplado a la puerta de un frigorífico, detecta si la puerta del mismo esta abierta o cerrada. Diseñar una aplicación que genere una alarma si la puerta se abre 20 veces. Usar el timer 0.
• Al diseño anterior añadir un pulsador para reiniciar la alarma. Usar una interrupción externa.
• Al diseño anterior añadir una segunda alarma, que se active si la puerta permanece abierta mas de 1 minuto. Usar el timer 1.
• Al diseño anterior añadir un segundo pulsador para reiniciar la alarma de tiempo.