Buenas tardes:
Estoy intentando encender y apagar un LED con sólo pulsador, pero la verdad es que no entiendo porqué no funciona.
El estado del LED encendido lo marco en el byte FLAG_Set en su bit nº 1.
Si está a 1 está ON, si está a 0 está OFF.
Pero no se queda.
A ver si alguien me puede echar una mano.
Un saludo.
Adjunto fichero *.DSN para Proteus, y asm.
Estoy intentando encender y apagar un LED con sólo pulsador, pero la verdad es que no entiendo porqué no funciona.
El estado del LED encendido lo marco en el byte FLAG_Set en su bit nº 1.
Si está a 1 está ON, si está a 0 está OFF.
Pero no se queda.
A ver si alguien me puede echar una mano.
Un saludo.
Adjunto fichero *.DSN para Proteus, y asm.
Código:
; *************************************************
; Botón que enciende un LED
;
; *************************************************
LIST P=16F84A ; Le decimos el tipo de procesador a utilizar
INCLUDE <P16F84A.INC> ; Include del pic16f84A
; Configuramos proteccion de codigo a off, perro guardian a off, power reset a on, y cristal on.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;-----------------------------
; Registros donde guardar datos.
; Comienzan a guardarse en la posición 0x0C, la primera de la RAM disponible para el usuario
;-----------------------------
CBLOCK 0x0C
Flag_Set; El bit 1 del este byte se pone a 1 cuando el LED está encendido y a 0 cuando está apagado.
ENDC
#Define BSet PORTB,1
;-----------------------------
; Zona de codigos
;-----------------------------
org 0
Inicio
;-------------------------------------------
; Configuramos puertos
;-------------------------------------------
bsf STATUS,RP0 ; Acceso al banco 1 (Para configurar los puertos)
clrf PORTA ; Configuramos el PORTA como salida
bsf BSet ; Configuramos el botón BSet como entrada
bcf OPTION_REG, NOT_RBPU ; Utilizamos las resistencias PULL-UP del PIC
bcf STATUS,RP0 ; Volvemos al banco 0
clrf Flag_Set ; Ponemos a 0 todos los bits del byte Flag_Set
;---------------------------------------
Principal
;---------------------------------------
btfss BSet
call BotonSet
goto Principal
;---------------------------------------------
; Si Flag_Set está puesto a 1 lo ponemos a cero
; Si Flag_Set está puesto a 0 lo ponemos a 1
;-------------------------------------------
BotonSet
btfss Flag_Set,1; Si está encendido se salta la línea y lo apagamos
call Encender
call Apagar
return
;----------------------------------------
Apagar
;----------------------------------------
bcf PORTA,1
bcf Flag_Set,1
return
;----------------------------------------
Encender
;----------------------------------------
bsf PORTA,1
bsf Flag_Set,1
return
END