Nro.
LABORATORIO MICROCONTROLADORES
Página 1 de 8
MICROCONTROLADORES
LABORATORIO N° 10
Timer e Interrupciones
Participantes(s)
Foto:
Nova Rosas Arhuire Huamani Muñante Vega
Nombres:
Diego Yilbert Jorge
%
34 35 31
participación:
Grupo B
Ciclo 4C5 Electrónica y Automatización – Microcontroladores
Fecha de entrega 18/06/2021
Nro.
LABORATORIO MICROCONTROLADORES
Página 2 de 8
I. COMPETENCIAS ESPECÍFICAS DE LA SESIÓN
• Usar adecuadamente el software y las instrucciones del programa.
• Conocer el funcionamiento y la configuración del Timer 0.
• Programar el Módulo Timer 0 y aplicaciones prácticas.
II. CONTENIDOS A TRATAR
• Instrucciones, módulos internos del microcontrolador, entradas y salidas
• Configuración y utilización de módulo Timer 0.
III. MATERIALES Y EQUIPO
• CCS Compiler instalado.
• Entrenador de PICS
• PIC16F877A
• PC con Software de simulación.
IV. FUNDAMENTO TEÓRICO
• Para la realización de este laboratorio se requiere haber realizado y aprobado la EVALUACIÓN
DE LA FASE ASÍNCRONA
• La lectura previa de la información proporcionada para el curso, como el texto y el manual del
fabricante.
• Revise la bibliografía recomendada en la FASE ASÍNCRONA.
V. SEGURIDAD EN LA EJECUCIÓN DEL LABORATORIO
Tener cuidado con el tipo y niveles de voltaje con los
que trabaja.
Antes de utilizar el multímetro, asegurarse que está
en el rango y magnitud eléctrica adecuada.
Tener cuidado en la conexión y en la desconexión
de los equipos utilizados
Nro.
LABORATORIO MICROCONTROLADORES
Página 3 de 8
VI. EXPERIENCIA 1 – EXPERIENCIA # 1: GENERAR TEMPORIZADOR DE 1 SEGUNDO CON
TIMER 0
1. Vamos a realizar un programa que genere una interrupción por desbordamiento del Timer
cada segundo. La función de interrupción cambiará el estado de una salida conectada a un
Led y al mismo tiempo incrementará el valor de una variable. Este valor se mostrará en un
display LCD.
2. El código a utilizar se muestra en la imagen respectiva, además se hace un paralelo con su
respectivo PSEUDOCÓDIGO:
Directivas
Declaración de variables
Función de Interrupción por
Desbordamiento del Timer 0
Se incrementan las
centésimas, si llegan a 100
(un segundo), se cambia el
estado de la salida B1 y se
incrementa valor.
Se reinicia cuenta del Timer
0 desde el número 61
FUNCIÓN PRINCIPAL:
Se inicializa LCD
Se configura TIMER0 como
Temporizador y
PREESCALER de 256. Se
escribe 61 en Timer
Se habilita interrupción del
Timer y Global.
Se envía mensaje inicial
BUCLE INFINITO:
Se envía valor de variable a
pantalla LCD.
Nro.
LABORATORIO MICROCONTROLADORES
Página 4 de 8
3. Como EVIDENCIA, capturamos la pantalla de PROTEUS mostrando la ventana PIC CPU
Source Code: (incluir NOMBRES DE LOS INTEGRANTES).:
VII. EXPERIENCIA 2 – RELOJ MM:SS UTILIZANDO EL TIMER 0
1. Esta vez vamos a mostrar en la pantalla LCD un RELOJ de minutos – segundos, cuya
temporización de 1 segundo (base de tiempo) será generada por el Timer 0.
4. El código a utilizar se muestra en la imagen respectiva, además se hace un paralelo con su
respectivo PSEUDOCÓDIGO:
Nro.
LABORATORIO MICROCONTROLADORES
Página 5 de 8
(mismas Directivas anteriores)
Declaración de variables
FUNCIÓN INTERRUPCIÓN
TIMER0
Se incrementa centésimas
Si llega a 100 (1 segundo), se
incrementa segundos y se reinicia
centésimas en 0.
Si segundos llega a 60, se
incrementa minutos y se reinicia los
segundos.
Si se cumples 3 minutos con 10
segundos, se deshabilita Timer0 y
se activa PIN C5.
Se reinicia cuenta de Timer0 desde
61.
FUNCIÓN PRINCIPAL:
Inicialización de LCD
Se configura Timer 0 como
TEMPORIZADOR y con un
PREESCALER de 256.
Se inicia cuenta desde 61
Se habilita Interrupción de Timer 0
y la interrupción Global.
Se envía mensaje inicial
BUCLE INFINITO:
Mostramos minutos y segundos en
el LCD
5. Como EVIDENCIA, capturamos la pantalla de PROTEUS mostrando la ventana PIC CPU
Source Code: (incluir NOMBRES DE LOS INTEGRANTES).:
Nro.
LABORATORIO MICROCONTROLADORES
Página 6 de 8
VIII. RETO DE PROGRAMACIÓN:
1. A partir del código mostrado, realice los cambios necesarios para realizar un programa que
CUENTE EN FORMA DESCENDENTE, (temporizador regresivo), bajo las siguientes
condiciones:
• Al presionar pulsador en E0, incrementar MINUTOS. el temporizador aún no debe estar
contando el tiempo. (sirve para configurar tiempo de cuenta).
• Al presionar pulsador en E1, iniciar CUENTA REGRESIVA desde los minutos previamente
configurados.
• Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.
• Para verificar que una variable de tiempo (digamos “minutos”) llegó a cero, hacerlo con la
instrucción “if (minutos==-1)”
Video demostrativo: https://www.loom.com/share/e445a2ce645f40bb943bbe535ab23dd2
2. Como EVIDENCIA 1, grabe un video de su simulación en PROTEUS utilizando la aplicación
LOOM o YOUTUBE y coloque el LINK en el recuadro siguiente. En la simulación debe
visualizarse los nombres de los integrantes claramente. El video NO debe durar más de 2
minutos.
https://youtu.be/BJ1-HFBkLfc
3. Como EVIDENCIA 2, pegue en el recuadro siguiente el CÓDIGO EN MODO TEXTO:
//Integrantes:
//-Arhuire Huamani Yilbert
//-Muñante Vega Jorge
//-Nova Rosas Diego
Nro.
LABORATORIO MICROCONTROLADORES
Página 7 de 8
#include <16f877a.h> // Incluimos archivo con el PIC a utilizar
#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles
#INCLUDE <lcd.c> // Incluimos librería para manejar pantalla LCD
int centesimas=0;
int segundos=0;
int minutos=0 ;
#INT_TIMER0 // FUNCIÓN DE INTERRUPCIÓN POR
void TIMER (VOID) // DESBORDAMIENTO DEL TIMER 0
{
--centesimas; // disminuir centésima
if(centesimas==000)
{
--segundos; // si llegamos a 000 dismuir un segundo
centesimas=100;
}
if(segundos <1)
{
--minutos; // si llegamos a 0 disminuir un minuto
segundos=59;
}
if (minutos==-1 && segundos==59) // Si llegamos a 00:00 hacer alguna acción
{
minutos=0;
segundos=0;
disable_interrupts (INT_TIMER0); // habilita interrupción de timer0
output_high(PIN_C5); // agregar cualquier otra acción necesaria
delay_ms(600);
output_low(PIN_C5);
delay_ms(600);
output_high(PIN_C5);
delay_ms(600);
output_low(PIN_C5);
delay_ms(600);
output_high(PIN_C5);
delay_ms(600);
output_low(PIN_C5);
delay_ms(600);
}
set_timer0(61);
}
void main ()
{
lcd_init(); // Incializamos pantalla LCD
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // Configuración del timer0
set_timer0(61); //Reinicia cuenta desde 61
printf(lcd_putc,"\fTEMPORIZADOR..."); // Mostramos mensaje
WHILE (true)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Tiempo %02u:%02u hrs",minutos,segundos);
if(!input(PIN_E0)) // si presionamos E0
Nro.
LABORATORIO MICROCONTROLADORES
Página 8 de 8
{
++minutos; // incrementar minuto
delay_ms(500);
}
if (!input(PIN_E1)) // Si presionamos E1
{
enable_interrupts (INT_TIMER0); // habilita interrupción de timer0
enable_interrupts (GLOBAL); // todas las interrupciones activadas
}
}
}
IX. OBSERVACIONES Y CONCLUSIONES: (Deben estar convenientemente redactadas)
OBSERVACIONES:
• En la experiencia 1 se logró observar un temporizador de un timer0 de 1 segundo
donde un led cada segundo que transcurre se enciende y se apaga.
• En la experiencia 2 se pudo observar que se estableció un tiempo de 3 minutos y 10
segundos para que nuestro temporizador se detenga y realice una acción a través
del sonido de una alarma.
• Atraves del reto de programación se observó que el objetivo de dicha experiencia es
modificar lo visto en la experiencia 2 para obtener un temporizador en cuenta
descendente (cuenta regresiva).
• Se pudo observar que el timer 0 en modo temporizador la velocidad de cuenta
depende de la frecuencia del oscilador del PIC.
CONCLUSIONES:
• Podemos concluir en la experiencia 1, temporizador de 1 segundo con timer 0 que
fue importante tener claro que cuando la variable centésima llega a 100 ya se ha
transcurrido 1 segundo, a partir de ahí se logro realizar la acción de encendido y
apagado de un led cada segundo que transcurre.
• Podemos concluir de la experiencia 2, reloj de minutos y segundos utilizando un timer
0, que se puede trabajar con mas variables como horas, días, semanas, etc.
• En cuanto al reto de programación se concluye que a través de la programación y
funcionamiento realizado se deduce que esta aplicación es vista claramente en
nuestra vida cotidiana como por ejemplo al usar un horno microondas.
• De acuerdo a lo realizado se concluye que el timer 0 en modo temporizador su
velocidad de cuenta va depender mucho de la frecuencia del oscilador del PIC, en
este caso como ejemplo se hizo uso de 20Mhz para nuestras experiencias.