Professional Documents
Culture Documents
Temporizadores
Mdulo
Mdulo
Mdulo
Timer
Timer
Timer
0
1
2
(TMR0)
(TMR1)
(TMR2)
COMPETENCIA
El alumno comprender los principales
elementos que conforman la estructura interna
del reloj o temporizador TMR0, TMR1 y TMR2
del PIC16F877. Analizar su principio de
funcionamiento y la funcin del preescalador.
JUSTIFICACIN
Las operaciones de pausas, sincronizacin
de tiempo de ejecucin y lapsos de tiempo
son uno de los criterios necesarios al
momento de realizar implantaciones sobre
los sistemas basados en microcontroladores.
TMR0
Qu tiene de especial?
Es un contador de 8 bits.
Se puede leer para saber cual es valor actual de las cuentas o puede ser escrito
Reloj Externo
Reloj Interno
para colocar un valor inicial.
terminal RA4/TOCK1
Posee un bloque de preescalamiento que permite ampliar el rango de las
cuentas. Contador de
eventos
Genera una
seal de interrupcin cuando se produce un desborde en el registro
TMR0 (cuando pasa de 0xFF a 00). Bit T0IF del registro INTCON
Temporizador
Cmo manejo el
TMR0?
Para manejar el TMR0 se debe configurar el registro
1 = Prescaler apagado
0 = Prescaler es asignado al modulo TMR0
PS2:PS0: Bits selectores relacion de trabajo
TMR0
COMO CONTADOR
DE
EVENTOS
Ejercicio:
Disear un programa en el PIC16F877 para contar eventos con flancos de
bajada en RA4/T0CKI y mostrar la cuenta en el puerto B.
Solucin: configurar el registro OPTION_REG en funcin al ejercicio propuesto
1
Por tanto:
OPTION_REG = 1111 1000
STATUS,RP0
STATUS,RP1
;Ir banco 1
Movlw
b'00000110
;PA como entrada digital
Movwf
ADCON1
Movlw
0xFF
Movwf
TRISA
;PA entrada
Clrf TRISB
;PB salida
OPTION_REG = 1111 1000
movlw
;Valor a escribir en el registro de configuracin
b'11111000'
;del TMR0
movwf
OPTION_REG
;Configuracion del TMRO
bcf
bcf
STATUS,RP0
STATUS,RP1
clrf
BUCLE
movf
movwf
goto
END
TMR0
TMR0,W
PORTB
BUCLE
;Ir banco 0
;TMR0=0 inicializamos el contador en cero
;W=TMR0
;Escribe el valor de TMR0 en PORTB
;Salta a la etiqueta bucle
Ejercicios propuestos:
Disear un programa en el PIC16F877 para contar eventos con flancos
de subida en RA4/T0CKI con un preescalamiento de 1:2. Mostrar la
cuenta en el puerto B.
Disear un programa en base al PIC16F877 que rote un bit a la
izquierda del puerto B cada vez que ocurra cuatro eventos (flancos de
bajada en RA4/T0CKI).
Disear un programa en base al PIC16F877 para contar eventos
(flancos de bajada en RA4/T0CKI) y mostrar la cuenta en un display de
7 segmentos conectado al puerto B. Cuando las cuentas llegan a 9 pasan
de nuevo a 0.
Disear un programa en base al PIC16F877 para contar eventos
(flancos de bajada en RA4/T0CKI) y mostrar la cuenta en tres displays
de 7 segmentos.
TMR0
COMO
TEMPORIZADOR
Ejercicio:
Programar el TMR0 para generar un retardo de un segundo. A partir del cual
un LED conectado al PORTC debe apagarse y prenderse indefinidamente.
Debe permanecer un segundo en cada estado.
Solucin: configurar el registro OPTION_REG en funcin al ejercicio propuesto y
establecer el retardo.
Si el cristal usado es
Retardo_T0_Pre= 4*Tosc*TMR0*Preescaler.
Retardo= 4*Tosc*TMR0*Preescaler*Bucle
Por tanto:
OPTION_REG = 1100 0110
list p=16f877
;Comando que indica el Pic usado
include "p16f877.inc" ;Etiquetas genricas para el Pic16F877
CONTA
EQU 0x20
;Variable CONTA en direccin 0x20 hexadecimal de
;memoria RAM
org 0x00
;Inicio del programa en la posicin cero de
;memoria
nop
;Libre (uso del debugger)
_inicio
bsf STATUS,RP0
;Ir banco 1
bcf STATUS,RP1
clrf
movlw
movwf
TRISB
;PORTB
salida
OPTION_REG
= 1100 0110
b'11000110
;Configuracin del modulo TMR0
OPTION_REG
;Preescaler = 128
bcf STATUS,RP0
bcf STATUS,RP1
clrf
_bucle
bsf
call
bcf
call
goto
PORTB
;Ir banco 0
;PORTB = 0
PORTB,0
_retardo ;Llama la rutina de retardo
PORTB,0
_retardo
_bucle
;Ir _bucle
Sub-rutina de retardo
_retardo
movlw
movwf
_espera1
clrf
movlw
movwf
_espera
btfss
goto
decfsz
goto
return
d'64'
CONTA
INTCON
d'134'
TMR0
;Deshabilitar interrupciones
;Cargar el valor de TMR0 para 122 cuentas
;(Complemento)
INTCON,T0IF
_espera
CONTA,F
_espera1
;retorno de call
END
Ejercicios:
Programar el TMR0 para generar un retardo de un segundo. A
partir del cual se incrementa un contador cuyo valor se muestra
por el PORTC.
Programar el TMR0 para generar un retardo de 500 ms. Cada
vez que concluya el tiempo se activar el PORTC de forma
escalonada.
Programar el TMR0 para generar un la palabra HOLA, letra por
letra, con un retardo de 0,25 segundos en un display de 7
segmentos conectado al PORTC
TIMER0 en C
La funcin para configurara el TMR0 es:
setup_timer_0 (mode)
Parameters:
mode may be one or two of the constants defined in the
devices .h file.
RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L
RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16,
RTCC_DIV_32,
RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256
PIC18XXX only: RTCC_OFF, RTCC_8_BIT
One constant may be used from each group or'ed together with the |
operator.
setup_timer_0 (RTCC_DIV_2|RTCC_EXT_L_TO_H);
TIMER0 en C
El compilador de C suministra una serie de funciones
para leer o escribir en el TIMER0.
// valor=entero de 8 bits.
// valor=entero de 8 bits.
TIMER0 en C
Ejemplo:
Utilizando la interrupcin del TMR0, generar una seal cuadrada de
1KHz
Solucin:
1 KHz tiene un periodo T= 1 ms, por tanto el tiempo alto de la seal
cuadrada ser de 0,5 ms o 500us. Si se usa un cristal de 4 MHz y un
prescaler de 2 se tiene la siguiente ecuacin de desbordamiento:
Retardo_T0_Pre= 4*Tosc*(256-TMR0)*Preescaler
500us=1us *(256-TMR0)*2
TMR0=6
TIMER0 en C
TMR1
TMR1
El TMR1 Tiene 16 bits distribuidos
registros, el TMR1L y el TMR1H.
en
dos
banco 0
usando el
T1CON.
Tiene
tres
Temporizador,
Asncrono.
formas
Contador
de
funcionamiento:
Sncrono y Contador
T1CON
0 0
Retardo=
4*Tosc*TMR1*Preescaler
Ejemplo:
si sabemos que el cristal es de 4 MHz,
el
pre-escalamiento es de 1 a 8 y usamos el TMR1
completo. Entonces el retardo es:
Retardo = 4 * 0.25us *65536*8= 0.524288 s
TIMER1 en C
La funcin para configurara el TMR1 es:
setup_timer_1 (mode)
Parameters:
mode values may be:
T1_DISABLED, T1_INTERNAL, T1_EXTERNAL,
T1_EXTERNAL_SYNC
T1_CLK_OUT
T1_DIV_BY_1, T1_DIV_BY_2, T1_DIV_BY_4, T1_DIV_BY_8
constants from different groups may be or'ed together with |.
setup_timer_1 ( T1_DISABLED );
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
TIMER1 en C
El compilador de C suministra una serie de funciones
para leer o escribir en el TIMER1.
// valor=entero de 16 bits.
// valor=entero de 16 bits.
TIMER1 en C
Ejemplo:
Utilizando la interrupcin del TMR1, para generar un retardo de 1
segundo
Solucin:
Se busca el periodo parcial de 0,5 s y se repite dos veces. Si se usa
un cristal de 4 MHz y un prescaler de 8 se tiene la siguiente
ecuacin de desbordamiento:
Retardo= 4*Tosc*(65536-TMR1)*Preescaler
0,5s=1us *(65536-TMR1)*8
TMR1=3036
TIMER1 en C
TMR2
0
1
movlw
movwf
0
1
0x4B
T2CON
TIMER2 en C
La funcin para configurara el TMR12es:
setup_timer_2
Parameters:(mode,period,postscale)
mode values may be: T2_DISABLED, T2_DIV_BY_1,
T2_DIV_BY_4, T2_DIV_BY_16
TIMER2 en C
El compilador de C suministra una serie de funciones
para leer o escribir en el TIMER2.
// valor=entero de 8 bits.
// valor=entero de 8 bits.
TIMER2 en C
Ejemplo:
Utilizando la interrupcin del TMR2, generar una seal cuadrada de
1KHz.
Solucin:
1 KHz tiene un periodo T= 1 ms, por tanto el tiempo alto de la seal
cuadrada ser de 0,5 ms o 500us. Si se usa un cristal de 4 MHz, un
prescaler de 4 y postscaler de 1 se tiene la siguiente ecuacin de
desbordamiento:
Retardo= 4Tosc*Preescaler *(PR2+1)*postscaler
500us=1us *4*(PR2+1)*1
PR2=124
TIMER2 en C
FIN