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:
Espero que alguien me pueda decir los fallos, ya que no doy con ellos, gracias de antemano.
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: