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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;******************************************************************************* | |
;* | |
;* 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.
2 Comentarios
Muy bien explicado... 10 estrellas
ResponderEliminarPues que mejor que un código bien comentado, en un futuro hasta yo mismo se a detalle que hace cada linea
Eliminar