Autor Tema: tablas mayores a 255 o varias tablas??  (Leído 3555 veces)

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

Desconectado Gokuden

  • PIC16
  • ***
  • Mensajes: 100
tablas mayores a 255 o varias tablas??
« en: 05 de Abril de 2005, 23:12:00 »
buenas.

posteo aqui una duda que se que a muchos los acoje. programando en asm, ciertas tablas, he tenido el problema que el pcl se desborda, usando un 16f877 o cualquier otro micro pic, programe dos tablas de 200 datos cada una y se reseteaba cuando iba por la 50 aprox de la segunda tabla.

simule el programa en el mplab y efectivamente el pic se va a incio al desbordarse el pcl.

como logro hacer varias tablas y aprovechar los8k  de dats que posee el micro.
vi lo de direccionamiento indirecto indr y fsr pero segun vi era para la memoria ram y no se como se aplicaria a la memoria de programa..

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: tablas mayores a 255 o varias tablas??
« Respuesta #1 en: 05 de Junio de 2005, 02:40:00 »
          Por la arquitectura de los PIC no podras realizar tabla que contengan mas de 256 pocisiones en total, y como tu ya lo dices anteriormente el cambio de banco de memoria es solo para la RAM por lo cual no funciona para la memoria de programa, un saludo y suerte.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: tablas mayores a 255 o varias tablas??
« Respuesta #2 en: 05 de Junio de 2005, 17:13:00 »
Tu problema es simple de resolver.
Tienes 2 tablas de 200 valores y como dice el amigo Chaly29 no puedes poner más de 256 valores por tabla porque el pcl se desborda. Pero para estos menesteres tenemos el registro pclath, que nos almacena los 5 bits más significativos del contador de programa. Con un ejemplo todo más claro:

Codigo:
   org   0x00   ;Vector de reset

   goto   inicio

   org   0x04

   goto   isr

;El indice de la tabla viene en el registro "w".
;Éste se guarda en el temporal "temp0". El resultado se devuelve en el "w".
   
tabal1   movwf   temp0
   clrf   pclath      ;Con esto nos aseguramos de que estamos en la primera zona de la primera página de programa (0~255)
   movf   temp0,w
   addwf   pcl,f
   retlw   0x96      
   retlw   0x94
   retlw   0x92
   retlw   0x90
   -------------------      ;Resto de la tabla


   org   0x100      ;Colocamos la siguiente tabla en la posición 256 de la memoria de programa

;El indice de la tabla viene en el registro "w".
;Éste se guarda en el temporal "temp0". El resultado se devuelve en el "w".
   
tabla2   movwf   temp0
   movlw   0x01
   movwf   pclath      ;Con esto nos aseguramos de que estamos en la segunda zona de la primera página de programa (255~511)
   movf   temp0,w
   addwf   pcl,f
   retlw   0x96      
   retlw   0x94
   retlw   0x92
   retlw   0x90
   -------------------      ;Resto de la tabla


Jugando con el pclath podemos aprovechar al máximo la memoria de programa cuando la rellenemos con tablas

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: tablas mayores a 255 o varias tablas??
« Respuesta #3 en: 05 de Junio de 2005, 20:57:00 »
RebotadoRebotado realmente una explicacion sin desperdicio!!!! RebotadoRebotado

y agregando.... cuando necesitas mas de 255 valores (que por el encabezamiento que se necesita... tampoco pueden ser 255 loco ), pero si se podria realizar una "pre trabla" que compare, y luego salte a la tabla uno o tabla dos.... Sonrisa Gigante
un abrazo!


Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado PIC_ELECTRON

  • PIC10
  • *
  • Mensajes: 3
Re: RE: tablas mayores a 255 o varias tablas??
« Respuesta #4 en: 06 de Septiembre de 2009, 14:20:17 »
Tu problema es simple de resolver.
Tienes 2 tablas de 200 valores y como dice el amigo Chaly29 no puedes poner más de 256 valores por tabla porque el pcl se desborda. Pero para estos menesteres tenemos el registro pclath, que nos almacena los 5 bits más significativos del contador de programa. Con un ejemplo todo más claro:

<span class="texto_mini">Codigo:</span>
   org   0x00   ;Vector de rese
t

   goto   inicio

   org   0x04

   goto   isr

;El indice de la tabla viene en el registro "w".
;Éste se guarda en el temporal "temp0". El resultado se devuelve en el "w".
   
tabal1   movwf   temp0
   clrf   pclath      ;Con esto nos aseguramos de que estamos en la primera zona de la primera página de programa (0~255)
   movf   temp0,w
   addwf   pcl,f
   retlw   0x96      
   retlw   0x94
   retlw   0x92
   retlw   0x90
   -------------------      ;Resto de la tabla


   org   0x100      ;Colocamos la siguiente tabla en la posición 256 de la memoria de programa

;El indice de la tabla viene en el registro "w".
;Éste se guarda en el temporal "temp0". El resultado se devuelve en el "w".
   
tabla2   movwf   temp0
   movlw   0x01
   movwf   pclath      ;Con esto nos aseguramos de que estamos en la segunda zona de la primera página de programa (255~511)
   movf   temp0,w
   addwf   pcl,f
   retlw   0x96      
   retlw   0x94
   retlw   0x92
   retlw   0x90
   -------------------      ;Resto de la tabla


Jugando con el pclath podemos aprovechar al máximo la memoria de programa cuando la rellenemos con tablas


Hola,mi pregunta es porque al ver lo que señalaste,de colocar varias tablas de como maximo 255 VALORES,hasta ahi lo entiendo,pero no me queda claro ,que bits del PCLATH estas escribiendo para despalazarte 256 POSICIONES,no deberia ser ,que estas en la OTRA PAGINA,si varias el PCLATH,ya que con el PCL,solo podes recorrer 256 posiciones ,desde la que
estas,y estas diciendo,que DENTRO,de la misma pagina,te podes ir corriendo con el PCLATH,lo cual creo que es erroneo,con el PCLATH,cambias de pagina,es decir,de a 2048 posiciones.