Encender y Apagar Un Led

ENCENDER Y APAGAR UN LED CODIGO GENERADO PARA ENCENDER Y APAGAR UN LED CONECTADO AL PIN 0 DEL DEL PUERTO B DEL PIC 16F87

Views 112 Downloads 1 File size 494KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ENCENDER Y APAGAR UN LED CODIGO GENERADO PARA ENCENDER Y APAGAR UN LED CONECTADO AL PIN 0 DEL DEL PUERTO B DEL PIC 16F877A #include #fuses xt,nowdt #use delay(clock=4000000) //Declaracion de variables globales #define Led pin_b0//Nombra a pin_b0 como Led #define Retardo delay_ms(500)//Nombra a delay_ms() como Retardo

//Programa principal void main(){ //Configuracion de puertos E/S SET_TRIS_B(0x00);//Configura el puerto B: 0=Salida; 1=Entrada output_b(0x00); //Limpia el registro del puerto //Estructura Programa principal inicio://Etiqueta de retorno output_high(led);//Pone en alto a led retardo;//Demora output_low(led);//Pone en bajo a led retardo;//Demora goto inicio;//Regresa a la etiqueta inicio }

PRENDER APAGAR UN LED PIC16F877A ASSEMBLER Comenzaremos a hacer un programa sencillo en el cual podremos en assembler usando el PIC 16F877A para prender y apagar un led presionando un pulsador como se muestra en el diagrama. Haremos uso de dos puertos del PIC 16F877A, el puerto B y el puerto D, declararemos al puerto B como entrada y el puerto D será configurado como salida. En el grafico podemos observar que el pin RB0 está puesto el pulsador y una resistencia en una configuración pull up, cuando no se está presionando el pulsador se pone un valor alto (5V) a la entrada RB0 y cuando se presiona se le pone un nivel bajo (0V). En la salida RD0 para que encienda el led su salida debe estar a un nivel bajo por eso al momento de desarrollar el programa en assembler deberemos testear el pin BB0 y si esta en un nivel alto pondremos un valor alto en la salida RD0 que mantendra apagado el led, caso contrario pondremos un valor bajo en la salida RD0 lo cual hara que el led encienda.

Programas sencillos PIC16F877A.

para

el

microcontrolador

En esta ocasión te presentaremos dos sencillos programas escritos en ensamblador para el PIC16F877A. El primero de ellos enciende y apaga un LED conectado al pin RA0 del microcontrolador; mientras que el segundo, prende secuencialmente los LEDsque han sido conectados al puerto B del mismo. Además, aprenderemos a simular nuestro microcontrolador Proteus eimplementaremos físicamente nuestro PIC en el protoboard.

en

Isis

- Para esta práctica utilizaremos un programador de PICs, que seguramente encontrarás en tu centro educativo.

- Usaremos el compilador gratuito de Microchip “MPLAB IDE” para escribir nuestro programa en ensamblador y obtener el archivo .HEX (utilizado por el programador para grabar el micro). Descargar MPLAB IDE. - Aunque los PICs son resistentes a la estática, debemos tener cuidado de no tocar sus pines. ENCENDIDO DE UN LED. El siguiente código nos permitirá encender y apagar un LED conectado al pin RA0 del PIC. __CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF para el programador

;

Configuración

LIST p=16F877A INCLUDE ORG 0x00 ;Inicio de programa N EQU 0x00 cont1 EQU 0x20 cont2 EQU 0x21 BCF STATUS,RP0 ; Accede a banco 0 BCF STATUS,RP1 CLRF PORTA ; Limpia PORTA BSF STATUS,RP0 ; Accede a banco 1 CLRF TRISA ; Configura todos las patitas de PORTA como salidas BCF STATUS,RP0 ; Regresa a banco 0 Encled BSF PORTA,0 ; La línea RA0 de PORTA toma el valor de 1, se enciende el LED CALL Retardo ; Llamada a la rutina de retardo BCF PORTA,0 ; La línea RA0 de PORTA toma el valor de 0, se apaga el LED CALL Retardo ; Llamada a la rutina de retardo GOTO Encled ; Va a la etiqueta Encled Retardo ; Rutina de retardo MOVLW N MOVWF cont1 Rep1 MOVLW N MOVWF cont2 Rep2 DECFSZ cont2,1 GOTO Rep2 DECFSZ cont1,1

GOTO Rep1 RETURN ; Retorno a la llamada de rutina de retardo. END ; Fin de programa Y

aquí, nuestro

circuito

implementado

en

el

protoboard simplificado.

Para esta práctica hemos utilizado una resistencia (R1) de 10 Kilo Ohms, un cristal (XTAL) de 4 MHz y una resistencia (R2) de 200 a 300 Ohms para limitar la corriente que llegara a nuestro LED. ENCENDIDO SECUENCIAL DE LEDs. Este código nos permitirá encender secuencialmente los LEDs conectados al puerto B del micro, en un ciclo infinito de RB0 a RB7. __CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF para el programador

;

Configuración

LIST p=16F877A INCLUDE ORG 0x00 ; Inicio de programa N EQU 0x00 cont1 EQU 0x20 cont2 EQU 0x21 BCF STATUS,RP0 ; Accede a banco 0 BCF STATUS,RP1 CLRF PORTB ; Limpia PORTB BSF STATUS,RP0 ; Accede a banco 1 CLRF TRISB ; Configura todas las patitas de PORTB como salidas BCF STATUS,RP0 ; Regresa a banco 0

BSF PORTB,0 ; La línea RA0 de PORTB toma el valor 1, se enciende el LED Encledsec CALL Retardo ; Llamada a la rutina de retardo RLF PORTB,1 ; Recorre el bit de RB0 a RB7 GOTO Encledsec ; Va a la etiqueta Encledsec Retardo ; Rutina de retardo MOVLW N MOVWF cont1 Rep1 MOVLW N MOVWF cont2 Rep2 DECFSZ cont2,1 GOTO Rep2 DECFSZ cont1,1 GOTO Rep1 RETURN ; Retorno a la llamada de rutina de retardo. END ; Fin de programa Y

aquí, su

correspondiente

implementación

en

el

protoboard.

Para esta práctica hemos utilizado una resistencia (R1) de 10 Kilo Ohms, un cristal (XTAL) de 4 MHz, y 7 LEDs. Es muy importante que entre la salida de los pines del microcontrolador y sus respectivos LEDs, coloquemos una resistencia de aproximadamente 200 Ohms, para evitar averías en nuestro microcontrolador. IMPLEMENTACIÓN

EN

PROTEUS.

Seguramente te querrás asegurar de que tu programa funcione correctamente antes de ir a

grabar tu PIC en la programadora y darte cuenta de que al implementar físicamente tu circuito, este no hace nada. Para probar el correcto funcionamiento de nuestro circuito existen programas como Isis Proteus que nos permiten simular una gran variedad de microcontroladores de una manera rápida y sencilla. Para

simular

nuestros

micros

en

ISIS:

1.- Escoger el modelo de nuestro microcontrolador y colocarlo en el espacio de trabajo. 2.- Hacer doble click sobre él, con lo que nos aparecerá la siguiente ventana:

En ella, simplemente hacemos click sobre la imagen de la carpetita (ubicada en la opción Program File) para buscar y cargar el archivo .HEX. 3.- Y listo, finalmente simularemos el microcontrolador para comprobar que nuestro circuito funcione perfectamente bien. PARA QUE NUESTRO PIC FUNCIONE FÍSICAMENTE. Nuestro código parece estar bien, nuestra simulación funciona perfectamente, pero ¡Oh Sorpresa!, a la hora de implementarlo en el protoboard nuestro proyecto no funciona. Aquí una serie de medidas a tomar en cuenta si nuestro microcontrolador PIC16F877A no hace nada. 1. Alimentar correctamente nuestro PIC. Debemos asegurarnos de que nuestro micro este bien alimentado. Para ello veamos el diagrama de pines del microcontrolador,

En él, podremos apreciar que existen 4 pines marcados con los símbolos VDD y VSS, estas son las patillas de alimentación, donde VDD va conectado a voltaje y VSS a (masa) ó a tierra. Para alimentar a nuestro PIC solo debemos conectar dos de las cuatro patillas, una VDD y una VSS. 2. Realizar las siguientes conexiones. El pin 1 del microcontrolador (MCLR/VPP) debe estar conectado a voltaje por medio de un resistor de 10 Kilo Ohms. Además, conectaremos dos capacitores (C1 y C2) junto al oscilador de cristal (XTAL) como lo vemos en la siguiente imagen.

Los valores de los capacitores varían de acuerdo al tipo de oscilador utilizado (LP, XT, HS), en la siguiente tabla podemos ver estos valores.

utilizado

estos

capacitores,

ya

que

En nuestras prácticas no hemos sin ellos funcionan bien.

3. Configurar correctamente los bits o fusibles de configuración. Es decir, debemos asegurarnos de activar los bits correctos de acuerdo a las necesidades del proyecto. En muchas de las prácticas solo debemos escoger el tipo de cristal, así que deshabilitaremos todas las demás opciones de configuración. Para estas prácticas hemos utilizado el oscilador de cristal tipo XT. Más Más

información información sobre

sobre fusibles

de

osciladores. configuración.

Descargar pack1 _ encendido de un LED (Archivo .asm + archivo .hex + simulación en Proteus). Descargar pack2 _ encendido secuencial de LEDs (Archivo .asm + archivo .hex + simulación en Proteus). Descargar MPLAB Descargar hoja de datos del PIC16F87XA (en inglés).

IDE.