sábado, 9 de octubre de 2010

MÁS MACROS

Algunas de las instrucciones no tienen acceso a toda la memoria de los ATmega, como por ejemplo:

Se puede apreciar que estas instrucciones solamente tienen acceso a las 64 primeras posiciones de la RAM, luego para poder acceder al resto de posiciones tendremos que usar instrucciones como las siguientes. 
Para evitar  recordar esto podemos crear macros que nos faciliten el trabajo, así con la misma macro podremos acceder tanto a las posiciones menores a 0x40 como al resto de la RAM. Quizá se pregunten por qué no usar LDS y STS para acceder a toda la memoria, la razón para no hacer esto es que estas instrucciones ocupan el doble de espacio que IN y OUT, por ello es mejor usar estas instrucciones solamente cuando sea necesario.

Las macros son:
Ahora con un pequeño programa donde usaremos estas macros veremos cómo se comporta el compilador. 

Si desensamblamos el pequeño programas mostrado arriba veremos lo siguiente:

Cómo se puede apreciar el compilador ya discrimino y colocó la instrucción correspondiente, esto nos ahorrará mucho trabajo ya que podemos usar esta macro para acceder a los registros de configuración (SFR) y al resto de la RAM. 

Otro par de instrucciones muy importantes son:


Estas instrucciones ponen a “1” y “0”, respectivamente, un bit de un registro de la RAM que se encuentre en posiciones menores a 0x20. Aunque están hechas para operar sobre los puertos de I/O podemos extender su poder mediante las macros.

En la macro primero debemos verificar que el valor del bit se encuentre en el rango de 0 a 7, luego si el registro se encuentra en una posición mayor a 0x3F tendremos que usar instrucciones como LDS y STS, si es mayor que 0x1F y menor a 0x40 se usaran las instrucciones IN y OUT, al final si la posición de memoria es menor a 0x20 usaremos SBI o CBI según dea el caso. SBR pone a “1” el bit indicado en el registro y CBR lo pone a “0”.
Ahora usaremos estas macro y veremos su comportamiento.

En el programa mostrado se incluyen 2 errores que deben ser detectados por el compilador.
Vemos que efectivamente los errores son detectados.

Ahora corregiremos los errores y veremos el código desemsamblado.

Ahora vemos que el compilador ya remplazo las instrucciones de acuerdo a las posiciones de memoria que se especifican.



Por último haremos macros para aumentar el alcance de un par de instrucciones de salto muy importantes como son:
Las macros creadas son:
La forma de uso es igual al de las anteriores macros, teniendo en cuenta que el salto no siempre sera posible entre macros. 

No hay comentarios:

Publicar un comentario