Main:
; Esto antes de llamar a tus "productos" o que tengas que leer las entradas
CLRF RESULTADO
MOVF PORTB,W
MOVWF AUX ; Copia de PORTB UNA SOLA, no hay cambios hasta que pase por todo esto!
CALL PRIMER_PRODUCTO;
CALL SEGUNDO_PRODUCTO;
CALL TERCER_PRODUCTO;
CALL SALIDAS
RETURN;
PRIMER_PRODUCTO:
BTFSC AUX,0 ;Si es uno (cero negado), ni vale la pena molestarse por S3 y S4, el resultado es 0 con las AND
GOTO NEXT_1
BTFSC AUX,4 ; Cualquiera que sea uno, simplemente activaria el bit... Fin..
BSF RESULTADO,0
BTFSC AUX,3
BSF RESULTADO,0
NEXT_1
BTFSS AUX,1 ; S1 negado, si es 1 (cero negado) salimos, no tiene sentido.
RETURN
BTFSC AUX,2 ; S2.. Si antes quedo un 1 (luego de negarse) y este esta en 1, activamos
BSF RESULTADO,0
RETURN
SEGUNDO_PRODUCTO:
BTFSS AUX,0 ; S0 = 1
RETURN
BTFSS AUX,4 ; S4= 0
BSF RESULTADO,1 ; S0 AND !S4
RETURN
;s2s3'+s4's1+s1's0
TERCER_PRODUCTO:
BTFSC AUX,1 ;S1 = 1?
GOTO NEXT_3
BTFSC AUX,0
BSF RESULTADO,2 ; S1= 0 y S0= 1
NEXT_2
BTFSC AUX,3 ;S3 = 1?
GOTO NEXT_3
BTFSC AUX,2
BSF RESULTADO,2 ; S1= 0 y S0= 1
RETURN
NEXT_3
BTFSS AUX,4 ; S4= 1
BSF RESULTADO,2
GOTO NEXT_2