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.
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.