Autor Tema: Macros en assembler  (Leído 3264 veces)

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

Desconectado Diego_C

  • PIC12
  • **
  • Mensajes: 54
Macros en assembler
« en: 25 de Octubre de 2004, 22:12:00 »
Buenas gente.

Alguien sabe como declarar macros en assembler?

es que he visto por ahi en internet algunos códigos que tenían instrucciones que no existen y que les pasan parámetros, como un registro.

Entonces como yo tengo una subrutina de perdida de tiempo que la configuro mediante un registro especial que reservo, me gustaría hacerla como macro para que sea mas sencillo el uso.

gracias.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Macros en assembler
« Respuesta #1 en: 25 de Octubre de 2004, 22:41:00 »
Me parecio leer algo sobre eso en la documentacion que viene con el MPLAB, revisate los archivos de ayuda creo q alli lo vi.

Desconectado Arlequin

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 340
RE: Macros en assembler
« Respuesta #2 en: 26 de Octubre de 2004, 01:09:00 »
Fijate en el manual MPSAM USERS GUIDE (si no lo tenés descargalo desde la página de Microchip), en la página 60, en el punto 5.40, se encuentra como declarar macros, de forma simple y clara.

Chau, espero que te sirva.
¡¡Ex - c3poa!!            ---       Collapsing New People

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Macros en assembler
« Respuesta #3 en: 26 de Octubre de 2004, 02:34:00 »
Bueno pues seri algo así:

ONPIN MACRO
   BCF   PORTA,1
   ENDM

Sonrisa Gigante
- T0ni0 -
30RCF112

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Macros en assembler
« Respuesta #4 en: 26 de Octubre de 2004, 06:15:00 »
asi es, solo debes poner el nombre de la macro, a continuacion la palabra "macro" y luego los psarametros separados por comas
y al final de la macro la sentencia de fin "endm"

nombre MACRO parametro1, parametro2 , .............
 
    instrucciones
   
    ENDM

esto para la definicion,
para usarla solo pones el nombre de la macro y los parametros q necesita.

tienes q tener en cuenta q cada vez q llames una macro todo el codigo sera insertado en cada lugar de la llamada
con lo cual tu codigo puede crecer bastante si haces mal uso de ellas.

Suerte

Desconectado Diego_C

  • PIC12
  • **
  • Mensajes: 54
RE: Macros en assembler
« Respuesta #5 en: 26 de Octubre de 2004, 08:37:00 »
Gracias.

O sea que si llamo 3 veces a una macro es como copiar el código 3 veces?

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Macros en assembler
« Respuesta #6 en: 26 de Octubre de 2004, 09:35:00 »
Exacto, por eso se utiliza con codigo corto, se suele utmodo de recordatorio, por ejemplo si tienes un LED al PORTA,1 para no confundirte de pin y tal te declaras:

Codigo:
LEDON  MACRO
          BSF PORTA,1
          ENDM

LEDOFF  MACRO
          BCF PORTA,1
          ENDM




Y luego en el codigo pones LEDON o LEDOFF y listo, para codigo más grande no te lo recomiendo y mejor que uses funciones.

Codigo:
LEDON: BSF PORTA,1
          RETURN



Y en codigo haces CALL LEDON
RollEyes
- T0ni0 -
30RCF112

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Macros en assembler
« Respuesta #7 en: 26 de Octubre de 2004, 15:44:00 »
Para hacer tareas repetitivas, donde el codigo se incrementara con el uso de una macro, es mejor utilizar funciones, que no se copiaran cada vez que las llames.

El verdadero poder de las macros en assembler es que puedes pasarles parametros (estoy medio olvidado ya, je..je..), alli no hay con que darles...GiñoLlorandoSonrisa Gigante
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Diego_C

  • PIC12
  • **
  • Mensajes: 54
RE: Macros en assembler
« Respuesta #8 en: 27 de Octubre de 2004, 15:42:00 »
gracias muchachos.

Esto es lo que hice:

La rutina de pérdida de tiempo la configuro mediante un registro que llamo TiempoX que sería el factor multiplicador de la perdida de tiempo, entonces cada vez que quiero llamar a esta rutina tengo que escribir

Codigo:

  movlw 100d
  movwf TiempoX
  call PerderTiempo    ; rutina de retardo



en este caso TiempoX vale 100 y la rutina pierde 10 milisegundos entonces, 100x10ms = 1 segundo

Sería estupido hacer que reescriba toda la subrutina cada vez que la llamo con una macro entonces, la solución era poner esas 3 lineas en la macro, que quedó así

Codigo:

dormir macro tiempoX10ms
  movlw tiempoX10ms
  movwf TiempoX
  call PerderTiempo    ; rutina de retardo
endm



entonces para perder tiempo pongo

dormir 100d

y ya ta.

chau gracias.