Problemas con salto

#1
Saludos, estoy realizando un programa en un 16f877 y tengo un problema con un salto, este es el código:

UNO MOVLW H'C0' ; DIRECCIÓN DE LA FILA DOS
CALL LCD_REG
MOVLW 'G'
CALL LCD_DATO
MOVLW 'R'
CALL LCD_DATO
MOVLW 'A'
CALL LCD_DATO
MOVLW 'B'
CALL LCD_DATO
MOVLW 'A'
CALL LCD_DATO
MOVLW 'R'
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO
MOVLW ' '
CALL LCD_DATO

CALL UNCUARTO





UNO1 MOVF PORTA , W
BCF STATUS , Z
XORLW 0X01
BTFSC STATUS , Z
GOTO SUBIR

MOVF PORTA , W
BCF STATUS , Z
XORLW 0X02
BTFSC STATUS , Z
GOTO BAJAR

MOVF PORTA , W
BCF STATUS , Z
XORLW 0X04
BTFSC STATUS , Z
GOTO ACCIONUNO

MOVF PORTA , W
BCF STATUS , Z
XORLW 0X10
BTFSC STATUS , Z
CALL LUZ

GOTO UNO1



ACCIONUNO CALL BORRA_Y_HOME
CALL DIS_ON_CUR_OFF

MOVLW H'84'
CALL LCD_REG
MOVLW 'G'
CALL LCD_DATO
MOVLW 'R'
CALL LCD_DATO
MOVLW 'A'
CALL LCD_DATO
MOVLW 'B'
CALL LCD_DATO
MOVLW 'A'
CALL LCD_DATO
MOVLW 'R'
CALL LCD_DATO

MOVLW H'C1'
CALL LCD_REG
MOVLW 'S'
CALL LCD_DATO
MOVLW 'I'
CALL LCD_DATO

MOVLW H'CE'
CALL LCD_REG
MOVLW 'N'
CALL LCD_DATO
MOVLW 'O'
CALL LCD_DATO




LOOP1 MOVF PORTA , W ;BUSCA POR ENTRAR, CANCELAR
BCF STATUS , Z ;O LUZ.
XORLW 0X04
BTFSC STATUS , Z
GOTO ENTRAR1

MOVF PORTA , W
BCF STATUS , Z
XORLW 0X08
BTFSC STATUS , Z
GOTO CANCELAR1

MOVF PORTA , W
BCF STATUS , Z
XORLW 0X10
BTFSC STATUS , Z
CALL LUZ

GOTO LOOP1


ENTRAR1 CALL CONFIGDISP


El problema se da cuando le digo al pic que valla a UNO (GOTO UNO. no mostrado) el pic salta diectamente a ENTRAR1 y realiza la rutina CONFIGDISP (perfectamente). He leido que cuando un programa excede los 2k de memoria hay que salvar el PC o algo asi, pero no se hacerlo, Si alguien sabe alguna posible causa de la falla le agradeceria que me de una mano, Gracias.
 
#2
La forma más fácil de olvidar los saltos o preparar aquellos que pasan de página es con PAGESEL

Por ejempo:
PAGESEL UNO
GOTO UNO

Esto es por que un PIC puede saltar y usar call desde un mismo segmento, pero para saltar a otros segmentos (máximo 4 de 2K cada uno) necesitar colocar la página en los bits de configuración. La macro PAGESEL se encarga en el enlazador de averiguar la página correcta de UNO y colocar los bits.
 
#3
Gracias por responder, puse PAGESEL UNO como recomendaste pero el problema sigue latente, ¿existira alguna función analoga al PAGESEL pero que reemplase a la función CALL? Se me ocurre que la subrutina CALL UNCUARTO (espera 1/4 de segundo) puede estar causando el problema.
 
#5
Es que si se clavan en C, me matan por otro lado, apenas estoy aprendiendo ese lenguaje. Alguien me podria explicar mejor eso del pagesel? Gracias por responder.