Completando lo expuesto te copio ambas soluciones completas:
Solución 1:
Codigo:
; Cada vez que presiona el pulsador conectado a la línea RA4 conmutará el estado
; de un LED conectado a la línea RB0.
;
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE LED PORTB,0 ; Línea donde se conecta el diodo LED.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bsf Pulsador ; La línea RA4 se configura como entrada.
bcf LED ; Se configura como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.
bcf LED ; En principio diodo LED apagado.
Principal
btfsc Pulsador ; ¿Pulsador presionado?, ¿(Pulsador)=0?
goto Fin ; No. Vuelve a leerlo.
call Retardo_20ms ; Espera que se estabilicen los niveles de tensión.
btfsc Pulsador ; Comprueba si es un rebote.
goto Fin ; Era un rebote y sale fuera.
btfsc LED ; Testea el último estado del LED.
goto EstabaEncendido
EstabaApagado
bsf LED ; Estaba apagado y lo enciende.
goto EsperaDejePulsar
EstabaEncendido
bcf LED ; Estaba encendido y lo apaga.
EsperaDejePulsar
btfss Pulsador ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
Fin
goto Principal
INCLUDE <RETARDOS.INC>
END
Solución 2:
Codigo:
; Cada vez que presiona el pulsador conectado a la línea RA4 conmutará el estado
; de un LED conectado a la línea RB0. La complementación se realiza con ayuda de una
; función XOR.
;
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bsf Pulsador ; La línea RA4 como entrada.
clrf PORTB ; Se configura como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.
clrf PORTB ; En principio diodo LED apagado.
Principal
btfsc Pulsador ; ¿Pulsador presionado?, ¿(Pulsador)=0?
goto Fin ; No. Vuelve a leerlo.
call Retardo_20ms ; Espera que se estabilicen los niveles de tensión.
btfsc Pulsador ; Comprueba si es un rebote.
goto Fin ; Era un rebote y sale fuera.
movlw b"00000001" ; Se hace una XOR para complementar.
xorwf PORTB,F
EsperaDejePulsar
btfss Pulsador ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
Fin
goto Principal
INCLUDE <RETARDOS.INC>
END
Suerte.