26.12.13

ATmega16 - Procedimientos

Un procedimiento es una secuencia de instrucciones que se quieren ejecutar en determinado momento para después seguir con el programa principal, por ejemplo si queremos convertir un número hexadecimal al BCD y este procedimiento se llevará a cabo en el programa principal tres veces, no vamos a tener que copiar el mismo programa cada vez que necesitemos la conversión, lo que hacemos para ahorrar memoria y además hacer el programa más entendible es llamar a un procedimiento que realice esta operación.


Un concepto importante a tener en cuenta es la pila, la pila es una parte de la memoria designada para poder realizar procedimientos, la característica importante de la pila es que el primer dato guardado es el ultimo dato en ser sacado, por tal motivo es conveniente siempre colocar la pila al final de la RAM.

Un procedimiento funciona de la siguiente manera:
- Primero: Guarda la dirección de retorno en la Pila
- Segundo: Realiza el procedimiento.
- Tercero: Retorna a ejecutar la siguiente instrucción en el programa principal.

Hay que recordar que todo procedimiento siempre termina con la instrucción RET (en assembler) ya que esta instrucción es la que nos da la dirección de retorno.

La pila también puede servir para ayudarnos a ahorrar registros de trabajo, lo que se hace es que una vez entrado al procedimiento, antes de comenzar a realizarlo, podemos guardar los datos del registro en la Pila y antes de salir de este recuperamos los datos guardados.

Estamos reutilizando el registro R17 en el procedimiento ahorrando así un registro

Simulación:
Notemos que el resultado se guarda en el puntero Y (R28:R29)
La dirección esta en el puntero Z (R30:R31)


Vemos que el número de unos contados son 34 ($22)
La ultima dirección en contar fue la 100 ($64)

Simulación:


Los 400 bytes fueron copiados exitosamente.

Para poder programar con mayor facilidad es recomendable etiquetar los registros ya que es más fácil recordar nuestras etiquetas a recordar números registros. Aquí tenemos un ejemplo.

Simulación:


Como vemos la suma de una cifra nos dio el resultado en R18 (9+9=18)
La suma de dos cifras nos dio el resultado en R22:R21 (99+99=198)

Descargas: 
AVR Instruction Set
Source Code

0 comments:

Post a Comment