Autor Tema: Llamar a una rutina en la pagina 1 desde la pagina 0  (Leído 1739 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jboond

  • PIC10
  • *
  • Mensajes: 1
Llamar a una rutina en la pagina 1 desde la pagina 0
« en: 12 de Marzo de 2004, 04:37:00 »
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    

Desconectado andresbalaguera

  • PIC10
  • *
  • Mensajes: 20
RE: Llamar a una rutina en la pagina 1 desde la pagina 0
« Respuesta #1 en: 14 de Marzo de 2004, 03:45:00 »
Si está seguro que el resto del código esta bien, solo repita el proceso después de la llamada (call) ejem.



BCF PCLATH,4 ; PAGINA 1
BSF PCLATH,3

call   i nc_offset

bcf   pclath,3    ; page 0
bcf   pclath,4