Autor Tema: AYUDA URGENTE CON LOS MACROS EN ASM  (Leído 3286 veces)

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

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99
AYUDA URGENTE CON LOS MACROS EN ASM
« en: 11 de Enero de 2006, 01:16:00 »
BUENA NOCHE O DIA
SI SABES ALGO OPINA ......SI NO SABES ... MEJORLlorica

ESTOY TRABAJANDO CON MPLAB EN ASM..... LA CUESTION ES QUE:

NECESITO LLAMAR SUBRUTINAS APARTIR DE MACROS Y LLAMAR MACROS ESTANDO DENTRO DE OTRO MACRO.... ESTO SE PUEDE ???

AQUI DEJO UN EJEMPLO PARA QUE ME COMPRENDAN MEJOR

******************************Payaso
PAG_00 MACRO
   CLRF    PCLATH
   ENDM
PAG_500 MACRO
   CLRF    PCLATH
   BSF    PCLATH,0
   BSF    PCLATH,3
   ENDM
LLAMAR   MACRO   PAG_TOY,LLAMADA1,PAG_VOY
                CALL        PAG_VOY
   CALL   LLAMADA1
    CALL   PAG_TOY
   ENDM
******************************Divertido
EJEM:
           LLAMAR PAG_00,DELAY_1S,PAG_500
AQUI LE ESTOY QUERIENDO DECIR QUE ESTOY EN LA PAG 0 Y VA A IR A LA PAG S00 EN DONDE SE ENCUENTRA UNA RUTINA PARA UNA TEMPORIZACION DE 1SEGUNDO

LO QUE PASA ES QUE CREO QUE NO FUNCIONA .... POR ESO PIDO OPINIONES .Giño...
GRACIAS




Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: AYUDA URGENTE CON LOS MACROS EN ASM
« Respuesta #1 en: 14 de Enero de 2006, 07:30:00 »
Hola Hernando, a mi parecer no se puede llamar una macro de otra macro... éro no estoy seguro, haz probado tu codigo?  Te podria funcionar si pones el primer macro llamado luego del que va a ser llamado dentro del macro loco recuerda que un macro es simplemente un codigo que va a ser incluido en el codigo de programa por ello me parece que deberia estar de esa manera..

No se si te habra sido de ayuda, pero por algun lado se tiene que empezar...Sonrisa GiganteSonrisa Gigante
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: AYUDA URGENTE CON LOS MACROS EN ASM
« Respuesta #2 en: 17 de Enero de 2006, 17:14:00 »
Escrito originalmente por hernando2999
BUENA NOCHE O DIA
Codigo:

PAG_00 MACRO
   CLRF    PCLATH
   ENDM
PAG_500 MACRO
   CLRF    PCLATH
   BSF    PCLATH,0
   BSF    PCLATH,3
   ENDM
LLAMAR   MACRO   PAG_TOY,LLAMADA1,PAG_VOY
                CALL        PAG_VOY
   CALL   LLAMADA1
    CALL   PAG_TOY
   ENDM
******************************Divertido
EJEM:
           LLAMAR PAG_00,DELAY_1S,PAG_500


AQUI LE ESTOY QUERIENDO DECIR QUE ESTOY EN LA PAG 0 Y VA A IR A LA PAG S00 EN DONDE SE ENCUENTRA UNA RUTINA PARA UNA TEMPORIZACION DE 1SEGUNDO




A ver amigo , te has hecho menudo lío
Tus macros se llaman PAG_VOY y PAG_TOY que son ni mas ni menos que un par de instrucciones.  Un macro "reemplaza" el texto del macro, por el código contenido en  el macro.  Un macro no es una subrutina.  A un macro no se lo llama con un "call" , salvo que el macro sea una subrutina!   Encima si tu macro es una subrutina que se llama con CALL, cada vez que pongas el código en el programa estarás "pegando" el mismo texto siempre! entonces te dará error, para subsanar esto (si es necesario que un macro se use muchas veces) lo que se hace es pasarle parámetros de concatenacion de texto #v al macro para que la subrutina no se llamen igual todas las veces.

Entonces, cuando tu haces
Codigo:

   LLAMAR PAG_00,DELAY_1S,PAG_500


El compilador de assembly hará el siguiente reemplazo.
Codigo:

   CALL   clrf   PCLATH         ;Reemplazo de CALL PAG_500
   BSF    PCLATH,0
   BSF    PCLATH,3
   CALL   DELAY_1S         ;2do parámetro del macro LLAMAR
   CALL   clrf   PCLATH         ;que es CALL PAG_00


Lo cual por supuesto es un error, como te habras dado cuenta, porque estas haciendo un call de una instruccion! lo cual es un completo desastre. jeje.

Lo que tu quieres hacer se hace así
Codigo:

LLAMAR   macro LLAMADA1
    PAG_VOY
   CALL   LLAMADA1
   PAG_TOY
   endm


Cuando lo llames hazlo de esta forma
Codigo:

          LLAMAR DELAY_1S



El compilador reemplazará el código quedando de esta forma.
Codigo:

   CLRF    PCLATH      ;PAG_VOY
   BSF    PCLATH,0
   BSF    PCLATH,3

   CALL   DELAY_1S

   CLRF    PCLATH      ;PAG_TOY



Con respecto a otra pregunta... sobre los macros.  MPASM si permite los macros anidados, se puede llamar un macro desde otro macro.
Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99
RE: AYUDA URGENTE CON LOS MACROS EN ASM
« Respuesta #3 en: 15 de Febrero de 2006, 20:30:00 »
aporta tus ayudas

SALUDES

PDT: TODO ES COMO EL PAN RECIEN SALIDO DEL HORNO SI SE ENFRIA YA NO ES TAN ATRACTIVO.....


 

anything