Cuanta razón tienes! Creo que me habría costado encontrarlo, muchas gracias, jejej no recordaba las palabras reservadas. Bueno, a parte de esto, he encontrado otro gravisimo error por parte mia y es que la instrucción "swapf" intercambia los niveles alto por el bajo y al revés, y yo iva convencido... que negaba los niveles (conectado a masa estaba yo)
Por lo que lo que hay que sustituir esa instrucción por una Or Exlusiva (xorwf) cargando w con 0x03 (b'00000011) para que niegue los 2 primeros bits que son los que realmente nos interesan.
Te dejo tu codigo modificado, compilado y simulado sin aparentemente ningun error.
; ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Variabble
ENDC
; ZONA DE CÓDIGOS ********************************************************************
Inicio
ORG 0 ; El programa comienza en la dirección 0.
clrf PORTB ; Debe estar a cero cuando el puerto se configure
; como salida.
clrf Variabble
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B se configuran como salida.
movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada.
movwf TRISA
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
movf PORTA,W ; Lee los sensores.
andlw b'00000011' ; Máscara para quedarse con el valor de los sensores.
addwf PCL,F ; Salta a la configuración adecuada.
goto Vacio
goto NivelBajo
goto NivelAlto
goto NivelAlto
Vacio
movlw b'00000011'
btfsc Variabble,0 ; si el bit0 es "1" no saltara y negara los bits 0 y 1
xorwf Variabble,1
movlw b'00000001' ; Estado "Vacio"
goto ActivaSalida
NivelBajo
movlw b'01000010' ; Estado "Llenándose" ---> motor 1 por defecto
bsf Variabble,0 ; bit0 de vriable a 1
btfsc Variabble,1 ; Salta si el bit1 es 0 (sino cambiara el motor)
movlw b'00100010' ; Estado "Llenándose" ---> motor 2
goto ActivaSalida
NivelAlto
BSF 0X0C,C
movlw b'01100100' ; Estado "Nivel Alto"
movwf PORTB ; Visualiza por el puerto de salida.
movlw b'00110' ; Estado "Nivel Alto"
XORWF PORTA ;COMPARAMOS W CON EL PUERTOA
BTFSS STATUS,Z ;RESULTADO DEL FLAG Z
GOTO Off ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
MOVLW B'01100100' ;Mandamos nivelbajo
movwf PORTB ;Visualiza por el puerto de salida.
GOTO NivelAlto
Off
movlw b'0010' ; Estado "Nivel" .
XORWF PORTA ;COMPARAMOS W CON EL PUERTOA
BTFSS STATUS,Z ;RESULTADO DEL FLAG Z
GOTO Off2 ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
MOVLW B'01100100' ;Mandamos nivel bajo
movwf PORTB ;Visualiza por el puerto de salida.
GOTO NivelAlto
Off2
movlw b'00000' ; Estado "Vacio" .
XORWF PORTA ;COMPARAMOS W CON EL PUERTOA
BTFSS STATUS,Z ;RESULTADO DEL FLAG Z
GOTO NivelAlto ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
MOVLW B'00000000' ;Mandamos nivel bajo
movwf PORTB ;Visualiza por el puerto de salida.
GOTO ActivaSalida
ActivaSalida
movwf PORTB ; Visualiza por el puerto de salida.
goto Principal
END
Por cierto que bueno volver a toquetear algo de ASM
Saludos.