PIC16F84A & Assembler: Cambiar el estado del LED cuando se presiona un boton

Como ya había comentado en una publicación anterior, me he iniciado con algunas practicas en ASM y para iniciar estaremos usando el ya super conocido PIC16F84A (Muy usado entre la vida de los estudiantes, claro cuando lo fui también lo use y es por eso que tengo varios de ellos entre mis componentes), ya después iremos viendo otros PICs pero la idea principal es ir conociendo de ASM, bueno aquí una de mis primeras practicas encender un LED cada que se pulsa un botón.   

Circuito:
El circuito es bastante básico, primero tenemos la parte de su oscilador que consta del cristal de cuarzo de 4MHz y sus dos condensadores cerámicos de 22pF, tenemos también la parte del reset, un botón con una resistencia de pull-up, bueno todo esto ya lo sabrán por que en el blog ya lo hemos mencionado antes, tenemos conectado un botón con su resistencia pull-down a RA0 que sera nuestra entrada digital y tenemos conectado en RB0 un LED con su debida resistencia que sera nuestra salida digital, el circuito es el siguiente:


Código:
A continuación se muestra el firmware, explicado breve mente en cada linea:
;*******************************************************************************
;*
;* ASM_001: Encender LED con Boton
;*
;*******************************************************************************
;* FileName: main.asm
;* Processor: PIC16F84A
;* Complier: MPASM v5.55
;* Author: Pedro Sánchez (MrChunckuee)
;* Blog: http://mrchunckuee.blogspot.com/
;* Email: mrchunckuee.psr@gmail.com
;* Description: Encender un LED conectado en RB0 al pulsar el boton en RA0
;* Oscilador XT=4MHz
;*******************************************************************************
;* Rev. Date Comment
;* v1.00 27/05/2015 Creación del firmware
;*******************************************************************************
;********** C A B E C E R A ****************************************************
list p=16F84A ;Identific el PIC usar
#include <P16F84A.INC> ;Libreria del PIC
;********** F U S E S **********************************************************
; _CP_OFF Se desactiva proteccion de codigo
; _WDT_OFF Se desactiva el Watchdog Timer
; _PWRTE_ON Se activa el Power-Up Timer
; _XT_OSC Se usa oscilado externo XT
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;********** V A R I A B L E S **************************************************
Led EQU 0 ; Definimos Led como el bit cero de un registro, en este caso PORTB
Boton EQU 0 ; Definimos Boton como el bit 0, en este caso para PORTA
;********** C O N F I G * P U E R T O S ****************************************
RESET org 0x00 ; Aqui comienza el micro despues del reset
goto Inicio ; Salto a la etiqueta Inicio
org 0x05 ; Origen del codigo de programa
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1
movlw b'11111' ; Cargamos 11111 a W
movwf TRISA ; Cargamos W en TRISA para ser entradas
movlw b'11111110' ; Cargamos 11111110 a W
movwf TRISB ; Cargamos W en TRISB, RB0 como salida
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
bcf PORTB,Led ; Comienza con el LED apagado
;********** C O D I G O * P R I N C I P A L ************************************
Bucle
btfss PORTA,Boton ; Preguntamos si esta pulsado (1 Logico)
goto ApagarLED ; Si esta en 0 logico, Apagamos Led
bsf PORTB,Led ; Si esta en 1 logico, Encendemos Led
goto Bucle ; Testeamos nuevamente la condicion del Boton
ApagarLED
bcf PORTB,Led ; Encendemos Led
goto Bucle ; Testeamos nuevamente la condicion del Boton
end

Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

    Publicar un comentario

    2 Comentarios

    1. Muy bien explicado... 10 estrellas

      ResponderEliminar
      Respuestas
      1. Pues que mejor que un código bien comentado, en un futuro hasta yo mismo se a detalle que hace cada linea

        Eliminar