Tutorial 1 : Encender un LED
OBJETIVO:
Desarrollar un programa que nos permita encender un led usando un microcontrolador PIC16F84A, y a su vez utilizar diferentes tecnicas de programacion.
REQUISITOS:
Configuración de pines del microcontrolador (Introduccion)
Instalacion de Picbasic Pro y Microcode (Tutorial)
Instalacion de Labcenter Proteus v8.9 (Tutorial)
DESARROLLO:
Procederemos a desarrollar la programación y simulación de como encender un led utilizando el PIC16F84A con algunos ejemplos muy básicos para entender fácilmente de que se trata.
Antes de empezar tenemos la descripción de los puertos y pines del PIC16F84A, para una mejor comprensión.

Identifacion de pines del microcontrolador PIC16F84A
Nuestro primer programa consiste en encender dos leds, uno en el PORTA y otro en el PORTB.
DIAGRAMA DE FLUJO:

Diagrama de flujo del programa
CODIGO DEL PROGRAMA:
DEFINE OSC 4 ;Definimos frecuencia del cristal, no es necesario colocar si se usa siempre 4MHz
TRISA=0 ;Configuramos todo el PORTA como SALIDAS
TRISB=0 ;Configuramos todo el PORTB como SALIDAS
;Si fuera como entradas seria 255 o $FFPORTA=0 ;Inicia con el PORTA apagado
PORTB=0 ;Inicia con el PORTB apagadoINICIO: ;etiqueta inicio
HIGH 8 ;+5V al pin RA1, ENCIENDE
PAUSE 1000 ;pausa de 1 seg (1000 milisegundos)
LOW 8 ;0V al pin RA1, APAGA
PAUSE 1000 ;pausa de 1 seg (1000 milisegundos)HIGH 3 ;Envia +5V al pin RB3, ENCIENDE
PAUSE 1000 ;pausa de 1 seg (1000 milisegundos)
LOW 3 ;0V al pin RB3, APAGA
PAUSE 1000 ;pausa de 1 seg (1000 milisegundos)GOTO INICIO ;regresa a etiqueta inicio
END
Simulacion en Proteus:

Simulacion en Proteus, parpadeo de led
VIDEO EN YOUTUBE:
A
EJEMPLO 2:
TRISB=0 ;Configuramos todo el PORTB como SALIDAS
;Si fuera como entradas seria 255 o $FF
PORTB=0 ;Inicia con el PORTB apagadoinicio:
PORTB = 170 ;%10101010 ;equivale en hex a $AA, dec 170
pause 1000 ;pausa de 1 seg
PORTB = 85 ;%01010101 ;equivale en hex $55, dec 85
pause 1000 ;pausa de 1 seg
goto inicio
END
EJEMPLO 3:
i var byte
‘barled var PORTBTRISB=0 ;Configuramos todo el PORTA como SALIDAS
PORTB=%00000001 ;Inicia con el PORTB.0 en 1inicio:
for i=1 to 7 ;ciclo de encendido desde PORTB.1 hasta PORTB.7
PORTB=PORTB<<1 ;Desplazamiento izquierdo de encendido
pause 100 ;pausa de 1 seg
next i ;siguiente desplazamientofor i=1 to 7 ;ciclo de encendido desde PORTB.1 hasta PORTB.7
PORTB=PORTB>>1 ;Desplazamiento derecho de encendido
pause 100 ;pausa de 1 seg
next i ;siguiente desplazamiento
goto inicio
END
EJEMPLO 4:
TRISB=0 ;Configuramos todo el PORTA como SALIDAS
TRISA=%11100 ;Configuramos PORTA.0 y PORTA.1 como ENTRADAS (el resto salidas)PORTA=0 ;Inicia con el PORTA en 0
PORTB=%00000001 ;Inicia con el PORTB.0 en 1inicio:
if PORTA.0 = 1 THEN ;Si el pulsador PORTA.0 es presionado entonces?
PORTB=PORTB<<1 ;Desplazamiento izquierdo de encendido (AUMENTA)
pause 300 ;Retardo anti-rebote
IF PORTB < 1 THEN ;Al llegar al limite superior del PORTB, este se convierte en 0
PORTB = 128 ;Si el PORTB es 0 entonces se enciende el ultimo led.
endif
ENDIFIF PORTA.1 = 1 THEN ;Si el pulsador PORTA.1 es presionado entonces?
PORTB=PORTB>>1 ;Desplazamiento derecho de encendido (DISMINUYE)
pause 300 ;Retardo anti-rebote
IF PORTB < 1 THEN ;Al llegar al limite inferior del PORTB, este se convierte en 0
PORTB = 1 ;Si el PORTB es 0 entonces se enciende el primer led.
ENDIF
ENDIFgoto inicio
END
