Problemas con salto

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.
 
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.
 
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.
 
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.
 
Atrás
Arriba