Tendrías que comprobarlo con el MPASM y fijarte qué sucede.
Por mis conocimientos adquiridos, creo poder asegurar que si un registro es accedible desde todos los bancos del PIC en cuestión, es completamente INDISTINTO el banco seleccionado desde el cual se desee acceder a el mísmo.
Las leyes de selección puede que estén determinadas, en primera instancia, dentro del archivo .inc del PIC seleccionado.
Si el registro en cuestión aparece declarado sólo 1 vez en dicho archivo(pese a existir en más de una vez en el mapa de memoria del PIC) creería y casi aseguraría que el MPASM al ejecutar la MACRO BANKSEL, seleccionaría los valores para RP0 y RP1 según el único valor que figure en dicho archivo.
Con respecto a la macro BANKSEL, cada vez que la llames SI O SI debería generar el siguiente par de instrucciones:
B*F STATUS,RP0
B*F STATUS,RP1
donde el asterisco podría adquirir el valor "C" o "F"(quedando BCF o BSF segun corresponda).
NO ES CIERTO QUE SI POR EJEMPLO HAGO:
BCF STATUS,RP1
BCF STATUS,RP0
movlw .5
movwf PORTA
Inicia
BANKSEL PORTA
nop
...
el MPASM al ensamblarlo NO GENERE dicho par de instrucciones, si bien parecería a primera vista innecesario
¿Por que?
Porque en otra parte del código del programa podría tener:
BANKSEL TRISB
movlw 0xFF
movwf TRISB
goto Inicia
Y como vemos aquí, surgiría un error si el MPASM hubiese ignorado el BANKSEl, ya que para que el codigo funcione bien, al momento de ejecutarse el goto el PIC se encuentra en el banco1
y necesito de las instrucciones generadas por el BANKSEL PORTA para poder afectar corretamente luego al PORTA y no al TRISA.
¿Se entiende?
P.D. Recién husmee el archivo .inc del 16F689 y efectivamente,como era logico y de esperarse,los registros repetidos en mas de un banco son declarados sólo con su MENOR posición de memoria entre todas las disponibles.
Entonces, podría estar en condición necesaria y suficiente para afirmar que el MPASM al hacer un BANKSEL, en caso que el registro exista en más de un banco del PIC, eligirá el banco correspondiente al valor asignado dentro del archivo .inc
Ejemplo:
Si el PIC se encuentra en el banco 1 y hago:
BANKSEL INTCON
Si bien INTCON existe en el banco 1, también existe en el cero y es precisamente este último el UNICO que está declarado en el archivo .inc. Entonces quedará:
BANKSEL 0x0B
Lo que generará el siguiente código ASM final:
BCF 0x03,6 ;BCF STATUS,RP1
BCF 0x03,5 ;BCF STATUS,RP0
Saludos.