Download - Ejemplo 03 - 16F84
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 1/17
Ejemplo Nº 3 Modelo PIC utilizado: 16F84
Este proyecto también puede ser desarrollado con los PIC: 16F6xx / 16F87x
Título Contador de eventos externos por interrupción.
Descripción Desarrollar un contador de eventos externos de 0 a 99 visualizando el estado de
la cuenta en 2 displays de 7 segmentos mediante un codificado CD4511. El esta-
do de la cuenta de incrementa al presionar un pulsador. La pulsación se detecta
mediante la interrupción por RB0.
Objetivo Mostrar la manera de detectar eventos externos mediante la interrupción por RB0.
Procedimiento Iniciar el contador a 0. Configurar la interrupción por RB0 para detectar cada vez
que se presione un pulsador. Luego, el micro de dedica a mostrar el estado actual
de la cuenta . Al producirse una interrupción por RB0, se incrementa el estado de
la cuenta y se actualiza el valor a mostrar en los displays.
Módulos utilizados Configuración de puerto.
Configuración de interrupciones.
Asignación d e registro, Evaluación de registro
Conversión a BCD y visualización en display de 7 segmentos con codificador
Desarrollo del ejemplo
Comience creando un nue-
vo proyecto.
Una vez generado un nuevo
proyecto, comenzamos decla-
rando registros que vamos a
utilizar.
Para eso debemos ir al menú “Declaración/Registros” como se
muestra en la imagen a la derecha.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 2/17
Para declarar un registro haga doble clic sobre
uno de los registros de Usuario (de color verde). Es-
tos registros son los que Ud. puede utilizar para
guardar los datos que se requieran en el proyecto.
Declare un registro llamado “contador ”.
A continuación vamos a configurar el puerto B.
Para esto ingrese al árbol de herramientas como se
muestra en la siguiente imagen.
Se presenta la pantalla de configuración del puerto B.
Los pines B1 al B7 los
uti lizaremos para visuali-
zar los datos en los dis-
plays de 7 segmentos.
Por esto, configure estos
pines como “Salida”. El
pin RB0 lo utilizaremos
para detectar cuando se
presiona el pulsador por
medio de la interrupción
RB0. Por esto, configure
el pin RB0 como “Entra-
da”.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 3/17
El diagrama de flujo debería verse como la siguiente imagen.
A continuación vamos a inicializar el registro “contador” en 0.
Para esto ingrese al árbol de herramientas como se muestra en la im agen
de la derecha.
Se presenta la pantalla “Asignar un valor a un registro”.
Asigne el valor literal decimal “0” al registro “contador” como lo muestra la
imagen siguiente.
Hasta ahora el diagrama debe verse como la siguiente imagen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 4/17
El siguiente paso consiste en visualizar el estado de la cuenta en los
displays de 7 segmentos.
Para esto, es necesario primero convertir el valor del contador a form a-
to BCD, es decir que debemos descomponer el valor de la cuenta en Uni-
dades y Decenas para luego mostrar cada valor en el display correspo n-
diente.
Para mayor información sobre visualización de datos en displays de 7
segmentos consulte el Anexo1- “Visualización de datos en displays de 7
segmentos”.
Para convertir un valor a BCD ingrese al menú como se muestra en la
imagen de la derecha:
Se presenta la pantalla “convertir registro a BCD”.
Primero seleccione el registro que desea convertir a BCD. En este caso, el registro Contador.
Luego debe seleccionar los registros donde guardar el resultado de la conversión. Como aún no hemos
declarado los registros, presione el botón “nuevo” correspondiente a las unidades. Se presenta la pantalla
de declaración de registros y declaramos el
registro “Unidad”.
Al volver de la pantalla de declaración de
registros, el registro recién declarado ha sido
seleccionado en la lista automáticamente.
Proceda de la misma manera para el re-
gistro “Decena”.
Dado que nuestro proyecto sólo cuenta
hasta 99, el valor de las centenas no es ne-
cesario declararlo. El diagrama de flujo debe
verse como la imagen de la derecha.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 5/17
Para obtener mayor información sobre las interrupciones consulte el anexo “Interrupciones”.
A continuación vamos a configurar la interrupción por RB0.
Para esto ingrese el árbol de herramientas como se muestra en la
imagen de la derecha.
Se presenta la pantalla de configuración de interrupciones.
Seleccione la opción “Interrupción por RB0” y configure la interrupción por “flanco descendente”.
De esta manera la interrupción solo se produce cada vez que el pin RB0 pasa de estado alto a estado
bajo. Entonces el pulsador debe estar asegurado mediante una resistencia a 5V y al pulsarlo lo conectamos
directamente a masa. Así, al presionar el pulsador estamos enviando un nivel bajo al pin RB0, lo cual gene-
ra la interrupción.
El diagrama de flujo debería quedar como la siguiente imagen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 6/17
Una vez configurada la interrupción por RB0, la misma debe ser activada.
Para esto ingrese al árbol de herramientas como se muestra en la imagen
de la derecha.
Se presenta la pantalla “Activar – Desactivar Interrupciones”.
Active la interrupción por cambio de flanco del pin RB0 y el GIE como se
muestra en la siguiente imagen.
Hasta ahora el diagrama de flujo debe verse como la siguiente imagen.
Una vez que ha sido configurada y activada la interrupción por RB0, procedemos a insertar el “entorno
de la interrupción”.
Dentro del entorno de interrupción vamos a programar lo queremos que el micro ejecute cada vez que se
produzca la interrupción.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 7/17
Para insertar el entorno de la interrupción ingrese al árbol de herra-
mientas como se muestra en la imagen de la derecha .
Al insertar un entorno de interrupción se genera un diagrama de flujo
nuevo dentro del cual vamos a diseñar el programa de la interrupción.
Dentro del explorador de proyecto se agrega el entorno de la inte-
rrupción, es decir, el diagrama de flujo correspondiente a la interrupción.
En el nuevo diagrama de flujo correspondiente a la interrupción, se insertan 2 bloques de manera auto-
mática. El primero corresponde al “Inicio de la interrupción” y el segundo bloque desactiva el GIE (Habilita-
dor general de interrupciones).
La metodología de programación dentro del entorno de interrupción es
la misma que para el resto del programa, con la diferencia que las interrup-
ciones (al igual que las rutinas), deben tener al menos un bloque de “Sali-
da” llamado “Fin de interrupción”.
En este proyecto vamos a utilizar la interrupción por RB0 para detectar
en momento en que se presiona el pulsador. Entonces, una vez que el mi-
crocontrolador se interrumpe lo que debemos hacer es incrementar el esta-
do de la cuenta.
Para esto ingrese al árbol de herramientas como se muestra en la ima-
gen de la d erecha.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 8/17
El campo “sintaxis” presenta la manera de interpretar los datos solicitados. En el campo “Sumando 1” se-
leccione el registro contador y en el campo “Sumando 2” seleccione la opción “un literal”, formato decimal,
valor “1”. Por último, seleccione el registro donde desea guardar el resultado del cálculo, en este caso, se-
leccione la opción “en otro registro”, registro “Contador”.
El diagrama de flujo el cual debería quedar como lo muestra la siguiente imagen.
Dado que el presente proyecto sólo cuenta hasta 99, una vez realizado el
incremento del registro contador, debemos controlar que el valor del mismo
no supere el número 99. Esto lo hacemos comparando el registro con el valor
literal (constante) 99 y reiniciar la cuenta a 0 cuando el registro sea mayor a
99.
Para comparar el valor del registro utilizamos el bloque de “comparación
de registro a 8 bits” ingresando al árbol de herramientas como se muestra en
la imagen de la derecha.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 9/17
Se presenta la pantalla “Evaluar un registro”.
El registro a evaluar es el registro “Contador”, el operador de comparación es “>” y el valor de compara-
ción es de tipo “Literal”, “Decimal” y valor “99”. En la siguiente imagen se muestran los datos seleccionados.
Al insertar el bloque, el diagrama de flujo debe verse como la siguiente imagen.
El bloque que acabamos de inser-
tar puede interpretase como la for-
mulación de la siguiente pregunta:
¿El registro “Contador”, es
mayor que el valor decimal 99?
Y como todo bloque de compar a-
ción, debe tener 2 salidas; una para
el “SI” y otra para el “NO”.
El primer bloque insertado a con-
tinuación de éste, corresponde a la
salida del “SI” y el segundo a la sali-
da del “NO”.
Entonces, si el registro contador es mayor que 99, debemos reiniciar la cuenta a 0. Esto se realiza asig-
nando el valor “0” al registro “Contador”.
Para esto utilizamos el módulo de “Asignar un valor a un Registro” del mismo modo que explicamos al
inicio del ejemplo.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 10/17
El diagrama de flujo debe verse como la siguiente imagen.
El siguiente paso consiste en actualizar los datos a visualizar el dato en los displays de 7 segmentos.
Para esto, vamos a convertir el valor del contador a formato BCD, es decir que debemos descomponer el
valor de la cuenta en Unidades y Decenas para luego mostrar cada valor en el display correspondiente.
Realice el mismo procedimiento que realizó para la conversión a BCD en el programa principal al co-
mienzo del ejercicio.
El diagrama de flujo debe verse como la siguiente imagen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 11/17
Ahora vamos a completar la salida del
“NO” correspondiente al bloque de evalua-
ción de registro.
Para esto, genere un vínculo (flecha) en-
tre el bloque desde el bloque de evaluación
de registro hasta el bloque de conversión a
BCD. Esto significa que cuando el valor del
registro contador sea menor que 99, se pasa
directamente a realizar la conversión a BCD
y no reinicia la cuenta.
La imagen de la derecha muestra como
debe quedar el diagrama de flujo.
Para terminar con el programa de la inte-
rrupción, debemos insertar el “retorno de in-
terrupción”. Es decir, el bloque que indica
que la interrupción ha finalizado y el micro-
controlador debe retomar la tarea cancela al
producirse la interrupción.
Toda inte rrupción debe tener al menos un
bloque de “fin de interrupción”.
Para esto ingrese al árbol de herramien-
tas como lo muestra la siguiente imagen.
El diagrama de flujo completo de la inte-
rrupción de verse como la imagen de la de-
recha.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 12/17
Una vez terminado el programa de la interrupción. Volvemos al Programa Principal.
Ya hemos configurado el puerto B, inicializado el registro contador y configurado y activado la interrup-
ción por RB0 .
Ahora debemos programar el microcontrolador para que se “quede mostrando” el estado de la cuenta de
manera permanente, ya que el incremento se realiza dentro de la interrupción.
Para mayor información sobre visualización de datos en displays de 7 segmentos consulte el Anexo1-
“Visualización de datos en displays de 7 segmentos”.
Ingrese al árbol de herramientas como se muestra en la imagen de la de-
recha:
Se presenta la pantalla de visualización de displays de 7 segmentos con
codificador CD4511.
Primero debe seleccionar el tipo de display a utilizar. El CD4511 es un codificador para displays tipo cá-
todo común, por esto seleccionamos este tipo de display.
Luego debe seleccionar la cantidad de dígitos a utilizar, en este caso seleccione 2 dígitos.
Al seleccionar la cantidad de dígitos a utilizar, se muestra un mensaje que le indica como seleccionar los
valores de mostrar en cada display.
El proceso de visualización de datos en los displays consiste en enviar el valor de las unidades, habilitar
el display correspondiente a las unidades y apagar el display de las decenas, mantener el display de las
unidades encendido durante un breve periodo de tiempo (algunos microsegundos), luego se apaga el dis-
play correspondiente a las unidades y se envía el dato correspondiente a la decenas, se habilita el display
de las decenas y se mantiene encendido durante algunos microsegundos.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 13/17
Este proceso debe repetirse muchas veces y se produce a gran velocidad. De esta manera se genera la
ilusión óptica de estar visualizando un único valor representado por los 2 dígitos.
El campo “repeticiones” contiene la cantidad de veces que el proceso de multiplexado se repite. El valor
por defecto es de 1000 repeticiones. Si el valor de las repeticiones aumenta, mayor será el tiempo que el
micro permanecerá “mostrando” el dato antes de seguir con la ejecución del resto del programa.
Ingrese el valor 10 en el campo “Cantidad de repeticiones”.
Luego debe seleccionar el valor a visualizar en cada display. Esto se realiza haciendo un doble clic sobre
cada imagen de display.
Se presenta la pantalla “Mostrar
un valor en un display”.
Seleccione el registro “Unidad”.
Recordemos que este registro con-
tiene el valor de las unidades del es-
tado actual de la cuenta calculado
mediante el bloque de conversión a
BCD.
Proceda del mismo modo para el
registro de las decenas.
Una vez seleccionados los datos a visualizar en cada display, se debe seleccionar el pin por el cual des-
ea habilitar e inhabilitar cada display para realizar el multiplexado.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 14/17
Esto se realiza seleccionando el Pin correspondiente en cada una de las listas desplegables que se pre-
sentan debajo de cada uno de los displays.
Observe que Niple solo presenta en las listas los pines que están configurados como “Salida”. De esta
manera se evitan los errores por seleccionar pines configurados como “Entrada” o no configurados.
Seleccione los
pines B3 y B2 para
las unidades y las
decenas respecti -
vamente.
Por último, debe
seleccionar los pi-
nes correspondien-
te al bus de datos
por el cual se envía
el dato a visualizar
al codificador
CD4511.
Para este ejemplo seleccione los pines B4 al B7 como lo muestra la siguiente imagen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 15/17
Por último puede consultar e imprimir el esquema de conexión de la configuración que ha seleccionado.
El diagrama de flujo el cual debe verse como lo muestra la siguiente imagen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 16/17
Para terminar y dado que el micro se quedará “mostrando los datos” de manera permanente, insertamos
un bloque “NOP” para poder cerrar el ciclo con el bloque de visualización de datos en display de 7 segmen-
tos. Ingrese al árbol de herramientas a como se muestra en la siguiente imagen.
Inserte un bloque NOP y cierre el ciclo con el bloque de visualización de datos en displays de 7 segmen-
tos mediante un vínculo (flecha).
El diagrama de flujo completo del programa principal debe verse como se muestra en la siguiente ima-
gen.
Niple para PIC 16F84 v3 - Programación Visual de Microcontroladores
Niple 16F84 – Ejemplo 3 - Contador de eventos externos por interrupción. Página 17/17
La estructura general y el modo de funcionamiento del proyecto es el siguiente.
Esquema electrónico