logica, activa y desactiva bits con un solo pulso

Buenas! necesito ayuda con esto, les comento.

thump_8990310124.jpg



Mi objetivo es realizar un tipo de control logico para reflejar el estado del bit seleccionado, asi como tambien que dicho bit cumpla la su funcion correspondiente de activar o desactivar un subprogramas.

El problema es que no encuentro como hacerlo, seran 5 puldadores, que tendran esta logica.

Preguntalocomocion = locomocion; Activar o desactivar en todo momento
Preguntabrazo = Brazo; Activar siempre y cuando desactive a camara y distancia
PreguntaCamara = Camara; Activar siempre y cuando desactive brazo y distancia
PreguntaDistancia = Distancia: Ativar siempre y cuando desactive a brazo, camara y temperatura
PreguntaTemperatura = Temperatura; Activar siempre y cuando desactive distancia


Por estetica lo requiero hacer por pulsadores que se activen y desactiven con un solo pulso. Estaba trabajando con ASM pero no encuentro la manera, estaba probando con algo asi:


Código:
INICIO
    btfss    PORTA,0            ; ¿Entrada a 1?
    goto    INICIO            ; No, vuelve a testear el bit (RA0)
    call      Retardo.25
    goto    COMPROBAR        ; Si, Salta a comprobar

COMPROBAR
    btfsc    PORTC,0            ; El led esta encendido?
    goto    APAGAR            ; Si, Ve a apagar
    goto    ENCENDER        ; No, Ve a encender

ENCENDER
    bsf        PORTC,0            ; Encender Led.
    goto      INICIO            ; Vuelve a INICIO.

APAGAR
    bcf        PORTC,0            ; Apaga el Led.

    goto      INICIO            ; Vuelve a INICIO.

Este programa hace la funcion de encender y apagar un bit con un pulsador, pero no puedo acoplarle los demas bit con la respectiva logica, requiero ayuda, gracias. Y no necesariamente que sea por pic. ...
 
usa esta rutina, tambien se puede hacer por mediode interrupciones o por tablas
con la funcion xorwf cambias el estado de la salida


PHP:
Principal

BOTON0
              btfss    PORTA,0
              GOTO    RUTINA0
BOTON1
               BTFSS    PORTA,1
               GOTO    RUTINA1
BOTON2
               BTFSS    PORTA,2
               GOTO    RUTINA2
BOTON3
               BTFSS    PORTA,3
               GOTO    RUTINA3
BOTON4
               BTFSS    PORTA,4
               GOTO    RUTINA4
               GOTO   Principal

RUTINA0
               MOVLW    B'00000001'
               XORWF    PORTB,F
               GOTO    BOTON1
RUTINA1
               MOVLW    B'00000010'
               XORWF    PORTB,F
               GOTO    BOTON2
RUTINA2
               MOVLW    B'00000100'
               XORWF    PORTB,F
               GOTO    BOTON3
RUTINA3
               MOVLW    B'00001000'
               XORWF    PORTB,F
               
RUTINA4
               MOVLW    B'00010000'
               XORWF    PORTB,F
               GOTO    Principal
 
Última edición:
Atrás
Arriba