Está en la página 1de 4

MPLAB X Y C18 - ENCENDER Y APAGAR UN LED CON UN BOTON

Seguimos con las publicaciones en C18, en ejemplos anteriores hemos visto la manera de manipular un puerto como salida ahora toca el turno de ver como se manipula un pin como salida, para ello tenemos un botn conecto al pin RE0 con su resistencia de pull-down tambin se ha colocado un LED con su debida resistencia en el pin RE1 y se agrego una resistencia a +5V en el pin MCLR par que el circuito funcione correctamente. As queda el circuito que utilizaremos:

Lo que har el circuito ser encender o apagar el LED cada que se presione el botn. Para el cdigo tenemos dos archivos el Config_FusesPIC.h y el main.c, como ya sabemos en el primero tenemos la configuracin de todos los FUSES del PIC, el segundo es el archivo donde esta todo el cdigo para que el circuito trabaje adecuadamente. Es importante recordar que se ocupara el oscilador interno configurado a 4MHz.

1 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

La configuracin de los FUSES queda de la siguiente manera: Config_FusesPIC.h


#ifndef CONFIG_FUSESPIC_H #define CONFIG_FUSESPIC_H #pragma config OSC = INTIO67 //Uso del oscilador interno #pragma config FCMEN = ON #pragma config IESO = OFF #pragma config PWRT = ON #pragma config BOREN = OFF #pragma config WDT = OFF #pragma config MCLRE = ON #pragma config LVP = OFF #pragma config XINST = OFF #pragma config DEBUG = OFF #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT3 = OFF #pragma config WRTC = OFF #pragma config WRTB = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF #pragma config EBTRB = OFF #endif /* CONFIG_FUSESPIC_H */

2 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

Ahora nuestro cdigo en el archivo main.c nos queda de la siguiente forma: main.c
#include <p18f4620.h> #include <stdio.h> #include <stdlib.h> #include <delays.h> #include "Config_FusesPIC.h"//Configuracin de FUSES #define BUTTON PORTEbits.RE0 #define BUTTON_TRIS TRISEbits.RE0 #define LED_STATUS PORTEbits.RE1 #define LED_STATUS_TRIS TRISEbits.RE1 void main(void){ //Configura oscilador interno a 4MHz OSCCONbits.IRCF2=1; OSCCONbits.IRCF1=1; OSCCONbits.IRCF0=0; ADCON1=0xFF;//Entradas y salidas digitales //Configuracin de Entradas/Salida BUTTON_TRIS=1;//Pin del boton como entrada LED_STATUS_TRIS=0;//Pin del LED como salida //Se inicializn los puertos en cero BUTTON=0; LED_STATUS=0; while(1){ if (BUTTON==1){ Delay1KTCYx(50);//Retardo de 50 mS LED_STATUS^=1; } } }

3 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

Parte del cdigo ya se conoce por que se ha utilizado en ejemplos anteriores lo nuevo en este ejemplo es el uso de etiquetas. Tanto para referirse a un PORT como a un TRIS, el uso de etiquetas facilita el acceso a dichos pines y el cdigo se ve mucho mejor. Para referirse a los pines Reo y RE1 se tiene lo siguiente: #define BUTTON #define BUTTON_TRIS #define LED_STATUS #define LED_STATUS_TRIS PORTEbits.RE0 TRISEbits.RE0 PORTEbits.RE1 TRISEbits.RE1

Despus se configura el oscilador interno, se dice que van a ser entradas digitales y se inicializan los puertos usando las etiquetas. Ahora dentro del while tenemos un simple ejemplo en donde se revisa el estado del pulsador, agregamos un pequeo retardo para evitar rebotes mecnicos de los pulsadores, despus tenemos la instruccin LED_STATUS^=1; lo que hace es intercambiar el estado del pin, por ejemplo para la primera vez que se presione el botn el LED encender, si el botn se vuelve a presionar el LED se apagara.

4 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

También podría gustarte