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 código 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 cual 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 último 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 de la siguiente manera, una vez que ingresamos al procedimiento y antes de comenzar a ejecutarlo podemos guardar los datos del registro en la Pila y antes de salir recuperarlos.

Ejemplo:

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 está en el puntero Z (R30:R31)

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

Ejemplo:

Simulación:

Los 400 bytes fueron copiados exitosamente.

Ejemplo:

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.

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)