Hola. Bueno, en el diagrama lo veo perfecto. Lo que no entiendo cual es el problema, ya que por lo que decís la reacción que hace el pic en los puertos, pues, está en el programa. Si te fijas bien, cuando corregis los estados, estas corrigiendo todo el puerto
Estan_a_000
movlw b'00000001' ;El registro W se carga con valor b`00000001´
movwf 0X06 ;Carga el valor W en PORTB
movlw b'00000001' ;El registro W se carga con valor b`00000001´
movwf 0X07 ;Carga el valor W en PORTC
goto Loop ;Salta a la etiqueta Loop
Estan_a_010
movlw b'00000100' ;El registro W se carga con valor b`00000100´
movwf 0X06 ;Carga el valor W en PORTB
movlw b'00000100' ;El registro W se carga con valor b`00000100´
movwf 0X07 ;Carga el valor W en PORTC
goto Loop ;Salta a la etiqueta Loop
Si no queres que los demas bit se vean afectados, debes usar BCF o BSF, el problema se te va a presentar, para armar el software, cuando quieras poner, por ejemplo pasarlo de 0 a 1 (se está claro usando estas mismas subrutinas)
Fijate mi otra sujerencia anterior, de usar un interruptor como modo.
Entiendo que lo que quieres es mezclar dos o mas entradas. Ten encuenta que el pic no tiene ni idea de que es lo que queres, por ejemplo, quiero mezclar dos entradas, presiono dos pulsadores, pero ahora se me ocurre seleccionar solo una entrada, y presiono la tecla correspondiente. El pic va a mezclar tres entradas porque no le has dicho antes que quieres seleccionar una entrada.
Aclarame bien tu problema y como queres que se comporte bien el programa (seleccionar solo una entrada, mezclar las entradas o una combinación de ambas)
Lo de define, no te va a solucionar el problema, es como vos decis, lo que te va ayudar es hacer más prolijo el programa y por ende sea más facil de leer y programar y hacer modificaciones, y etc.
Saludos