Autor Tema: problema con 16f876 y cambios de pagina  (Leído 2110 veces)

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

Desconectado Loren_Son

  • PIC10
  • *
  • Mensajes: 12
problema con 16f876 y cambios de pagina
« en: 26 de Mayo de 2005, 16:06:00 »
muy buenas, estoy haciendo el programa para mi proyecto y me he pasado de una pagina. Leyendo he entendido que hay que estar jugando con las paginas y tal. Me gustaria que me digeran si el ejemplo de codigo que voy a poner se ejecutaria correctamente. GRACIAS


                 ORG          0000H
                 goto          PROGRAMA


                 bcf             PCLATH, 4
                 bsf             PCLATH, 3           ; Cambio a pagina 1

                 call            FUNCION1

                 PEPE         (RESTO DEL PROGRAMA)



                 ORG           0800H                ; primera pos de pagina 1

funcion_X  (hace cualquier cosa)
                 return

FUNCION1
                    llama a funcion_X

                   return

                   end

¿Se ejecutaria la FUNCION1? si es asi ¿Se ejecutaria funcion_X? y si esto es asi, al retornar de FUNCION1, continuaria ejecutando PEPE.

¿Como conseguir que esto se ejecutase?

MUCHAS GRACIAS

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: problema con 16f876 y cambios de pagina
« Respuesta #1 en: 26 de Mayo de 2005, 17:00:00 »
Buenas de nuevo Loren_Son.

En tu ejemplo todas las rutinas se ejecutan correctamente.
Cuando haces el primer call, los 13 bits del pc antes del salto, se guardan en la pila del PIC.
Después se coge la dirección de salto de la siguiente forma: los 11 bits lsb de la instrucción "call" y los 2 bits msb del pclath. Esta operación se hace SIEMPRE en una instrucción call o goto. El pclath, por tanto es el que decide si el salto se hace a la página 0, 1 , 2 ó 3 de programa. En el ejemplo, como el pclath apunta a la página 1, el salto es correcto.
Cuando haces el segundo call ocurre lo mismo sólo que en este caso el pclath apuntará a la propia página 1.
Cuando haces el último return, los 13 bits almacenados en la pila se restauran en el pc, por lo que la siguiente instrucción que se ejecutará será la correspondiente al código "PEPE".

Todo corrrecto entonces.RebotadoRebotadoRebotado

Desconectado Loren_Son

  • PIC10
  • *
  • Mensajes: 12
RE: problema con 16f876 y cambios de pagina
« Respuesta #2 en: 29 de Mayo de 2005, 09:27:00 »
antoniof, aki tengo el mas dificil todavia. He hecho un programa de prueba para verificar que el ejemplo que expuse funcionaba, y si fue así. Entonces decidí ponerme a hacer realmente el programa de mi proyecto basandome en dichas pruebas.

En ambos casos, desde la pagina cero, donde está el programa principal, hago la siguiente llamada:

                           PAGESEL     INI_LCD
                           lcall             INI_LCD

en ambos casos la funcion INI-LCD se encuentra en la pagina 2. Despues de esto, tambien en ambos casos llamo a una funcion que genere un mensaje, que estan tambien en la pagina 2. La llamada la hago de la misma forma.

He de decir, que antes del return de INI_LCD, pongo el PCLATH como 00, osease, que retorne a la pagina cero.

El ejemplillo se ejecuta correctamente, pero mi programa no. ¿A que pùede ser debido? Estoy pensando en las direcciones de programa, que no se puedan tocar desde cualquier página ¿alguen sabe si estoy desencaminado?

Antoniof, te voy a mandar ambos códigos, por si puedes hecharles un vistazo, que te agradecería muchísimo, porque cada vez hay menos tiempo, y cada vez me desespero mas.

Si alguien mas quiere ver esos programas, no tiene mas que pedirlos, muchas gracias.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: problema con 16f876 y cambios de pagina
« Respuesta #3 en: 29 de Mayo de 2005, 18:43:00 »
Ya te he respondido por privado