Autor Tema: como funciona la directivas DT  (Leído 4915 veces)

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

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
como funciona la directivas DT
« en: 16 de Junio de 2004, 21:07:00 »
hola a todos
necesito conoser como funciona el direcionamiento de tablas con la directivas DT ya que nunca la e usado antes y tengo que hacer un programa con muchas tablas con valores distintos y de la otra forma se me cuerga el micro uso un f877a y cuando uso mas de 3 tablas la cuarta se cuerga.
cada tabla tiene 32 estados.
deseo saber como se usa esa directiva DT.

gracias a todos desde Rep. Dom.
                                                             miltonmmc

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: como funciona la directivas DT
« Respuesta #1 en: 17 de Junio de 2004, 17:48:00 »
Para simplificar el uso de las instrucciones retlw  el ensamblador MPASM facilita la directiva  DT  (Define Tabla) que sustituye el empleo repetitivo de muchas instrucciones  retlw. Su sintaxis es:

DT <expr> [, <expr>, …., <expr>]

Esta directiva genera durante la fase de ensamblado instrucciones retlw, una instrucción por cada  <expr>. Cada carácter de una cadena es almacenado en su propia instrucción  retlw.
Ejemplo:

   DT "MaR", 0x10, .15

Esta directiva genera las instrucciones:

   retlw    0x4D   ; (‘M’ en ASCII)
   retlw    0x61   ; (‘a’ en ASCII)
   retlw    0x52   ; (‘R’ en ASCII)
   retlw    0x10   ; (16 en decimal)
   retlw    0x0F   ; (15 en decimal)


Debes tener cuidado de situar todas las directivas DT dentro de las primeras 256 posiciones del programa para no tener problemas, de esta forma:


ORG  0x00
goto  Inicio

ORG 0x04
goto  Interrupcion    ; Aquí el salto a la subrutina de atención a la interrupción

Tabla1
addwf   PCL,F
DT .....           ;Aquí las directivas DT

Tabla2
addwf   PCL,F
DT .......

Inicio            ; Aquí el inicio real del programa

.....

movlw PosicionTal       ; Aquí recoge los valores de la tabla.
call Tabla1 ....
......

movlw PosicionCual
call Tabla2
....


Espero haberte ayudado.

Adrian.

Desconectado elreypic

  • PIC12
  • **
  • Mensajes: 79
RE: como funciona la directivas DT
« Respuesta #2 en: 18 de Junio de 2004, 17:31:00 »
Que tal Milton y Adriana, espero se encuentren bien.

Hablando un poquito mas de las tablas, me gustaría comentarles y pasarles el tip de cómo llamar las tablas cuando estas estan colocadas despues de las primeras 255 direcciones de programa.

Una forma de hacerlo es usando la directiva del ensambler LCALL, es decir: LCALL   Tabla1.

Y la ota es modificando la parte alta del registro de contador de programa; es decir, el PCLATH.

Cabe hacer mención que con el uso del LCALL es mas efectivo y mas sencillo, ahora recuerden, que esta directiva agrega dos intrucciones al CALL. Para mejor referencia ver el MPASM and MPLINK PICmicro QUICK REFERENCE GUIDE.

Saludos y suerte.

Miguel Angel.

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
RE: como funciona la directivas DT
« Respuesta #3 en: 18 de Junio de 2004, 20:48:00 »
hola a todos
 
gracias adrian2a1 y reypic.

yo estaba un poco confundido con lo de las tablas y el mplab
y no tenia conosimiento de que me pasaba cuando ponia las tablas
despues de 255 direcciones de programa y cuando llamaba esas tablas fallaba el programa en ese momento.
me gustaria saber un poco mas del directiva LCALL y como funciona porque despues de que corregi mi programa tengo funcionando 7 tablas de 32 estados cada una  y antes solo 3
por tenerlas despues de las 255 primeras direcciones y en mi caso
mi programa llama muchisimas tablas mientra mas mejor por eso deseo saber un poco mas.
de cuarquiel modo gracias a todos por su ayuda.
saludos desde rep. dom.
                                                 miltonmc
                                           

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: como funciona la directivas DT
« Respuesta #4 en: 19 de Junio de 2004, 06:16:00 »
LCALL es una instrucción de la gama alta de microcontroladores de 16 bits.

Para los microcontroladores de la gama media de 14 bits
(PIC16F84, PIC16F87x, etc), LCALL no es una instrucción del microcontrolador,
sino que el ensamblador MPASM interpreta LCALL
como una "instrucción especial" que genera otras tres instrucciones básicas:
dos para posicionar los bits 3 y 4 del PCLATH y otra para el call.
Se suele utilizar para llamadas a subrutina por encima de los 2 k.

Ahora bien, el problema del manejo de las tablas no es la llamada "call"
sino la instrucción "addwf PCL,F", ya que al ejecutar esta instrucción
los 5 primeros bits del PCLATH son transferidos al registro PCH del
contador de programas, y por tanto cuando se utiliza esta instrucción
hay que asegurarse que el registro PCLATH tiene el valor correcto,
porque si ésto no es así, el salto es impredecible.
Esto suele ocurrir cuando el valor de PCL se desborda sin que el registro
PCLATH se incremente convenientemente, por eso en las primeras 256 posiciones
no hay problema, porque PCL no se puede desbordar.

Una solución para utilizar tablas por encima de las primeras 256 posiciones,
la he encontrado muy bien xplicada en un documento en www.pic16f84a.com.
He intentado subirlo al foro, pero no me deja.

Saludos.

Adrian.


 

anything