Ayuda con el PIC16F84A y relés (código)

Hola a todos, estoy realizando un código para que mediante un pulsador pueda activar o excitar un relé, pero no he podido conseguirlo, para excitar uno con un pulsador me sale, pero si tengo dos pulsadores y que cada uno excite un relé por separado. El codigo lo estoy implementando para conmutar entre los canales de un preamplificador de guitarra y un canal de efectos, pero no consigo sacarlo, he estado analizando el código y cambiando cosas pero no consigo dar con la solución, aparte tampoco soy muy bueno programando.

Lo que quiero conseguir concretamente es que mediante un pulsador conectado al pin RA4 (entrada) ponga un 1 a la salida del pin RB0 y excite un relé, y que si lo vuelvo a pulsar la ponga a 0 y por lo tanto el relé vuelva a su estado inicial, estando al principio sin excitar. Y hacer lo mismo con otro pulsador conectado al pin RA3 (entrada) y con RB1 como salida.

Con el programa que he hecho cuando lo simulo en el proteus al principio excita el relé sin haber pulsado el pulsador y no me deja cambiar su estado. Y cuando presiono el otro pulsador no hace nada la salida.

El código que tengo es el siguiente:

Código:
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 Pulsador_2  PORTA,3 ; Pulsador 2 conectado a RA3.

#DEFINE Relecanal PORTB,0	; Conectado al relé que conmuta los canales.
#DEFINE Releefectos PORTB, 1 ; Conectado al relé que conmuta los efectos.

ORG	0		; El programa comienza en la dirección 0.

Inicio

 	bsf	STATUS,RP0	; Acceso al Banco 1.

	bsf	Pulsador		; El pin RA4 se configura como entrada.

	bcf	Relecanal		; Se configura como salida.

	bcf	STATUS,RP0	; Acceso al Banco 0.

	bcf	Relecanal		; Al principio relé canal sin excitar.
	
Inicio_2

 	bsf	STATUS,RP0	; Acceso al Banco 1.

	bsf	Pulsador_2		; El pin RA3 se configura como entrada.

	bcf	Releefectos		; Se configura como salida.

	bcf	STATUS,RP0	; Acceso al Banco 0.

	bcf	Releefectos		; Al principio relé efectos sin excitar.

Principal

	btfsc	Pulsador		; ¿Pulsador presionado?, ¿(Pulsador)=0?

	goto	Fin		; No. Comprueba otra vez.

	btfsc	Relecanal		; Comprueba el relé canal.

 	goto	EstabaExcitado
 	
Principal_2

	btfsc	Pulsador_2		; ¿Pulsador presionado?, ¿(Pulsador)=0?

	goto	Fin_2		; No. Comprueba otra vez.

	btfsc	Releefectos		; Comprueba el relé efectos.

 	goto	EstabaExcitado_2

EstabaSinExcitar

	bsf	Relecanal		; Estaba sin excitar y lo excita.

	goto	EsperaDejePulsar
	
EstabaSinExcitar_2

	bsf	Releefectos		; Estaba sin excitar y lo excita.

	goto	EsperaDejePulsar_2

EstabaExcitado

	bcf	Relecanal		; Estaba excitado y vuelve a su terminal común.
	
EstabaExcitado_2

	bcf	Releefectos		; Estaba excitado y vuelve a su terminal común.

EsperaDejePulsar

	btfss	Pulsador		; ¿Dejó de pulsar?. ¿(Pulsador)=1?

	goto	EsperaDejePulsar	; No. Espera que deje de pulsar.
	
EsperaDejePulsar_2

	btfss	Pulsador_2		; ¿Dejó de pulsar?. ¿(Pulsador)=1?

	goto	EsperaDejePulsar_2	; No. Espera que deje de pulsar.

Fin

	goto	Principal

Fin_2

	goto	Principal_2
	
	END


Espero que alguien me pueda decir los fallos, ya que no doy con ellos, gracias de antemano.
 
Última edición:
Atrás
Arriba