Autor Tema: Algunas directivas útiles en ASM  (Leído 10148 veces)

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

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Algunas directivas útiles en ASM
« en: 02 de Enero de 2010, 15:59:13 »
.

(Agregado 04/01/10):
Nota: TODAS las directivas son no-case-sensitive. Da lo mismo poner Banksel, BANKSEL, banksel, etc.

BANKSEL
Sintaxis:   BANKSEL   registro
Agrega las instrucciones necesarias (BSF y BCF en los registros FSR o STATUS) para cambiar al banco donde se encuentra el registro indicado.

Ejemplo:
Código: ASM
  1. BANKSEL TRISA   ; Cambia al banco donde esta TRISA
  2.         MOVLW   0x00
  3.         MOVWF   TRISA   ; Configura el puerto como salida
  4.         BANKSEL PORTA   ; Cambia al banco donde esta PORTA
  5.         MOVLW   0x08
  6.         MOVWF   PORTA   ; Mueve 0X08 a la salida del puerto

DE
Sintaxis: [etiqueta]   DE   exp1[, exp2, exp3, ... ]
Indica al compilador los valores (exp1, exp2, etc) que tendrán los registros de la eeprom de datos (en caso de tener) luego de programar el PIC.
Para especificar que los valores exp se guardarán a partir de la primera dirección, se debe anteponer a la línea de la directiva:
- Para PIC18:   ORG   0xF00000
- Para PIC1x:   ORG   0x2100

Ejemplos:
Código: ASM
  1. ORG     0x2100
  2. psswrd  DE      0x00, 0x34, 0x55, 0x00


Código: ASM
  1. ORG     0x2110                  ; Indica la direccion 0X10 de la eeprom
  2.         DE      "PROGRAMA DADO"         ; y guarda una cadena de caracteres


DT
Sintaxis: [etiqueta]   DT   exp1[, exp2, exp3, ... ]
Crea una serie de instrucciones RETLW con los valores dados por exp1, exp2, etc. SOLO PARA PIC12/16.

Ejemplos equivalentes:
Código: ASM
  1. TABLA
  2.         ADDWF   PCL,F
  3.         RETLW   B'01100110'
  4.         RETLW   B'11111000'
  5.         RETLW   B'00011100'

Código: ASM
  1. TABLA
  2.         ADDWF   PCL,F
  3.         DT      B'01100110', B'11111000', B'00011100'

CBLOCK - ENDC
Sintaxis:
   CBLOCK   [exp]
[etiqueta1[:bytes]
[etiqueta2[:bytes]
etiqueta3[:bytes]]

...
   ENDC
Asigna una etiqueta determinada a una lista de registros de la memoria RAM comenzando por la dirección exp. Si no se especifica una dirección exp, se inicia con la última dirección puesta en una directiva CBLOCK anterior.
También puede asignarse una etiqueta a un grupo de registros (algo así como los vectores en C) especificando el número de bytes de RAM que ocupará una misma etiqueta.

Ejemplos:
Código: ASM
  1. CBLOCK 0x20
  2. BANDERA                 ; Se asigna la etiqueta BANDERA al registro 0X20
  3. CONT1                   ; Se asigna la etiqueta CONT1 al registro 0X21
  4. CONT2                   ; Se asigna la etiqueta CONT2 al registro 0X22
  5.         ENDC
  6.  
  7.         CBLOCK
  8. NUM                     ; Se asigna la etiqueta NUM al registro 0X23
  9.         ENDC

Código: ASM
  1. CBLOCK  0x0C
  2. DOBLE:2                 ; Se asigna la etiqueta DOBLE a los registros 0X0C y 0x0D
  3.         ENDC
  4.  
  5. ...
  6.  
  7.         MOVLW   0x90
  8.         MOVWF   DOBLE   ; Se guarda 0x90 en el registro 0x0C
  9.         MOVLW   0x3F
  10.         MOVWF   DOBLE+1 ; Se guarda 0x3F en el registro 0x0D


Estas son las que más me han servido por el momento. Invito a que investiguen un poco más (hay muchas más directivas que estas) en el archivo de ayuda del MPASM.
¡Saludos!
« Última modificación: 04 de Enero de 2010, 16:11:50 por mtristan »
When you see a good move, look for a better one (Emanuel Lasker)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #1 en: 02 de Enero de 2010, 18:37:24 »
buena propuesta :mrgreen: estaremos atentos

un saludo


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Algunas directivas útiles en ASM
« Respuesta #2 en: 02 de Enero de 2010, 21:27:45 »
Otras directivas muy útiles son pagesel, lgoto y lcall para el manejo de páginas de micros que poseen más de una como por ejemplo el 16F877:


Estas directivas agregan automáticamente las instrucciones de control sobre los bit 3 y 4 de PCLATCH.

Ejemplos:

Código: ASM
  1. Pagesel         Rutina
  2.         Call            Rutina
  3. ; Seria equivalente a:
  4.         Lcall           Rutina
  5.  
  6.         Pagesel         Rutina2
  7.         Goto            Rutina2
  8. ; Seria equivalente a:
  9.         Lgoto           Rutina2


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #3 en: 03 de Enero de 2010, 10:34:09 »
mmmm.... yo normalmente consulto aqui por si le vale a alguno como yo que no le de al ingles, pero lcall/lgoto no las conocia. mu guapas para ahorrarse unas lineas ;-)

un saludo


Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Algunas directivas útiles en ASM
« Respuesta #4 en: 03 de Enero de 2010, 12:19:50 »
Muy buen tema. Algo de aclarar, es que esto solo sirve para el MPASIM - MPLAB.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Algunas directivas útiles en ASM
« Respuesta #5 en: 04 de Enero de 2010, 16:08:41 »
.


Un par más:

FILL
Sintaxis: etiqueta   FILL   exp, end
Llena la memoria de programa (a partir de su aparición) con la constante exp. Si end es un número, indica cuántos registros de memoria se llenarán. Si se desea llenar hasta la aparición de una etiqueta, se debe poner (en el lugar de end): etiqueta-$
Si se quiere llenar la memoria con una instrucción, se la pone en lugar de exp entre paréntsis.

Ejemplos:
Código: ASM
  1. NADA    FILL    (NOP),10        ; Llena las proximas 10 direcciones con instrucciones NOP

Código: ASM
  1. FILL    0x1010,FINAL-$  ; Llena con 0X1010 los registros de la memoria de programa hasta la etiqueta FINAL
  2.         ORG     0x50
  3. FINAL
  4.         END


IFDEF - ELSE - ENDIF
Sintaxis:
   IFDEF   etiqueta
(BLOQUE DE PROGRAMA A)
   [ELSE
(BLOQUE DE PROGRAMA B)]
   ENDIF
Compila un bloque de programa si una etiqueta ha sido definida previamente (con la directiva #DEFINE). Si no, compila el bloque debajo de ELSE. Si no se agrega la directiva ELSE, no se compila nada hasta ENDIF.
Resulta útil para crear archivos .inc con distintas rutinas que se utilizan o no dependiendo del caso. Por ejemplo, en un archivo con rutinas para manejo de LCD se pueden agregar rutinas de inicialización distintas (para distintos controladores) y sólo compilar la necesaria en el proyecto.

Ejemplo:
Código: ASM
  1. ; En el encabezado del programa principal:
  2.         #DEFINE INIT2
  3.  
  4. ...
  5.  
  6. ; En el archivo .inc:
  7.         IFDEF   INIT1
  8. (RUTINA DE INICIALIZACION 1)
  9.         ENDIF
  10.  
  11.         IFDEF   INIT2           ; Esta es la que se compilara.
  12. (RUTINA DE INICIALIZACION 2)
  13.         ENDIF
  14.  
  15.         IFDEF   INIT3
  16. (RUTINA DE INICIALIZACION 3)
  17.         ENDIF

PD1: Gracias por agregar PEGESEL, Suky. Tenía miedo de ponerla porque no le he usado nunca (por el momento me alcanza con el 16F628A  :mrgreen:)
PD2: ¿Por qué sólo sirven para el MPLAB?


When you see a good move, look for a better one (Emanuel Lasker)

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #6 en: 04 de Enero de 2010, 17:05:41 »
pues no es precisamente una directiva pero es otra forma de ahorrar lineas, u de pensar. pero aun no le cogi el truquillo, os lo paso y si podeis me contais si habeis echo algo parecido y como lo habeis solucionado, o por si os da alguna idea ;-)
se me ocurrio que para generar una tabla de forma automatica podria hacer esto;
   dt    .0,   (($-1+1)),   (($-1+1)),   (($-1+1)),   (($-1+1)),   (($-1+1))   si se le pone .20 por ej en el primero empieza a partir de ahí
y el compilador hacia justo eso, sumaba uno al valor de la linea anterior :mrgreen:
 pero intente esto
   DT   .0, (($-1+2)), (($-1+2)), (($-1+2)), (($-1+2)),
y me dijo que naranjas. sigue sumando uno.
 tambien asi no da error al compilar
#define eco   .3
#define L      .2
dt    .0,   (($-1+eco+L)),   (($-1+eco+L)),   (($-1+eco+L)),   (($-1+eco+L))
y que va se niega, empieza por .20 y suma uno al siguiente, mas uno, mas uno..... no multipilca ni resta.
 asi por ej.
   DT   .10, (($-1-2)), (($-1-2)), (($-1-2)), (($-1-2)),
lo que sale es 0xa, oxfe, 0xff, 0, 0x1   :shock: aqui ya si que me perdi, pero algo hace

 :shock: :shock: :shock: seguire dandole a ver si lo saco

un saludo

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Algunas directivas útiles en ASM
« Respuesta #7 en: 04 de Enero de 2010, 19:46:15 »
pues no es precisamente una directiva pero es otra forma de ahorrar lineas, u de pensar. pero aun no le cogi el truquillo, os lo paso y si podeis me contais si habeis echo algo parecido y como lo habeis solucionado, o por si os da alguna idea ;-)
se me ocurrio que para generar una tabla de forma automatica podria hacer esto;
   dt    .0,   (($-1+1)),   (($-1+1)),   (($-1+1)),   (($-1+1)),   (($-1+1))   si se le pone .20 por ej en el primero empieza a partir de ahí
y el compilador hacia justo eso, sumaba uno al valor de la linea anterior :mrgreen:
 pero intente esto
   DT   .0, (($-1+2)), (($-1+2)), (($-1+2)), (($-1+2)),
y me dijo que naranjas. sigue sumando uno.
 tambien asi no da error al compilar
#define eco   .3
#define L      .2
dt    .0,   (($-1+eco+L)),   (($-1+eco+L)),   (($-1+eco+L)),   (($-1+eco+L))
y que va se niega, empieza por .20 y suma uno al siguiente, mas uno, mas uno..... no multipilca ni resta.
 asi por ej.
   DT   .10, (($-1-2)), (($-1-2)), (($-1-2)), (($-1-2)),
lo que sale es 0xa, oxfe, 0xff, 0, 0x1   :shock: aqui ya si que me perdi, pero algo hace

 :shock: :shock: :shock: seguire dandole a ver si lo saco

un saludo

 :? :? :? , hasta donde recuerdo el $ se utiliza para hacer referencia a la direccion no al contenido de la misma ,  fijate en el ultimo ejemplo que pusiste , seguramente el inicio de la tabla esta en la direccion 0x100,  entonces para la direccion 0x101 al utilizar tu ecuacion ($-1-2), tendrias en vez de $ 0x101.

=>........ 0x101 - 1 - 2 =0x0FE y para las direcciones siguientes:
=>........ 0x102 - 1 - 2 =0x0FF
=>........ 0x103 - 1 - 2 =0x100
=>........ 0x104 - 1 - 2 =0x101

Fijate que en los dos ultimos casos la directiva DT solo reconocera el byte menos significativos , entonces tienes 0x00 y 0x01.


Para hacer lo que quieres me parece que deberias definirte una variable creo que existe alguna directiva para hacer algo asi.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #8 en: 05 de Enero de 2010, 06:36:22 »
aps ok, si es que hay veces que me atasco. toma como valor el nº de linea mmmmm

#define eco   .5
   DT   eco, (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)),....
   org  0x800
retlw   0x5
retlw   0x6
retlw   0x7...y asi suma uno a cada linea a partir de ''eco''
 aunque no era precisamente lo que creia que se podia hacer. para tablas de 0 a 256 mas menos, puede valer para con copiar pegar sin rematarnos a escribir hacer una tablita
Citar
   DT   eco, (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)),
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
   DT  (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))

aunque mientras que escribia se me ocurrio otra alogicada :D no funciona ya creo que es pedirle muxo
Citar
PRIN_TABLA
DT   eco
FILL (($-1+eco+1)),FINAL-$ ; Llena con ¡'¡'¡'¡'¡' los registros de la memoria de programa hasta la etiqueta FINAL


org   PRIN_TABLA+.50
FINAL

dice que naranjas
Error[122]   D:\NUEVOS PROYECTOS MPLAB\CNC\DRV_UNI\RUTINAS.INC 403 : Illegal opcode (($-1+.0+1))
esto me empezaba a recordar a esas carreras que se hacen con el c por poner todo un santo programa en cada vez menos lineas :D

un saludo




Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Algunas directivas útiles en ASM
« Respuesta #9 en: 05 de Enero de 2010, 10:16:55 »
Hola alogic. No entiendo realmente cual es el fin de dicha tabla.

No hace falta tabla alguna para ese comportamiento.



#define eco   .5




         movlw   eco
         addwf    offset,w
         ;aca el valor seria el mismo que hacer eco + la posicion de la tabla donde quieres ir(offset)

sin tabla, sin ocupar rom.
"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 Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Algunas directivas útiles en ASM
« Respuesta #10 en: 05 de Enero de 2010, 13:53:12 »
PD2: ¿Por qué sólo sirven para el MPLAB?

Porque éstas, no son instrucciones del lenguaje assembler, sino directivas que utiliza el IDE para generar el lenguaje assembler.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #11 en: 05 de Enero de 2010, 14:02:50 »
ya gracias, asi lo estuve haciendo. pero en el vco que estoy trasteando, utiliza cuatro formas de onda y ya no es un +1 precisamente, si la diente de sierra seria incf +1 o en vez de subiendo decf -1 bajando pero ya la triangular la tuve que hacer leyendo una tabla, no me dio pa mas
Citar
   DT   .248, .246, .244, .242, .240
   DT   .238, .236, .234, .232, .230
   DT   .228, .226, .224, .222, .220
   DT   .218, .216, .214, .212, .210
   DT   .218, .216, .214, .212, .210
   DT   .198, .196, .194, .192, .190
   DT   .188, .186, .184, .182, .180   
   DT   .178, .176, .174, .172, .170
   DT   .168, .166, .164, .162, .160
   DT   .158, .156, .154, .152, .150
   DT   .148, .146, .144, .142, .140
   DT   .138, .136, .134, .132, .130
   DT   .128, .126, .124, .122, .120
   DT   .118, .116, .114, .112, .110
   DT   .108, .106, .104, .102, .100
   DT   .98, .96, .94, .92, .90
   DT   .88, .86, .84, .82, .80
   DT   .78, .76, .74, .72, .70
   DT   .68, .66, .64, .62, .60
   DT   .58, .56, .54, .52, .50
   DT   .48, .46, .44, .42, .40
   DT   .38, .36, .34, .32, .30
   DT   .28, .26, .24, .22, .20
   DT   .18, .16, .14, .12, .10
   DT   .8, .6, .4, .2, .0, .0, .0, .0

;

   DT .0, .0, .0, .0, .2, .4, .6, .8
   DT   .10, .12, .14, .16, .18
   DT   .20, .22, .24, .26, .28
   DT   .30, .32, .34, .36, .38
   DT   .40, .42, .44, .46, .48
   DT   .50, .52, .54, .56, .58
   DT   .60, .62, .64, .66, .68
   DT   .70, .72, .74, .76, .78
   DT   .80, .82, .84, .86, .88
   DT   .90, .92, .94, .96, .98
   DT   .100, .102, .104, .106, .108
   DT   .110, .112, .114, .116, .118
   DT   .120, .122, .124, .126, .128
   DT   .130, .132, .134, .136, .138
   DT   .140, .142, .144, .146, .148
   DT   .150, .152, .154, .156, .158
   DT   .160, .162, .164, .166, .168
   DT   .170, .172, .174, .176, .178
   DT   .180, .182, .184, .186, .188
   DT   .190, .192, .194, .196, .198
   DT   .200, .202, .204, .206, .208
   DT   .210, .212, .214, .216, .218
   DT   .220, .222, .224, .226, .228
   DT   .230, .232, .234, .236, .238
   DT   .240, .242, .244, .246, .248

y ya ni hablar de una senoidal  :? no se ni como, pero estuve intentando que mplab generase algunos datos para no tener que copiarla de una grafica. por que no tengo ni idea de hacer una integral?? creo que se llama asi. hace unos dias incluso pensaba que a lo mejor con algunas ecuaciones podria sacarla pero claro. no son ecuaciones precisamente. :? y a mi las mates... por eso el example. pero bueno. dicen que no hay mal que por bien no venga y creo que para algo me servira, no se exactamente para que. pues como bien has puesto Bruno es mas facil escribir eso que na


 para no perder el hilo os pongo la tabla con las operaciones ;-)
Citar
Operadores Aritméticos y de Procedencia
Operador    Ejemplo
$    Retorna contador de programa    goto $+3
(    Paréntesis izquierdo    1 +(d*4)
)    Paréntesis derecho    (longitud+1) * 256
!    Operador NOT (completo lógico)    If ! (a - b)
-    Negación (complemento a 2)    -1 * longitud
~    Complemento    flags = ~flags
high    Retorna byte alto    movlw high CTR_Tabla
low    Retorna byte bajo    movlw low CTR_Tabla
upper    Retorna byte superior    movlw upper CTR_Tabla
*    Multiplica    a = b * c
/    División    a = b / c
%    Módulo    entry_len = tot_len % 16
+    Suma    tot_len = entry_len * 8 + 1
-    Resta    entry_len = (tot - 1) / 8
<<    Desplazamiento a la izquierda    flags = flags << 1
>>    Desplazamiento a la derecha    flags = flags >> 1
>=    Mayor o igual    If entry_idx >= num_entries
>    Mayor que    If entry_idx > num_entries
<    Menor que    If entry_idx < num_entries
<=    Menor o igual    If entry_idx <= num_entries
= =    Igual a    If entry_idx = num_entries
!=    No igual a    If entry_idx != num_entries
&    Bitwise AND    flags = flags & ERROR_BIT
^    Bitwise Or-exclusiva    flags = flags ^ ERROR_BIT
|    Bitwise Or    flags = flags | ERROR_BIT
&&    Función AND lógica    If (len = = 511) && (b = = c)
||    Función lógica OR    If (len = = 511) || (b = = c)
=    Hacer igual a    entry_index = 0
+=    Sumar a, hacer igual    entry_index += 1
-=    Restar, hacer igual    entry_index -= 1
*=    Multiplicar, hacer igual    entry_index *= entry_length
/=    Dividir, hacer igual    entry_index /= entry_length
%=    Módulo, hacer igual    entry_index %= 8
<<=    Desplaza a la izquierda, hacer igual    flags <<=3
>>=    Desplaza a la derecha, hacer igual    flags >>=3
&=    AND, hacer igual    flags &=ERROR_FLAG
|=    OR, hacer igual    flags |= ERROR_FLAG
^=    OR-Exclusiva, hacer igual    flags ^= ERROR_FLAG
++    incrementar    i ++
--    decrementar    i --

un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Algunas directivas útiles en ASM
« Respuesta #12 en: 05 de Enero de 2010, 14:45:07 »
No se si te sigo...

Podes recurrir a algo asi para poder generar mucho codigo dinamico con pocas lineas.

Un ejemplo que hice para ver si es esto lo que buscas:

Este codigo:

Código: ASM
  1. TablaAutomatica macro valInicial,incremento,iteraciones
  2.                                 variable contador,tmp
  3.                                 tmp=valInicial
  4.  
  5.                                 ERRORLEVEL -207
  6.  
  7.                                 while(contador<iteraciones)
  8.                                         retlw   tmp
  9.                                         tmp+=incremento
  10.                                         contador++
  11.                                 endw                   
  12.  
  13.                                 ERRORLEVEL +207
  14.  
  15.                                 endm
  16.  
  17.                                 TablaAutomatica 0,1,10
  18.                                 TablaAutomatica 0,3,20


Genera esto.



"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 alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Algunas directivas útiles en ASM
« Respuesta #13 en: 05 de Enero de 2010, 15:41:14 »
coach :shock: no si siempre me dejas pasmao. lo estudiare a ver que sale, gracias

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Algunas directivas útiles en ASM
« Respuesta #14 en: 09 de Enero de 2010, 09:15:44 »
hola,yo queria rellenar alguna direcciones del programa con alguna directiva.por ejemplo

clrf        AUX0
clrf        AUX1
clrf        AUX2
clrf        AUX3


 si hubiera algo asi:    "DIRECTIVA " clrf AUX0+4

seria como decirle que borrara 4 posiciones de memoria ram.inclusive AUX0. hay algo por ahi?
Montando mi primera impresora 3D (Raprep Prusa i3)