You are on page 1of 10

UNIVERSIDAD NACIONAL

PEDRO RUIZ GALLO


Facultad de Ciencias Físicas y
Matemáticas.

Escuela profesional de Ingeniería en


Computación e Informática.
TRABAJO DE MICROPROCESADORES
SEMAFORO CON PIC 16F84A
INTEGRANTES:
ESPINOZA MONDRAGON, CARLOS
SALAZAR REYES, FLAVIO ENRIQUE
SANTAMARIA FERNANDEZ, JOSÉ LENNIN

DOCENTE:
AGUILAR ÑAÑEZ, JUAN
SEMESTRE:
2017 – II
FECHA:
22 NOVIEMBRE DEL 2017

LAMBAYEQUE – PERÚ
Semáforo multífunción con PIC16F84A
Empleando interrupciones.
Descripción.
En el siguiente tutorial se mostrara como elaborar el firmware para un
Semáforo multifunción empleando el PIC16F84A. Si bien un Semáforo puede
parecer algo simple la ventaja del código es que se emplearan las interrupciones
del microcontrolador, en este caso la interrupción externa (INT) que se localiza en
el bit RB0 del puerto B y también se utilizará una interrupción por cambio de nivel
(RB), en este caso la que se localiza en el bit RB4.
Dicho firmware se realizara en lenguaje C con el programa MPLAB y el traductor
CCS. Además se mostrara la simulación del funcionamiento del Semáforo a través
del programa ISIS de Proteus.
Inicialmente vamos a indicar cuales serán las funciones que realizara el
microcontrolador para el funcionamiento del Semáforo dependiendo de en que
modo de operación se encuentre y que botón se presione.
A.- Cuando se presione el botón de “reset” el PIC se reiniciara a su estado inicial
de funcionamiento automático y ejecutando la función 1 del Semáforo.
B.- En el modo automático el Semáforo funcionara como su nombre lo indica, de
forma automática, con cierta duración de encendido en cada color del Semáforo, en
este caso, dos secuencias de tiempo distintas y para cambiar de una a otra se
deberá presionar el botón de “Temporización”. Las dos diferentes secuencias se
describen a continuación.
I.- La secuencia 1 será la secuencia inicial, es decir, la que el microcontrolador
ejecutara una vez encendido el circuito: la luz verde quedara encendida 6 segundos,
5 parpadeos de un segundo en la luz amarilla y por último la luz roja quedara
encendida por 4 segundos. Esta secuencia se repetirá mientras no se oprima el
botón de “Temporización”.
II.- Al oprimir el botón de “Temporización” el Semaforo pasara a la secuencia 2: la
luz verde encendida 4 segundos, 4 parpadeos de un segundo en la luz amarilla y
finalmente la luz roja encendida 6 segundos. De igual forma a la secuencia anterior
esta se repetirá mientras no se presione de nuevo el botón de “Temporización”, de
lo contrario regresara a la secuencia 1.
C.- Si se presiona el botón “Auto/Manual” mientras se está en el modo automático
el Semáforo pasara al modo manual en el que cada luz (verde, amarillo y rojo)
permanecerá encendida por tiempo indefinido y cambiara hasta que se presione el
botón de temporización, pasando de la verde a la amarilla (con parpadeo), de la
amarilla a la roja y finalmente regresará de la roja a la verde.
D.- Si se oprime de nuevo el botón “Auto/Manual” el semáforo pasara del modo
manual al modo automático ejecutando la función 1.

Materiales.
En este caso a falta de un micro controlador que se emplea en dicho tutorial para la
elaboración del Semáforo, solo se hará la simulación, para ello vamos a necesitar
los siguientes programas:
 Traductor CCS del compilador PIC-C
 PICKIT 2

Introducción.
El micro controlador PIC16F84A cuenta con dos puertos, el puerto A de 5 bit (RA0-
RA4) y el puerto B de 8 bits (RB0-RB7), los cuales pueden ser programados como
entradas o como salidas, o inclusive programar algunos bits de un puerto como
entrada y el resto de bits de ese mismo puerto como salidas. Para llevar a cabo
dicha programación de puertos se requiere estipularlo en el registro del puerto que
se desea programar.
Otra característica de este microcontrolador es que cuenta con una entrada de
interrupción externa y con entradas de interrupción por cambio de nivel.
A continuación se muestran dos tablas, la primera con la descripción del puerto B
y la segunda con los registros asociados a este, ambas tablas obtenidas de la
datasheet del microcontrolador.
Tabla 1 de descripion

Tabla 2 de descripcion

Procedimiento.
A continuación se mostrará el proceso para capturar el programa del Semáforo,
vincular el traductor y compilar.
Primero se abre el programa PIC COMPILER y se abre una nueva página del editor
de textos en Menú Principal -> FILE -> NEW, en esta página en blanco
capturaremos el siguiente código el cual cuenta con comentarios que lo describen.
?
001 #include <16f84a.h> //PIC a utilizar
#fuses XT,NOWDT,NOPROTECT,NOPUT //ordenes para el programador
002 #use delay (clock=4000000) //Se usaran retardos tomando en cuenta que la frecuenci
003 //oscilador es de 4Mhz
004 #use fast_io(a) //Rápida entrada y salida
005
006
007 int Modo=1, Temp=1, i=0; //Declaración de variables del tipo entero
008
009 //Prototipo de la funcion que configurara los puertos
void Config_Puertos(void);
010 //Funciones de interrupciones
011 #INT_EXT //Para la interrupción INT (RB0)
012 void EXT_isr(void)
013 {
Modo++;
014 if(Modo==3)
015 {
016 Modo=1;
017 Temp=1;
018 }
}
019
020 #INT_RB //Para la interrupción RB (RB4)
021
022 void RB_isr(void)
023 {
024 if(input(PIN_B4))
{
025 Temp++;
026 }
027 if(Modo==1 && Temp==3)
028 {
029 Temp=1;
}
030 if(Modo==2 && Temp==4)
031 {
032 Temp=1;
033 }
034 }
///Programa principal
035
036 void main(void)
037 {
038 Config_Puertos();//Llamado a funcion
039 while(true)
{
040 if(Modo==1)//Modo automatico
041 {
042 output_low(PIN_A2); //led verde off
043 output_low(PIN_A1); //led amarillo off
044 output_low(PIN_A0); //led rojo off
if(Temp==1)//Temporizacion 1
045 {
046 output_high(PIN_A2); //led verde on
047 delay_ms(6000);
048 output_low(PIN_A2); //led rojo off
for(i=0;i<=4;i++)
049 {
050 output_high(PIN_A1); //led amarillo on
051 delay_ms(500);
052 output_low(PIN_A1); //led amarillo off
053 delay_ms(500);
054 }
055 output_high(PIN_A0);//lrd rojo on
delay_ms(4000);
056 output_low(PIN_A0); //led rojo off
057 }
058 if(Temp==2)//Temporizacion 2
059 {
output_high(PIN_A2); //led verde on
060 delay_ms(4000);
061 output_low(PIN_A2); //led rojo off
062 for(i=0;i<=3;i++)
063 {
064 output_high(PIN_A1); //led amarillo on
delay_ms(500);
065 output_low(PIN_A1); //led amarillo off
066 delay_ms(500);
067 }
068 output_high(PIN_A0);//lrd rojo on
delay_ms(6000);
069 output_low(PIN_A0); //led rojo off
070 }
071 }
072 if(Modo==2)//Modo manual
073 {
while(Temp==1)
074 {
075 output_high(PIN_A2); //led verde on
076 output_low(PIN_A1); //led amarillo off
077 output_low(PIN_A0); //led rojo off
078 }
while(Temp==2)
079 {
080 output_low(PIN_A2); //led verde off
081 output_high(PIN_A1); //led amarillo on
082 delay_ms(500);
output_low(PIN_A1); //led amarillo off
083 delay_ms(500);
084 output_low(PIN_A0); //led rojo off
085 }
086 while(Temp==3)
087 {
output_low(PIN_A2); //led verde off
088 output_low(PIN_A1); //led amarillo off
089 output_high(PIN_A0); //led rojo on
090 }
091 }
} //bucle infinito
092 }
093
094 void Config_Puertos(void)
095 {
096 set_tris_A(0xF8); //portA como salidas(RA0, RA1 y RA2 ,las demas desactivadas)
097 set_tris_B(0xFF);
enable_interrupts(GLOBAL); //todas las interrupciones activadas
098 enable_interrupts(INT_EXT);//Habilitando interrupcion externa (RB0)
099 enable_interrupts(INT_RB);//Habilitando interrupciones de cambio de nivel (RB4-RB7
100 ext_int_edge(H_TO_L);//Seleccionando flanco de interrupcion externa
101 output_low(PIN_A2); //led verde off
102 output_low(PIN_A1); //led amarillo off
output_low(PIN_A0); //led rojo off
103 Modo=1;
104 Temp=1;
105 }
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

Una vez capturado el código se guarda de la siguiente forma FileàSave As… y se


nombra el archivo y se selecciona la carpeta en que se va a guardar, este archivo
tendrá una extensión .c.
A continuación se va a construir el proyecto. PIC C COMPILER es una plataforma
de programa en la cual se puede realizar desde la edición del código de programa,
las compilación del programa, la simulación del programa y la programación del
microcontrolador, todo ello sin necesidad de recurrir a otro programa, para utilizar
todas las herramientas con las que cuenta PIC C COMPILER es necesario la
creación de un Proyecto en el cual se vinculen las diferentes herramientas a
manejar, los pasos a seguir en la creación de un proyecto son los siguientes:
Desde el menú principal se selecciona ProjectàProject Wizard…,. De forma casi
instantánea aparecerá la ventana de bienvenida del ayudante Project Wizard de PIC
COMPILER, de forma general son cuatro pasos a seguir en la creación de un
proyecto.
Paso 1.- Se presiona Next y la ventana cambiara a una en la que tenemos que
elegir el microcontrolador que se va a emplear, en este caso DeviceàPIC16F84A, y
damos clic en Next.
Paso 2.- Seleccionar el compilador a usar (language toolsuit). En la nueva ventana
se deben configurar los siguientes aspectos:
a) En el recuadro Active Toolsuit se debe seleccionar CCS C Compliler.
b) En el recuadro Toolsuit Contents se debe cerciorar que cada programa tenga
su ruta correctamente direccionada a la carpeta PICC correspondiente, en nuestro
caso solo será la siguiente.

Toolsuit Contents Location


CCS C Compiler (ccsc.exe) C:\Program Files\Picc\CCSC.exe

Una vez terminado este paso damos clic en Next.


Paso 3.- En la nueva ventana que aparece se debe ingresar el nombre con el que
se desea nombrar al proyecto y la dirección donde se va a guardar dicho proyecto.
Una vez hecho esto se da clic en Next.
Paso 4.- En la nueva ventana, del lado izquierdo se deben de buscar dos archivos
a) El archivo con la extensión .c del código que capturamos previamente.
b) Un archivo con extensión .h que se localiza en C: \Program
Files\PICC\Devices\16F84A.h
Incorporados los dos archivos se da clic en Next.
A continuación aparece una ventana indicando las propiedades del nuevo proyecto
que se está creando, si se comprobó que todo está correcto se da clic en Finish.
Si los pasos se realizaron correctamente aparecerá la ventana Project con el
nombre que se le dio al proyecto, esta contiene los archivos .c y .h que
seleccionamos.
Ahora procederemos a configurar las opciones del proyecto (Build Options). Antes
de iniciar con la compilación y simulación, es necesario verificar que el compilador
CCS C Compiler (nuestro traductor) se encuentre correctamente configurado, para
ello se realiza lo siguiente, Menú PincipalàProjectàBuild OptionsàProject. Al hacer
esto aparecerá una nueva ventana de configuración, en esta seleccionaremos la
pestaña General. Al seleccionar esta pestaña aparecen una serie de recuadros, solo
tendremos que configurar el recuadro de Include Search Path ingresando en este la
ruta C:\Program Files\PICC\Devices. Una vez hecho esto se da clic en OK.
El último paso en MPLAB es compilar el proyecto, esto se hace de la siguiente
forma, Menú PrincipalàProjectàBuild All. Si todo se realizó correctamente y no hay
errores en el código, la compilación del proyecto se llevará a cabo correctamente
son errores.
Simulación.
Para llevar a cabo la simulación del funcionamiento del Semáforo y verificar que el
programa funcione como lo deseamos primero es necesario construir el circuito
que se muestra a continuación en el programa ISIS de PROTEUS.

Semáforo con PIC16F84A empleando interrupciones.

Diagrama de simulación del Semáforo

Se debe recordar que el cristal es de una frecuencia de 4MHz. Una vez construido
el circuito se va cargar el archivo de programa que simulara el microcontrolador.
Esto se hace dando doble clic en el microcontrolador y en la opción Program File se
selecciona el archivo .hex que estará ubicado en la dirección en la que se creó el
proyecto en PIC C COMPILER, este archivo tendrá el mismo nombre que el
proyecto pero con una terminación .hex. De igual forma en la opción Processor
Clock Frecuency escribiremos 4MHz. Una vez hecho esto damos clic en OK.
Ahora se puede proceder a dar Play a la simulación, esto se hace dando clic en el
botón Play ubicado en la parte inferior izquierda de la ventana de ISIS de
PROTEUS.
Si todo está correcto el circuito debe funcionar de la misma forma en que se
describió al principio.
Cabe mencionar que la interrupción, como su nombre lo indica, interrumpe a la
función que se esté ejecutando, pero que una vez que se sale de la interrupción se
regresa al punto de la función que interrumpió, por lo que se debe de esperar a que
termine esa secuencia para ver el cambio que provoco la interrupción, en este caso
los tiempo de encendido de cada luz del Semáforo.

You might also like