Está en la página 1de 9

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 <16f877a.h>
#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 configuracin 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
ocasin
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.
Adems,
aprenderemos
a simular
nuestro
microcontrolador
Proteus eimplementaremos fsicamente nuestro PIC en el protoboard.

en

Isis

- Para esta prctica utilizaremos un programador de PICs, que seguramente encontrars 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 esttica, debemos tener cuidado de no tocar sus pines.
ENCENDIDO
DE
UN
LED.
El siguiente cdigo 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

Configuracin

LIST p=16F877A
INCLUDE <P16F877A.INC>
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 lnea RA0 de PORTA toma el valor de 1, se enciende el
LED
CALL Retardo ; Llamada a la rutina de retardo
BCF PORTA,0 ; La lnea 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 prctica 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 cdigo 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

Configuracin

LIST p=16F877A
INCLUDE <P16F877A.INC>
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 lnea 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

implementacin

en

el

protoboard.

Para esta prctica 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 averas en
nuestro microcontrolador.
IMPLEMENTACIN

EN

PROTEUS.

Seguramente te querrs asegurar de que tu programa funcione correctamente antes de ir a

grabar tu PIC en la programadora y darte cuenta de que al implementar fsicamente 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
rpida
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 opcin 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
FSICAMENTE.
Nuestro cdigo parece estar bien, nuestra simulacin 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 smbolos VDD y VSS, estas son las patillas de alimentacin,
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.
Adems, conectaremos dos capacitores (C1 y C2) junto al oscilador de cristal (XTAL) como lo
vemos
en
la
siguiente
imagen.

Los valores de los capacitores varan


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 prcticas no hemos


sin
ellos
funcionan
bien.

3.
Configurar
correctamente
los
bits
o
fusibles
de
configuracin.
Es decir, debemos asegurarnos de activar los bits correctos de acuerdo a las necesidades del
proyecto. En muchas de las prcticas solo debemos escoger el tipo de cristal, as que
deshabilitaremos todas las dems opciones de configuracin. Para estas prcticas hemos
utilizado
el
oscilador
de
cristal
tipo
XT.
Ms
Ms

informacin
informacin
sobre

sobre
fusibles

de

osciladores.
configuracin.

Descargar pack1 _ encendido de un LED (Archivo .asm + archivo .hex + simulacin en


Proteus).
Descargar pack2 _ encendido secuencial de LEDs (Archivo .asm + archivo .hex + simulacin
en
Proteus).
Descargar
MPLAB
Descargar hoja de datos del PIC16F87XA (en ingls).

IDE.

También podría gustarte