Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRÁCTICA Nº 6
TIMER 0 – COMO TEMPORIZADOR
1. INTRODUCCIÓN
Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. De hecho,
la mayoría de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar
pulsos de reloj cuentan los pulsos que llegan a un determinado pin
La mayoría de los microcontroladores tienen uno o varios timers, estos son muy útiles para
diferentes tareas como: medir el tiempo que ha pasado entre dos eventos, o también establecer
tareas para ejecutarse a intervalos regulares, y otros
Dependiendo del modelo, los PICs cuentan con un número variables de timers. El PIC 16F877A
estudiado en la materia cuenta con 3 tipos de timers:
Timer 0
Timer 1
Timer 2
Sin embargo en esta práctica nos abocaremos a estudiar al timer 0 (TMR0), los demás son muy
similares, aunque siempre es recomendable estudiar el manual correspondiente, por las tareas a
las que pueden estar asociadas
2. TIMER 0
Temporizador: cuenta los pulsos internos del reloj, con esto se puede obtener una señal
distinta de frecuencia distinta, a la frecuencia del oscilador empleado.
Asi mismo cuenta con un preescaler, este es un divisor de frecuencia que se puede programar
como 2, 4, 8 , 16, 32, 64, 128 o 256 (potencias de 2)
( )
A continuación se detallan las sentencias que se emplean en la programación del timer 0, por
lo cual se tiene:
SETUP_TIMER_0(MODO) SETUP_TIMER_0(MODO)
RTCC_INTERNAL RTCC_DIV_8
RTCC_EXT_L_TO_H RTCC_DIV_16
RTCC_EXT_H_TO_L RTCC_DIV_32
RTCC_DIV_1 RTCC_DIV_64
RTCC_DIV_2 RTCC_DIV_128
RTCC_DIV_4 RTCC_DIV_256
Setup_timer_0(rtcc_div_2 | rtcc_ext_l_to_h);
En este caso es necesario conocer la frecuencia que se desea para nuestra señal de pulsos. Por
lo cual en la relación:
( )
( )
[ ]
Dividimos el periodo del ciclo de trabajo T=0,5 ms, por el del periodo del ciclo de
maquina. Este último es la inversa de la frecuencia de oscilación dividido entre 4, es
decir: . Entonces se tiene:
Este valor obtenido de 500, nos indica que para obtener nuestro periodo de 0,5 ms, se
debe contar 500 pulsos de nuestra frecuencia del oscilador (ciclos de maquina), pero
como ya se indico el Timer 0 solo puede contar de 0 hasta 255.
Entonces el preescaler está para compensar este problema y al colocar:
el Timer 0 va a contar “1” cada dos pulsos de reloj, por tanto multiplicando 256*2 se
llega a 512, valor que si se podrá cargar. Asi mismo el preescaler puede tomar otros
valores como 8 por ejemplo, esto indicaria que el Timer 0 va contar “1” por cada 8
pulsos de reloj
( )
Con preescaler =2
( ) → ( )
→ →
3. MATERIALES
- Microcontrolador PIC 6f877a
- Resistencias, capacitores y oscilador de cristal que son parte del circuito del
microcontrolador
- Resistencias de protección de 330 Ω
- LCD de 2x16
- Sensor de temperatura LM35
PROGRAMA 1.
Terminado la interrupción, otra vez vuelve al loop infinito del programa principal y al
desbordarse otra vez llama a la interrupción negándose la entrada obteniendo así el otro estado,
y asi sucesivamente se obtendrán los pulsos del temporizador
PROGRAMA
#include <16f877a.h>
#fuses hs,nowdt
#use delay(clock=20M)
void main()
{
setup_timer_0(rtcc_internal|rtcc_div_2); //se configura el timer0 con pulsos inernos y preescaler=2
set_timer0(6); //cargamos al registro el valor hallado x=6
enable_interrupts(int_timer0);
enable_interrupts(global);
while(true)
{
//loop secuencia infinita
}
}
- En este programa la rutina principal es una secuencia de leds que se encienden y apagan
uno tras otro, la característica es que se puede variar la velocidad apretando un botón
externo
- Se usan dos fuentes de interrupción: la del “Timer0” y la interrupción externa; por lo
cual el programa debe identificar cual es la rutina adecuada para cada una de las
interrupciones, esto se logra comparando las banderas de cada interrupción.
- Adicionalmente las banderas deben ser borradas en Software para evitar falsos disparos
de rutina.
- En la etiqueta INICIO del programa, se coloca en 1 y en 0 a dos pines del Puerto B, pero
cada vez que hay interrupcion del timer, pondra en 0 al pin que estaba en 1 y en 1 al que
estaba en 0, de esa manera se crea una forma de onda y es complementaria por ser
simétrica una de la otra.
- Con la función de la interrupción externa se cambia la velocidad del conteo, esto se logra
cambiando el prescaler del Timer 0. Es decir presionando el SW se puede manipular
externamente la velocidad de la secuencia
HOJA DE LABORATORIO
Programa 1
Programa 2