En la programación con lenguaje ensamblador es necesario conocer cómo está conformada la memoria SRAM ya que colocaremos de manera manual los datos con los que estemos trabajando. En lenguaje ensamblador usaremos los 32 registros de trabajo y los registros de entrada/salida.
Cuando se programa en C el compilador se encarga de reconocer cada tipo de registro y también coloca el programa en la zona de memoria adecuada.
La memoria del ATmega16 se distribuye de la siguiente manera:
- Las 32 primeras posiciones son utilizadas por los registros de trabajo.
- Las siguientes 60 posiciones son para los registros de Entrada/Salida, estos registros son utilizados por los recursos del uC para configurarlos y/o utilizarlos.
- A partir de $60 hasta $45F (1024 posiciones) son posiciones de memoria destinados para el usuario.
Ejemplo:
Simulación:
Realizaremos una simulación en el ISIS de Proteus (v7.9) para comprobar que nuestro programa está adecuadamente implementado, en este caso solo necesitamos el ATmega ya que no estamos usando recursos externos.
Haciendo doble clic sobre el uC nos sale una ventana como esta y elegimos la ubicación del archivo .hex:
Para ver la memoria RAM de nuestro uC hacemos los siguiente:
- Presionamos en el botón Step.
- Debug –> AVR Data Memory
Y como vemos, el copiado fue realizado exitosamente.