Autor Tema: Problema bancos y direccionamiento directo...(-SOLUCIONANDO-)  (Leído 2357 veces)

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

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Problema bancos y direccionamiento directo...(-SOLUCIONANDO-)
« en: 22 de Junio de 2007, 00:51:09 »
Hola… hace varias semanas que estoy leyendo este excelente foro, por eso, primero y principal debo felicitar a todo por el lugar que han generaron…
Mi pedido de ayuda se refiere a que estoy programando un pic16f877A y ya llene los 96 bytes del registro general del bank 0, así que necesito usar el de los demás banco. Pero cuando los trato de usar cualquier registro de cualquiera de los restantes bancos en modo directo, siempre se modifica la misma el registro correspondiente a la dirección ubicada en el banco 0.
En que me estoy equivocando tan feo que no lo logro ver…….?????


       …
      …
      …
A1_A      CALL   ESCRIT
      CALL   BANK0
      BCF      PORTD,2
      BSF      PORTD,2
      DECFSZ   CONTLE,F
      GOTO   A1_A
      MOVLW   H'FF'
      MOVWF   CONTLE
      …
      …
      …

con solo modificar esta parte,  pasando el registro contle al bank1 o 2 o 3 surge el error… :? :? :?
      
      …
      …
      …
A1_A      CALL   ESCRIT
      CALL   BANK0
      BCF      PORTD,2
      BSF      PORTD,2
      BSF   STATUS,RP0
      BCF   STATUS,RP1
      DECFSZ   CONTLE,F
      GOTO   A1_A
      MOVLW   H'FF'
      MOVWF   CONTLE
      BCF   STATUS,RP0
              BCF   STATUS,RP1
      …
      …
      …
« Última modificación: 22 de Junio de 2007, 20:28:16 por picnic »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Problema bancos y direccionamiento directo...
« Respuesta #1 en: 22 de Junio de 2007, 01:48:32 »
hola, mm que extraño pues deberia funcionar como lo has puesto, acabo de probar tu codigo y si funciona, podrias pegar todo tu codigo, derepente la falla esta por otro lado.  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Problema bancos y direccionamiento directo...
« Respuesta #2 en: 22 de Junio de 2007, 02:09:50 »
Gracias por responder... el código hasta ahora lleva 1300 líneas un poco mucho para poner... no??
Lo raro que funciona bien hasta que modifico eso...
 con el sim funciona bien pero cuando lo pruebo en el circuito empieza los errores, el registro CONTLE lo uso solo ahí, pero interactúa con el registro del bank0 de la misma posición….
Pensando que el error se podía dar al revés, o sea que por algún error cuando uso el registro del bank0 lo guarde en otro banco, le agregue a un salto de banco antes de usarlo.
Pero sigue haciendo lo mismo… :shock: :shock:

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema bancos y direccionamiento directo...
« Respuesta #3 en: 22 de Junio de 2007, 03:45:47 »
Hola. Ante que nada me disculpo si lo que voy a decir es una tontería y poco profecional (de echo creo que lo es).

Cuando a mi me pasa lo mismo que funciona en el sim pero al ejecutarlo en la vida real (por llamarlo así) no funciona, coloco varias interrupciones en lugares estratégicos  para saber hasta donde llega el CP o PC, normalmente, le hago encender led en forma binaria y anotando en un papel que interrupción corresponde a cada balor binario y tengo que confirmar por medio de una tecla para que el CP pueda seguir avanzando. Debo aclarar que esto lo hago cuando no se que hacer y no puedo encontrar la solución en la simulación, y no siempre se puede hacer debido al circuito o hardware.

Lo que te recomiendo es que cheques el ruido, porque a mi me paso que era una gran casualidad. Este último suena tonto con lo que acabas de decir: cuando lo modificas y deja de funcionar. En fin

Como consejo más profecional debes chequear que el registro CONTLE no este creando un conflicto con otras intrucciones, ya que no debe ser casualidad este fallo (obvio)

Esta respuesta son sobre dudas ya que estoy tratando un problema a ciegas.

Saludos :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Problema bancos y direccionamiento directo...
« Respuesta #4 en: 22 de Junio de 2007, 03:58:19 »
Gracias leon pic por tu tiempo y tu idea :)
 voy a probar modificando el programa y poner interrupciones con semaforos a ver si lo logro encontrar...
Ya me estan saliendo canas verdes con este programa.... que hasta parece que tengo una peluca... :D :D

Salu2

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Problema bancos y direccionamiento directo...
« Respuesta #5 en: 22 de Junio de 2007, 20:26:05 »
POR FIN LO ARREGLE!!!!… 24hs para salucionario...  :-/ :-/ :-/ :-/
El tema era así…
Como estoy trabajando con el 16F877A tiene cuatro bancos de memoria, y si se trabaja con interrupciones no sirve el solo hecho de guardar primero el registro W y el STAUTS…

          ….
         ….
INTERRUPCION   MOVWF    REG_W
           SWAPF    STATUS,W
           MOVWF    REG_status
           BCF      STATUS,RP0    ;VOY AL BANCO 0
                 BCF      STATUS,RP1   
         ::::::::::
         ::::::::::
   SALIDA      SWAPF   REG_status,W
         MOVWF    STATUS
         SWAPF    REG_W,F
         SWAPF    REG_W,W
         RETFIE

… no sirve porque no se sabe de qué banco se viene.
Sabiendo esto de antemano había hecho lo siguiente,,,,,

INTERRUPCION  MOVWF      REG_W
         SWAPF         STATUS,W
         MOVWF        REG_status
         MOVF        STATUS,W
         MOVWF        REG_status2
      BCF      STATUS,RP0    ;VOY AL BANCO 0
         BCF      STATUS,RP1         
                        ::::::::::
         ::::::::::
   SALIDA      MOVF      REG_status2,F
         MOVWF   STATUS
          SWAPF     REG_status,W
         MOVWF    STATUS
         SWAPF    REG_W,F
         SWAPF    REG_W,W
         RETFIE

Si bien funcionaba esta mal porque la copia del registro status no se en donde la estoy guardando y si se va a una interrupción desde un banco que no sea 0 se van a cambiar los registros en la interrupción.
Entonces porque mi programa funcionaba si se accedía a la interrupción por medio de tmr1
Y tenía continuos saltos a los de mas bancos y dejaba de funcionar bien cuando le agregaba  parte mencionada antes ….?????????
AUTORESPUESTA: por el simple hecho de que la parte agregada esta en la parte principal del programa y hay mas posibilidades de que se produzca un llamado de interrupción en ese momento que se encuentra en el banco 0….

 INTERRUPCION   MOVWF    REG_W
         SWAPF      STATUS,W
         MOVWF      REG_status
         MOVF      STATUS,W
         BCF      STATUS,RP0    ;VOY AL BANCO 0
         BCF      STATUS,RP1   
             MOVWF         REG_status2
         ::::::::::
         ::::::::::
   SALIDA       MOVF     REG_status2,F
         MOVWF   STATUS      ;voy al banco donde guarde los registro.......
           SWAPF    REG_status,W   
         MOVWF    STATUS
         SWAPF    REG_W,F
         SWAPF    REG_W,W
         RETFIE

Para finalizar los registros REG_W, REG_status y REG_status2, deben tener la misma dirreccion para los 4 bancossss o sea dejar espacios en blanco reservados.... :-/ :-/ :-/


 

anything