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 LEDs que han sido conectados al puerto B del mismo.

Además, aprenderemos a simular nuestro microcontrolador en Isis Proteus e implementaremos físicamente nuestro PIC en el protoboard.

- 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 ; Configuración para 
el programador

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 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 ; Configuración para 
el programador

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 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.
En nuestras prácticas no hemos utilizado estos capacitores, ya que 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 información sobre osciladores.
Más información sobre fusibles de 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 IDE.
Descargar hoja de datos del PIC16F87XA (en inglés).