Buenas de nuevo albertuky.
En primer lugar decirte que no es necesario que habras un tema nuevo para consultar otra vez esto. Puedes seguir en el tema anterior, publicando una nueva respuesta para consultarnos tus dudas.
Te señalo en rojo lo que esta mal y luego te comento:
Codigo:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Salida0 PORTB,0
On EQU b"00000001" ;Definimos que Led"s se encenderan
Off EQU b"00000000" ;Definimos que Led"s se apagaran
; Source Code **************************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf PORTB ; Estas líneas configuradas como salidas.
bsf Pulsador ; Línea del pulsador configurada como entrada.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
btfsc Pulsador ; ¿Esta el pulsador presionado?
goto Fin ; ¿No?Pues vuelve a leerlo
call Retardo_20ms ;Retardo para que se estabilizen los rebotes de tension
btfsc Pulsador ; Comprueba si era un rebote
goto Fin ; Era un rebote y sale fuera.
goto Estado ;No era un rebote y pasa a la siguiente funcion
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
Fin goto Principal
Estado
btfsc PORTB,0
goto Function_On
goto Function_Off
Function_On
movlw On
movwf PORTB
goto Fin
Function_Off
movlw Off
movwf PORTB
goto Fin
INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.
En primer lugar, la instrucción btfsc PORTB,0, se salta la instrucción siguiente si el PORTB,0 "esta a cero". Por tanto, si el LED estaba apagado salta a Function_Off, y lo "apaga de nuevo". Por eso no te funciona. Cambia la instrucción por la "btfss PORTB,0" y listo.
El fallo del Fin es que no compruebas que el pulsador se deje de pulsar, es decir, nunca saltas a la etiqueta "EsperaDejePulsar". Una solución es poner la etiqueta Fin antes de la etiqueta "EsperaDejePulsar".
El programa sería el siguiente:
Codigo:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Salida0 PORTB,0
On EQU b"00000001" ;Definimos que Led"s se encenderan
Off EQU b"00000000" ;Definimos que Led"s se apagaran
; Source Code **************************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf PORTB ; Estas líneas configuradas como salidas.
bsf Pulsador ; Línea del pulsador configurada como entrada.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
btfsc Pulsador ; ¿Esta el pulsador presionado?
goto Fin ; ¿No?Pues vuelve a leerlo
call Retardo_20ms ;Retardo para que se estabilizen los rebotes de tension
btfsc Pulsador ; Comprueba si era un rebote
goto Fin ; Era un rebote y sale fuera.
goto Estado ;No era un rebote y pasa a la siguiente funcion
Fin
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
goto Principal
Estado
btfss PORTB,0
goto Function_On
goto Function_Off
Function_On
movlw On
movwf PORTB
goto Fin
Function_Off
movlw Off
movwf PORTB
goto Fin
INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.
A ver si ahora ahy suerte