Diferencia entre revisiones de «Preguntas Frecuentes Demoqe»

De Wikitronica
Saltar a: navegación, buscar
(Macros en el HC9S08)
(Parametros)
Línea 44: Línea 44:
  
 
El parámetro \0 corresponde a un argumento de tamaño que sigue al nombre del macro separado por un punto (.)
 
El parámetro \0 corresponde a un argumento de tamaño que sigue al nombre del macro separado por un punto (.)
 
 
  
 
Ejemplo, dado el siguiente Macro:
 
Ejemplo, dado el siguiente Macro:
Línea 55: Línea 53:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
  
 
La utilización en un programa podría ser:
 
La utilización en un programa podría ser:
Línea 65: Línea 61:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
Y el ensamblador lo convierte en:
  
 +
<syntaxhighlight lang="asm">
 +
DC.B $10, $56
 +
</syntaxhighlight>
  
  
Y el ensamblador lo convierte en:
 
  
 +
Como se puede ver en el ejemplo los argumentos $10 y $56 corresponden al parámetro \1 y \2 respectivamente. A los argumentos se les asigna un número de parámetro según el orden en que se coloquen luego del nombre del Macro, empezando desde \1 hasta \9 y luego \A hasta \Z.
  
  
  
<syntaxhighlight lang="asm">
 
DC.B $10, $56
 
  
 +
====Etiquetas en los Macros====
  
</syntaxhighlight>
+
Cuando se programa con Macros a cualquier línea se le puede asignar una etiqueta. Si se tienen múltiples definiciones de Macros puede surgir el problema de que dos Macros diferentes utilicen el mismo nombre de etiqueta dando como resultado comportamientos indefinidos.
  
 +
Para resolver esta situación se definen etiquetas que son únicas para cada Macro. Al utilizar la directiva \@ el ensamblador genera un etiqueta única (una String de 5 dígitos de la forma nnnnn). Cada vez que se utiliza \@ se genera un String de 5 dígitos de manera incremental. Se le pueden agregar caracteres adicionales para entender mejor el código:
  
  
Macros recursivas que son algo extrañas en lo que respecta a su proceso de ensamblado.
+
 
 +
 
 +
Definición de un Macro con etiquetas.
 +
 
 +
<syntaxhighlight lang="asm">
 +
clear:  MACRO
 +
          LDX  #\1
 +
          LDA  #16
 +
\@LOOP:    CLR  0,X
 +
          INCX
 +
          DECA
 +
          BNE  \@LOOP
 +
        ENDM
 +
 
 +
</syntaxhighlight>
  
 
===Interrupciones anidadas y mi programa se queda pegado en una interrupción ¿Puedo resetear el micro? si es sí ¿Por que?===
 
===Interrupciones anidadas y mi programa se queda pegado en una interrupción ¿Puedo resetear el micro? si es sí ¿Por que?===

Revisión del 10:14 22 feb 2013


Contenido

La macro BitCopy del prof. Uribe

Pregunta 33 o 97 del problemario

Rebotes en Pulsadores o interruptores

Manejo y programación de timers.

Macros en el HC9S08

Los Macros son una secuencia de líneas de texto que puede incluir Opcodes y Directivas con variables y constantes. Una vez que se define un macro se puede utilizar su nombre para ejecutar esas líneas de texto. Cuando el ensamblador procesa el nombre del macro, lo reemplaza con las líneas de texto asociadas a ese macro y las ejecuta como si estuvieran escritas en el código fuente.

Los macros permiten que un programa complejo y extenso se vea mas condensado y ordenado, haciendo énfasis principalmente en la funcionalidad y no en el detalle de la ejecución. Esto permite un nivel de abstracción superior y la reutilización de código común. Adicionalmente permiten la inclusión de parámetros.

Definición de un Macro

En el HC9S08 la definición de un Macro consiste en 4 partes:

  • El encabezado del Macro (la directiva .MACRO)
  • El cuerpo del Macro. Una lista secuencial de líneas de ensamblador, algunas de ellas pueden usar parámetros.
  • La directiva de finalización (.ENDM)
  • Eventualmente pueden tener una instrucción llamad .MEXIT la cual detiene la expansión del Macro

El cuerpo del macro puede contener:

  • Instrucciones de ensamblador
  • Directivas de ensamblador
  • Llamadas a Macros que se definieron anteriormente

NO se pueden definir Macros dentro de un Macro.

El formato para realizar la llamada a un macro es:

[<label>:] <name>[.<sizearg>] [<argument> [,<argument>]...]

Parametros

Se pueden utilizar hastsa 36 parámetros en los Macros. Estos parámetros son reemplazados por el argumento correspondiente cuando se ejecuta el Macro. Para designar un parámetro se utiliza el caracter \ seguido de un número (0-9) o una letra en mayúsculas (A-Z).

El parámetro \0 corresponde a un argumento de tamaño que sigue al nombre del macro separado por un punto (.)

Ejemplo, dado el siguiente Macro:

MyMacro: MACRO
         DC.\0   \1, \2
         ENDM

La utilización en un programa podría ser:

MyMacro.B $10, $56

Y el ensamblador lo convierte en:

DC.B $10, $56


Como se puede ver en el ejemplo los argumentos $10 y $56 corresponden al parámetro \1 y \2 respectivamente. A los argumentos se les asigna un número de parámetro según el orden en que se coloquen luego del nombre del Macro, empezando desde \1 hasta \9 y luego \A hasta \Z.



Etiquetas en los Macros

Cuando se programa con Macros a cualquier línea se le puede asignar una etiqueta. Si se tienen múltiples definiciones de Macros puede surgir el problema de que dos Macros diferentes utilicen el mismo nombre de etiqueta dando como resultado comportamientos indefinidos.

Para resolver esta situación se definen etiquetas que son únicas para cada Macro. Al utilizar la directiva \@ el ensamblador genera un etiqueta única (una String de 5 dígitos de la forma nnnnn). Cada vez que se utiliza \@ se genera un String de 5 dígitos de manera incremental. Se le pueden agregar caracteres adicionales para entender mejor el código:



Definición de un Macro con etiquetas.

clear:   MACRO
           LDX   #\1
           LDA   #16
\@LOOP:    CLR   0,X
           INCX
           DECA
           BNE   \@LOOP
        ENDM

Interrupciones anidadas y mi programa se queda pegado en una interrupción ¿Puedo resetear el micro? si es sí ¿Por que?

¿Qué ocurre si en medio de mi programa ocurre una interrupción justo antes de realizar un salto luego de una comparación?, ¿Cuando regrese mis banderas pueden estar modificadas?¿Debo recrearlas?¿Como?

¿Cómo se ve a nivel de hardware el problema de las falsas interrupciones y el BSET IRQSC_IRQACK?

Yo me pregunto si es posible modelar con el debugger (sin la tarjeta) alguna de las interrupciones con las que hemos trabajado y si es así, ¿cómo?

¿Se puede colocar el generador de funciones como entrada a la tarjeta y escuchar esa onda a través del buzzer?

Cuales serian los pasos necesarios para configurar y trabajar con varios cloks? Ejm: Cada led que "encienda y apague" a una determinada frecuencia.

¿Como podría conectar en paralelo los micros?

¿Si quisiera colocar un arduino para que trabaje en conjunto a mc9s08, seria un procedimiento parecido a colocar 2 mc9s08 en conjunto?

¿Cual seria la base para configurar correctamente el control de una matriz de leds nxn con el micro?

Según tengo entendido, el giroscopio de la tarjeta es digital y su activación es diferente a la mostrada en el manual de referencia, pues éste hace mención al modelo analógico. ¿Como puedo trabajar con él?