!Solucionado¡
Bueno por ahi faltaba un detalle que ahora veo era importante, las tablas se usaban la mayoria dentro de las interrupciones, y ese era otro problema, bueno la solucion fue:
1- antes de llamar una tabla, recuperar la palte alta de PCL de la posicion de la tabla y guardarla en PCLATCH, despues de esto llamar la tabla y listo no molestaba mas y queda asi:
movlw HIGH(tablaciclo0)
movwf PCLATH
movf Ciclo,W
call tablaciclo0
movwf CICLO_0
esta es para llamar a la tabla tablaciclo0 y guardar el valor recuperado en CICLO_0.
2- Y esta que la verdad ni sabia que habia que hacerla, al ingresar a la INTs recuperar y guardar el valor de PCLATCH, despues de atendida la INTs recuperar este valor y listo, queda asi:
INTs bcf Intcon,7 ;desactio las INTs
MOVWF W_TEMP ;SALVO EL REGISTRO W
SWAPF STATUS,W
MOVWF STATUS_TEMP ;SALVO EL REGISTRO STATUS
CLRF STATUS ;TRABAJO EN BANK 0
MOVFW PCLATH ; SALVO EL REGISTRO PCLATH
MOVWF PCLATH_TEMP
CLRF PCLATH ;borro PCLATCH
- ;
- ;
- ;atiendo todas las INTs
- ;
- ;
- ;
saINT MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
bcf Intcon,0 ;borro bandera RBIF
bcf Intcon,2 ;borro bandera TOIF
bcf Intcon,1 ;borro bandera INTF
BSF Intcon,7
retfie ;Retorna habilitando las interrupciones
y al salir recupero los valores de ya sabemos W, STATUS y PCLATCH, ahora el programa funciona de lo mas bien, nuevamente mil gracias por la ayuda atodas las personas.