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 $FF

PORTA=0    ;Inicia con el PORTA apagado
PORTB=0    ;Inicia con el PORTB apagado

INICIO:                  ;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 apagado

inicio:
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 PORTB

TRISB=0 ;Configuramos todo el PORTA como SALIDAS
PORTB=%00000001 ;Inicia con el PORTB.0 en 1

inicio:
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 desplazamiento

for 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 1

inicio:
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
ENDIF

IF 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
ENDIF

goto inicio
END

 

Share.

About Author

Leave A Reply