Hola a todos, os intentaré explicar lo mejor posible mi problemilla.
Estoy haciendo un programilla bastante largo con el 16F877 y al compilar me dice Crossing page boudary, al estudiar que era me di cuenta que me pasaba de memoria en el banco 0 , coji el datasheet y hice lo que ponia para cambiar de PAGINA, que es lo siguiente.
ORG 0x500
BCF PCLATH,4
BSF PCLATH,3 ;Select page 1 ;(800h-FFFh)
CALL SUB1_P1 ;Call subroutine in
: ;page 1 (800h-FFFh)
:
ORG 0x900 ;page 1 (800h-FFFh)
SUB1_P1
: ;called subroutine
;page 1 (800h-FFFh)
:
RETURN ;return to
;Call subroutine
;in page 0
;(000h-7FFh)
Pues bien lo aplique a mi programa, pero no me funciona, no me llama a la pagina1, os adjunto parte de mi programa a ver si alguien me puede iluminar por donde esta el camino.
PD: al compilar no me da error sino WARNING pero no funciona al programarlo en placa. Si alguien quiere ver el programa COMPLETO NO TENGO INCONVENIENTE. GRACIAS
org 00h ;Vector de RESET
goto INICIO
; ORG 04h ; VECTOR INTERRUPCIàN
org 0X005
INICIO BANK1 ;Selecciona el banco 1 de datos
movlw b"11110000" ;RC se programan TODAS como SALIDAS EXCEPTO RB7 QUE ES ENTRADA
movwf TRISC ;
clrf TRISB ;RB se programa como salida
movlw b"00010000" ;RA,4 se programan como entradas
movwf TRISA ;RA<0,2,3> se programan como salidas
movlw B"00001110" ; Configuraci¢n de pines del ADCON1 como
movwf ADCON1 ; entradas.RA0 y RA1=Anal¢gicas,RA2 Digital y Vref=Vdd.
movlw b"10000111"
movwf OPCION ;Asigna preescaler al TMR0
bcf STATUS,5 ;Selecciona el banco 0 de datos
MOVLW b"10000000" ; CARGAS EL PERMISO INTERRUPUCIONES
MOVWF INTCON
call LCD_INI ;*************
clrf bit_delay ;pongo el BIT_delay a 0, para que por defecto haga delay
clrf BIT_90
bcf RA,1 ;Desactiva RS del m¢dulo LCD
bcf RA,2 ; Desactiva E del m¢dulo LCD
;********************************************************************
; CONFIGURA LA POSICIÓN DONDE DEBE EMPEZAR A ESCRIBIR EN LA LCD *
;********************************************************************
WRITE BANK1
CLRF TRISB ; PONGO EL PORTB COMO SALIDAS PARA PODER ESCRIBIR
BANK0
movlw 1 ; cARGO TIEMPO en 1ms tiempo para que le de a la LCD a pillar datos
movwf TEMPO1 ;Temporiza 100mS
call DELAY10_1
movlw Borrar_LCD ; Borrar LCD y Home
call LCD_REG
CALL LCD_INI
movlw 0x80 ;0 1era linea IZqui es: 0x80H donde tiene que empezar
call LCD_REG
movf OFFSET,0
call MENS ;Envia 1 er Mensaje
movlw 0xc0 ; 0 Dirección 2a línea donde tiene que empezar
call LCD_REG
; *****_-___----__ AQUI SELECIONO LA PAGINA --------
BCF PCLATH,4 ; PAGINA 1
BSF PCLATH,3
CALL INC_OFFSET ; envio a la pagina
movf OFFSET,0 ; carga el offset en W para enviarlo
call MENS ; Envia 2 línea de caracter.
fin goto fin
ORG 0X800 ; PAGINA 1
;********************************************************************
; INCREMENTA EL OFSSET EN 17 CARACTERES *
;********************************************************************
INC_OFFSET movlw 0x11 ;2b
movwf CONT
OFFSET_15 INCF OFFSET,1
DECFSZ CONT,1
GOTO OFFSET_15
RETURN