Semaforo Pic c

Semaforo+Interrupciones PIC16F84A Semáforo multífunción con PIC16F84A Empleando interrupciones. Autor: Luis Alberto Guij

Views 87 Downloads 2 File size 311KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Semaforo+Interrupciones PIC16F84A Semáforo multífunción con PIC16F84A Empleando interrupciones. Autor: Luis Alberto Guijarro Rodríguez

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: 

MPLAB



Traductor CCS del compilador PIC-C



Simulador ISIS del programa PROTEUS

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 de mostrará el proceso para capturar el programa del Semáforo, vincular el traductor y compilar. Primero se abre el programa MPLAB 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 002 003 004 005

#include //PIC a utilizar #fuses XT,NOWDT,NOPROTECT,NOPUT //ordenes para el programador #use delay (clock=4000000) //Se usaran retardos tomando en cuenta que la frecuenci //oscilador es de 4Mhz #use fast_io(a) //Rápida entrada y salida

006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052

int Modo=1, Temp=1, i=0;

//Declaración de variables del tipo entero

//Prototipo de la funcion que configurara los puertos void Config_Puertos(void); //Funciones de interrupciones #INT_EXT //Para la interrupción INT (RB0) void EXT_isr(void) { Modo++; if(Modo==3) { Modo=1; Temp=1; } } #INT_RB

//Para la interrupción RB (RB4)

void RB_isr(void) { if(input(PIN_B4)) { Temp++; } if(Modo==1 && Temp==3) { Temp=1; } if(Modo==2 && Temp==4) { Temp=1; } } ///Programa principal void main(void) { Config_Puertos();//Llamado a funcion while(true) { if(Modo==1)//Modo automatico { output_low(PIN_A2); //led verde off output_low(PIN_A1); //led amarillo off output_low(PIN_A0); //led rojo off if(Temp==1)//Temporizacion 1 { output_high(PIN_A2); //led verde on delay_ms(6000); output_low(PIN_A2); //led rojo off for(i=0;i