Introducción a AVR-Studio
1. Introducción y objetivos - Presentar el entorno de programación y depuración de microcontroladores de ATMEL llamado AVRSTUDIO. - Simular y depurar programas escritos en lenguaje ensamblador para el microcontrolador ATMEGA328P ATMEGA328P.. AVR.STUDIO AVR.STUDIO puede descargarse gratuitamente gratu itamente desde las páginas del fabricante de ATMEL en: http://www.atmel.com Durante la sesión de laboratorio se debe disponer de los ficheros indicados en la tabla 1. Nomb Nombre re del del fic fiche hero ro
Cont Conten enid ido o
suma.asm
Programa que permite calcular la suma de dos números de 32 bits. A completar por el alumno.
suma suma_t _tab abla la.a .asm sm
Prog Progra rama ma para para cal calcu cula larr la la suma suma de de una una tab tabla la de de núme número ros s con con sig signo no de de 8 bits.
comp compa ara.a ra.asm sm
Prog Progrrama ama para ara calc calcul ular ar los los elem elemen ento tos s mayo mayorr y meno menorr de de una una tabla abla de números con signo de 8 bits. A completar por el alumno. Tabla 1: Ficheros necesarios para realizar la práctica
2. Estudio teórico Se van a utilizar tres programas en lenguaje ensamblador. Estos están disponibles en el directorio correspondiente a esta práctica en la web de la asignatura. A continuación se presentan algunos detalles de los mismos: 1. Programa SUMA: (objetivos: utilizar los punteros del microcontrolador, introducir la programación mediante subrutinas y presentar un método para la inicialización de datos en memoria) Realizaremos una subrutina suma32 en ensamblador del AVR que permitirá sumar dos números sin signo de 32 bits. Los 2 sumandos están en las posiciones de memoria apuntadas por Y e Y+4. El resultado de la suma se almacena a partir de Z. Se recuerda que los datos se almacenan en memoria en little-endian, es decir la parte más significativa del dato en la dirección de valor mayor. A31:24 A23:16 A15:8 A7:0
memoria
Y R29 R28
8 bits
A7:0 A15:8 Y+4
A23:16 A31:24 B7:0 B15:8 B23:16 B31:24
Z
B31:24 B23:16 B15:8 B7:0 S31:24 S23:16 S15:8 S7:0
} }
dato A
dato B
R3
R2
R1
R0
R7
R6
R5
R4
R31 R30 S7:0 S15:8 S23:16 S31:24
}
resultado
Realización del programa: El programa del fichero suma.asm consta fundamentalmente de tres partes: - programa principal: desde el que se llama a las dos subrutinas que se mencionan a continuación, - subrutina iniciaSuma: en la que se escriben en la memoria los dos datos de 32 bits, - subrutina suma32: en la que se suman los dos datos y se almacena el resultado.
2. Programa SUMA_TABLA: (objetivos: presentar otro método para la inicialización de datos en memoria y perfeccionar el uso de punteros y bucles) Realizaremos una subrutina iniciaTabla en ensamblador del AVR que permitirá trasladar una tabla desde la memoria de programa a la memoria de datos. Este traslado lo hacemos, ya que no es posible utilizar la directiva .db (define constante en memoria) directamente sobre la memoria de datos, sólo es posible usarla sobre la memoria de programa. Hay que tener encuenta la diferencia del ancho de ambas memorias, cada palabra de la memoria de programa necesitará ser trasladada sobre dos palabras de la memoria de datos.
16 bits
Z
8 bits
memoria
memoria
de programa
de datos
X R27 R26
R31 R30
tablatemp
tabla
.. .
.. .
Realización del programa: El programa del fichero suma_tabla.asm consta fundamentalmente de tres partes: - definición de la tabla en la memoria de programa mediante la directiva ".db", - programa principal: desde el que se llama a la subrutina iniciaTabla y, a continuación, se realiza la suma de elementos mediante un bucle, - subrutina iniciaTabla: en la que se copia la tabla desde la memoria de programa a la memoria de datos.
3. Programa COMPARA: (objetivo: afianzar los conceptos ya explicados y utilizar las instrucciones de comparación) Realizaremos una subrutina compara en ensamblador del AVR que permitirá localizar los elementos mayor y menor de una tabla de datos con signo de 8 bits.
Realización del programa: El programa del fichero compara.asm consta fundamentalmente de dos partes: - programa principal: desde el que se inicializa la tabla en memoria por cualquiera de los métodos ya presentados en los programas anteriores y a continuación se realiza la búsqueda de los elementos mayor y menor, - subrutinas y definiciones necesarias.
3. Estudio experimental El estudio experimental se divide en dos bloques: el primero consiste en utilizar los dos primeros programas del estudio teórico para familiarizarse con el entorno de desarrollo AVR-STUDIO. Para ello, necesitará completar el programa suma.asm y comprender el programa suma_tabla.asm. El segundo bloque se centra en realizar modificaciones a dichos programas para realizar operaciones más complejas y generar el tercer programa: compara.asm. Bloque I: - Siga los pasos mostrados en la "guía de uso del programa" para cargar y simular los programas. - Complete el programa suma.asm y compruebe que funciona correctamente. Para ello sume las cantidades $12345678 y $09ABCDEF. Anote el resultado. - Ejecute el programa suma_tabla.asm y compruebe que funciona correctamente. Anote la tabla que se ha utilizado en el programa y el resultado final de la suma. Muestre los valores de los registros R0, R1, temp y R2 para las 4 primeras iteraciones del bucle de suma y explique el procedimiento seguido para la suma y la necesidad de estos registros. Bloque II - Proponga dos ejemplos más para el programa suma.asm y compruebe nuevamente el resultado. Anote ejemplos y resultados. - Modifique el programa suma.asm para que en caso de desbordamiento de la suma devuelva el valor $FEFEFEFE como resultado y el carry se devuelva a 1. Compruébelo. Anote brevemente las modificiones realizadas y muestre el programa a su profesor. - Pruebe el programa suma_tabla.asm para las siguientes tablas de datos y anote el resultado obtenido. Tabla 10, 4, -1, 0 , 0, 6, 3, 10, 100, -100, 24, 23, -56, 4, 15, 16 -12, 10, -14, 12 , 100, -98, -10, 0, 0 , 1, 1, 0 , -10 , 12, 0, 6 100, 90, 80, 70 , 60, 50 ,40 ,30, 20, 10, 0
- Justifique el resultado que se obtendría para la siguiente tabla de valores y anote sus conclusiones. Tabla 100,200,300
- Complete el programa compara.asm y compruebe que funciona correctamente. Anote la tabla que ha utilizado en el programa y el resultado final de la comparación.