Buenas.
Las directivas no te van a servir para eso que dices.
Ellas sólo sirven para compilar un trozo de código u otro en función de la condición que tu les pongas, pero en ningún caso para manejar y saltar en función condiciones con variables del programa.
Un ejemplo:
Codigo:
#define usar_puertoB
Ifdef usar_PuertoD
bsf status,5
clrf portb
bcf status,5
endif
esto te permitirá con tan sólo definir "usar_puertoB" poner o quitar esas tres líneas de código en tu programa.