Autor Tema: problemas con tablas  (Leído 2961 veces)

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

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
problemas con tablas
« en: 01 de Octubre de 2009, 10:56:29 »
hola muchachos, como han estado, deseo me ayuden esta vez en un problema que tengo con tablas, me aparece que tengo overflow en la instruccion call, y no puedo simular con porteus a consecuencia, uso tablas para mostrar numeros en un display de leds 8 por 8, son como 80 bytes los que envio al pic 16f84, con un codigo que cree para envio I2C, que puede estar pasando, desde ya muchas gracias, les adjunto el codigo fuente en asm,
« Última modificación: 01 de Octubre de 2009, 15:45:54 por un Moderador »

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: problemas con tablas
« Respuesta #1 en: 01 de Octubre de 2009, 19:06:18 »
Hola depurate mejor el código, ya en el codigo veo un call dentro de otro call, es lo que se llama anidamiento, el 16f84 soporta un maximo de 8
al que hace 9 se te desborda es decir no puedes hacer  8 call uno dentro del otro

call
call
call
call
call
call
call
call
call ERROR


de forma correcta seria

call
call
call
call
call
call
call
call
return
return
return
return
return
return
return
return

debe haber siempre su call y su return

Un saludo

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: problemas con tablas
« Respuesta #2 en: 02 de Octubre de 2009, 07:01:27 »
Hola un saludo a todos
Si, tienes un desvordamiento de la pila ,no causado por codigo, sino porque se supera el valor de la tabla
Simulalo con MPLAB dejalo un momento en funcion run ,dale a la pausa y despues a paso a paso veras
que te va de una instruccion   goto INICIO      ,al principio del programa y en consecuencia a los primeros pasos
para comenzar a leer la tabla cargando PCL con el valor de la linea   goto INICIO
Espero que te sirva de ayuda
Un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problemas con tablas
« Respuesta #3 en: 02 de Octubre de 2009, 07:26:39 »
No tienes problemas con los CALL, creo, ya que haces return de cada vez.
No te tienes que preocupar del PCLATH el prgrama solo llega a la posicion 0F3, esto lo puedes ver en el disassembly listing del menu view, de todas maneras con la tabla al principio tampoco los deberias tener. El programa esta muy desordenado y es dificil analizarlo, ya es complicado ver programas hechos por otro y si estan desordenados mas. deberias poner al principio del programa estas directivas:

   LIST   P=16F84A,            ; usar PIC 16F84A
   #include <p16f84A.inc>

   __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC   ; code protec      off      
                     ; power up timer   on      
                     ; watchdog      off
                     ; oscilador      XT
Para no tener que definir tu los SFR y solo definir tus registros.Aqui es este subforo hay un par de programas para hacer esto qe estas haciendo, y finalizados con exito, ademas tienen explicaciones de Brunof, que te aseguro que son muy buenas echales un vistazo. Me gusto mucho tu sistema de envio de datos te lo has currado
Todo este trozo de codigo no lo ejecuta al tener el punto y coma delante lo asume como comentarios.

;               incf contador,1
;               movf contador,0
;               call tabla      
;               movwf dato
;               call enviar_8bits
;               ;poner en alto RB6   "habilita septima fila
;               bcf   portb,6
;               bsf   porta,2 ;habilita strobe
;                movlw .5
;               movwf a
;load6            movlw .50
;               movwf c
;dec6            decfsz c,1
;               goto dec6
;               decfsz a,1
;               goto load6
;               bsf portb,6
;               bcf   porta,2 ;deshabilita strobe
      
      
               ;cargar 0x90 dato


;               incf contador,1
;               movf contador,0
;               call tabla      
;               movwf dato
;               call enviar_8bits
               ;poner en alto RB7   "habilita octava fila
;               bcf   portb,7
;               bsf   porta,2 ;habilita strobe
;                movlw .5
;               movwf a
;load7            movlw .50
;               movwf c
;dec7            decfsz c,1
;               goto dec7
;               decfsz a,1
;               goto load7
;               bsf portb,7
;               bcf   porta,2 ;deshabilita strobe

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problemas con tablas
« Respuesta #4 en: 02 de Octubre de 2009, 07:58:45 »
Si señor lo que te dice Juan es cierto, en el contador tienes que tener en cuenta hasta que numero va a llegar y empezar de nuevo, o en el final de la tabla hacer lo que se hace en esta

BCD7SEG:         
         addwf   PCL,1      ; Se incrementa el contador del programa
         retlw   0x3F
         retlw   0x06
         retlw   0x5B
         retlw   0x4F
         retlw   0x66
         retlw   0x6D
         retlw   0x7D
         retlw   0x07
         retlw   0xFF
         retlw   0x6F
         clrf   contador    ; al desbordar hace esto
         retlw   0x3F

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: problemas con tablas
« Respuesta #5 en: 02 de Octubre de 2009, 12:46:24 »
muy bien, voy a revisar nuevamente mi programa, si hay un call de mas voy a tratar de solucionarlo, muchas gracias muchachos, ahh, y si en verdad reconozco que sy un poco desordenado, voy a ordenar el programa, ademas tienen muy pocos comentarios, estas seguro de que hay un call de mas...

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: problemas con tablas
« Respuesta #6 en: 02 de Octubre de 2009, 12:53:48 »
eso del codigo en comentario es simplemente para deshabilitar algo que hice de mas, no hay problema con eso, si os call estan bien, y tampoco tiene problemas el pclath, que podria estar pasando

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: problemas con tablas
« Respuesta #7 en: 02 de Octubre de 2009, 13:21:30 »
Además de pedirte que ordenes un poco el programa, tienes que colocar las posiciones de memoria que ocupar el programa mediante org.

Te falta org 0x00 que es el vector de interrupción. Al no haberlo declarado, cuando ensambles en programa, la instrucción que ocupa este línea (0x00 de la memoria de programa) es la instrucción bsf   estado,5 (debido a la directiva #define banco1).

Código: ASM
  1. #define banco0          bcf     estado,5
  2. #define banco1          bsf     estado,5
  3.  
  4.                         banco1
  5.                                         clrf porta
  6.                                         clrf portb
  7.                         banco0
  8.  
  9.                                         movlw .255
  10.                                         movwf portb
  11.                                         movlw .50
  12.                                         movwf comparar_contador
  13.        
  14. clear_contador          clrf contador  
  15.        
  16.                                         goto inicio

Tienes que organizarlo de esta manera:

Código: ASM
  1. #define banco0          bcf     estado,5
  2. #define banco1          bsf     estado,5
  3.  
  4.                        org           0x00
  5.                        goto         inicio
  6.                        org           0x04
  7.  
  8.                         banco1
  9.                                         clrf porta
  10.                                         clrf portb
  11.                         banco0
  12.  
  13.                                         movlw .255
  14.                                         movwf portb
  15.                                         movlw .50
  16.                                         movwf comparar_contador
  17.        
  18. clear_contador          clrf contador
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problemas con tablas
« Respuesta #8 en: 02 de Octubre de 2009, 13:46:16 »
Lo que esta pasando "principalmente" es lo que dice Juan47 que la tabla se desborda cuando el programa llega al final de ella la primera vez, donde incremantas contador, te debes asegurar que no se desborde, o como te puse yo en la tabla, al final de ella debes resetear el contador y comenzar de nuevo.
Lo que te dice Leon_pic tambien es cierto, el pregrama debe empezar con GOTO INICIO en ORG 0X00 y no deberia tener instrucciones antes de ella.

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: problemas con tablas
« Respuesta #9 en: 09 de Octubre de 2009, 08:00:29 »
Hola un saludo
La tabla se desborda devido a la siguienta instruccion:
        subwf   contador   
Al no decir en progrma donde quieres que deje el resultado el MPLAB por deferencia te lo deja en el mismo registro
         subwf   contador,1
deberias poner
          subwf   contador ,0
para que no te modificara dicho registro
Solo con esto no te funciona el programa puesto que como te han descrito los compañeros falta un poco de organizacion
Si efectuas unos cambios dentro de la estructura del programa ,no de instrucciones ,veras que el resultado sera satisfactorio
Sin saber que mas decir mando un saludo

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: problemas con tablas
« Respuesta #10 en: 11 de Octubre de 2009, 18:23:16 »
si eso es, la tabla se desborda por esta instruccion, subwf contador, en verdad no se bien porque, podrian aclararme el tema, despues de poner como me dijiste juan47, volvio a desbordarse pero con mas lentitud, le hice algunos cambios en contador, cambie de valor y funciono, en verdad no hiba a lograr saber el error si no fuera por ustedes, gracias, solo les pido mas explicacion al respecto, puedo programar, y no teng mucho orden en los programas pero nose mucho de porque se desborda

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: problemas con tablas
« Respuesta #11 en: 12 de Octubre de 2009, 14:30:01 »
Hola un saludo a todos.
Intentare esplicartelo tal y como yo lo veo (espero que algun amable compañero corrija si cometo algun error)
La tabla tiene 50 lineas o datos para visualizar,en el programa que nos has facilitado pones hasta    load5   
load6  y  load7  estan anulados esto significa que lo que seria la fila 7y8 nose encenderian
solo se llegan a encender desde la fila 1 a 6
En consecuencia si haces un poco de calculo te daras cuenta que la tabla, osea el ultimo dato de la tabla, no te termina
en load5 (que seria la fila 6)y en consecuencia no llega a hacer la comparacion entre comparar_contador y contador,siguiendo el programa
e incrementando contador con lo cual se sale de la tabla.
Tambien comentarte que comparar_contador no debes cargarlo con    .50   ,si que hay 50 datos en la tabla pero no empieza en el 0
tienes que restarle 1 a los 50 puesto que hay una operacion  addwf  pcl,1
deberias cargarlo con 49
No se si te he ayudado ,espero que algun compañero con mas experiencia que yo sepa esplicartelo con mas detalle
Un saludo

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: problemas con tablas
« Respuesta #12 en: 14 de Octubre de 2009, 12:36:12 »
muchas gracias juan, me sirvio bastante tu explicacion, ya puedo leer la tabla con el 16f84, esta tabla tiene 248 datos, ahora mi problema es que tengo otra tabla de 200 datos que quiero leer y no puedo, segun leí es el pclath que me falta direccionar, pero aun tengo mis dudas de que este tipo de pic se pueda direccionar, al simular el pic simplemente vuelve a leer la primera tabla ignorando la segunda, creo que con este micro solo puedo leer el contenido de una tabla, es cierto??  o estoy mal?? gracias desde ya

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: problemas con tablas
« Respuesta #13 en: 14 de Octubre de 2009, 13:20:41 »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: problemas con tablas
« Respuesta #14 en: 19 de Octubre de 2009, 19:33:57 »
gracias en verdad, esta muy interesante el tutorial que enviaste, muy bueno, me sirvio mucho, voy a seguir investigando y voy a ir probando, aunque sigo con algunas dudas voy a aclararlas leyendo un poco mas, se que es eso lo que me falta, pero de todos modos se que cuento con ustedes, gracias y ml¡il gracias


 

anything