TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Diego_C en 25 de Octubre de 2004, 22:12:00

Título: Macros en assembler
Publicado por: Diego_C 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.
Título: RE: Macros en assembler
Publicado por: fenix_jn 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.
Título: RE: Macros en assembler
Publicado por: Arlequin 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.
Título: RE: Macros en assembler
Publicado por: T0ni0 en 26 de Octubre de 2004, 02:34:00
Bueno pues seri algo así:

ONPIN MACRO
   BCF   PORTA,1
   ENDM

Sonrisa Gigante
Título: RE: Macros en assembler
Publicado por: wqtrp 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
Título: RE: Macros en assembler
Publicado por: Diego_C 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?
Título: RE: Macros en assembler
Publicado por: T0ni0 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
Título: RE: Macros en assembler
Publicado por: MGLSOFT 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
Título: RE: Macros en assembler
Publicado por: Diego_C 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.