LABORATORIO NR°7
Manejo del Timer y las Interrupciones
- Conocer el funcionamiento y la configuración de las interrupciones.
- Conocer el funcionamiento y la configuración del Timer cero.
- Aplicar estos conocimientos en la realización de un cronometro.
II.MARCO TEÓRICO:
TIMER:
VÍDEO
TIMER:
El timer es un objeto de programación tiene como funcionalidad ejecutar una función o bloque de código cada cierto tiempo. Esto tiene muchas aplicaciones ya que no depende de la acción por parte de usuario para ejecutar cierto código. Por ejemplo podemos hacer que nuestro programa cheque una tabla de una base de datos y muestre la información actualizada en pantalla cada minuto. También se puede hacer que cuente tiempo.
También es un dispositivo, con frecuencia programable, que permite medir el tiempo. Cuando trascurre el tiempo configurado se hace saltar una alarma o alguna otra función a modo de advertencia, al igual es un elemento que ofrece la posibilidad de usar cualquier dispositivo eléctrico de forma programada, activarlo y desactivarlo a las horas que queremos, sin necesidad de estar presentes. Es una buena forma de ahorrar con un aparato como un termo eléctrico, por ejemplo.
TAREA A RESOLVER :
- Al presionar pulsador en D0, incrementar SEGUNDOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).
- Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
- Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.
PROGRAMACIÓN :
#include <16f877a.h> // Incluimos archivo con PIC a utilizar
#device adc=8 // Utilizamos 8 bits de RESOLUCIÓN de lectura
#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles
#define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c> // Incluimos librería para manejar Pantalla LCD
int centesimas=0,segundos=0,minutos=0;
void BIP();
int encendido =0;
#int_TIMER0 // FUNCION DE INTERRUPCION POR
void TIMER(VOID) // DESBORDAMIENTO DEL TIMER 0
{
++centesimas; // incrementar una centésima
if (centesimas>99)
{
--segundos; // si llegamos a 100, incrementar un segundo
centesimas=0;
}
if (segundos==-1)
{
--minutos; // si llegamos a 60, incrementar un minuto
segundos=59;
}
if (segundos==0) // si llegamos a 3 minutos, hacer alguna acción
{
segundos=0;
disable_interrupts (GLOBAL); //habilita interrupcion de timer0
// agregar cualquier otra acción necesaria.
}
set_timer0 (61); //reinicar cuenta desde 61
}
void main ()
{
lcd_init () ; // Inicializamos pantalla LCD
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //configuracion del timer0
set_timer0 (61); // interrupción cada centésima
enable_interrupts (INT_TIMER0); //habilita interrupcion de timer0
disable_interrupts (GLOBAL);
printf (lcd_putc, "\f***CRONOMETRO***") ; // Mandamos mensaje por única vez
WHILE (true)
{
lcd_gotoxy(2,2);
Printf(lcd_putc,"Tiempo %02u:%02u",minutos, segundos);
IF (!input(PIN_D0))
{
delay_ms(500);
minutos= ++ minutos;
segundos=0;
disable_interrupts (GLOBAL);
}
IF (!input(PIN_D1))
{
delay_ms(500);
segundos= --segundos;
enable_interrupts (GLOBAL);
segundos=0;
encendido =1;
}
IF (minutos==0 && segundos==0 && encendido==1 )
{
minutos=0;
segundos=0;
encendido=0;
disable_interrupts (GLOBAL);
}
}
}
CONCLUSIONES
- Se concluye que los Timer para los PICs tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones.
- El registro TMR0 del timer0 en el PIC está formado por 8 bits por lo que se puede contar desde 0 hasta 255.
- El circuito utilizado para el ejemplo del uso del Timer como contador.
Revisado. Falta video y otros.
ResponderEliminar