Vous êtes sur la page 1sur 4

PRACTICA No.

LABORATORIO DE SISTEMAS MICROPROCESADOS

Conocimiento del software de desarrollo AVRStudio 4.0

OBJETIVO:

Conocer una de las herramientas existentes para el desarrollo y depuración de


programas para sistemas microprocesados. Se conocerá y utilizará la herramienta
AVRStudio 4.0 de Atmel.

MARCO TEÓRICO:

Para el desarrollo de software de cualquier proyecto basado en un microprocesador se


necesita de la ayuda de un programa ensamblador, esto no es más que una herramienta
de software que simplifica la tarea de escritura de programas para microcontroladores,
encargada de traducir el código simbólico en un código ejecutable, que luego se
almacena en la memoria del microcontrolador para su ejecución.

Cuando se ensamblan un conjunto de programas lo que se hace es traducirlos en el


idioma mediante el cual se pueda instruir a la CPU para que ejecute eficazmente las
funciones que se desea realizar; por tanto al momento de escribir un programa se debe
estar familiarizado con la arquitectura del microcontrolador y el lenguaje que interpreta.

Un programa escrito en lenguaje ensamblador consta de líneas que contiene:

- Instrucciones del programa

- Directivas del ensamblador

- Control del ensamblador

Una instrucción de programa es un código que puede ser ejecutado por la máquina.

Las directivas del ensamblador se usan para definir la estructura del programa, los
símbolos y generar código no ejecutable como datos, mensajes, etc.

El control del ensamblador controla los modos del ensamblado y dirige el flujo del
ensamblado.

Muchos programas son demasiado largos o complejos como para escribirlos como una
sola unidad. El programar se vuelve mucho más simple cuando el código es dividido en
pequeñas unidades funcionales o módulos, además este tipo de programas son más
fáciles de codificar, depurar y realizar cambios o actualizaciones.

Los beneficios de la programación por módulos son los siguientes:

Desarrollo de programa eficiente: Pueden desarrollarse programas más rápidamente,


subsecuentemente los subprogramas pequeños son más fáciles de entender, diseñar y
probar en comparación con los que están formados por un solo módulo. Una vez que se
han definido las entradas y el rendimiento de cada módulo, el programador puede
proporcionar la entrada requerida y verificar la exactitud de cada módulo examinando el
rendimiento.

Una vez que esto ha terminado, los módulos separados se unen y son ensamblados
como un solo módulo para el programa ejecutable, finalmente el módulo completo
puede ser sometido a la última prueba.

Uso múltiple de subprogramas: El código escrito para un programa es a menudo útil


para otros, la programación modular permite guardar estas instrucciones para ser
utilizadas en el futuro. El código puede ser reutilizado, se pueden unir con otros
módulos que estén previamente almacenados y que cumplan con los requisitos de
entrada y salida. También se tiene la facilidad de guardar estas rutinas para ser usadas
solamente con ciertos programas; es decir, que no estén disponibles para todos.

Facilidad de depuración y modificación: Los programas modulares son por lo general


más fáciles de depurar que otro tipo de programas, debido a que las interfaces para cada
módulo están bien definidas, se pueden aislar los problemas que presentan cada módulo
en forma específica.

Descripción breve del entorno AVRStudio

Una vez iniciado el entorno se solicitará la creación de un nuevo proyecto (Project-


>New). En la nueva ventana daremos nombre al proyecto y al fichero inicial (que se
rellena automáticamente). Pulsamos Next.

En la nueva ventana seleccionaremos AVR Simulator en la ventana Debug plataform y


ATmega16 en la ventana Device. Pulsaremos Finish. A partir de aquí, ya tenemos la
herramienta operativa. Se nos ha abierto una ventana donde podremos editar el
programa y disponemos de una ventana situada a la izquierda donde se muestra el
espacio de trabajo con los registros del microcontrolador y los periféricos de
entrada/salida.

A la hora de escribir el programa ensamblador, es recomendable incluir el fichero


m16def.inc. Este es un archivo de texto que suministra el fabricante, que contiene las
direcciones de todos los registros de E/S del ATmega16 asignadas con una etiqueta que
se corresponde con los nombres de los registros que Atmel ha utilizado en su
documentación. De esta forma es más fácil elaborar el programa, utilizando el nombre
del registro en lugar de la dirección que ocupa (ver ejemplo escrito en la siguiente figura
con el puntero de la pila). Así mismo, se puede asignar nombres a los registros R0 - R31
utilizando la directiva .def.

Una vez escrito el programa, se compila (Project->Build) para ver si éste contiene
errores. Con (Project -> Next Error) nos situaremos en el siguiente error, lo
corregiremos y repetiremos el proceso hasta que el programa quede libre de errores.
Con Debug->Run debug activamos la simulación. Se podrá interactuar con el programa
mediante los elementos que aparecen en la pestaña I/O del workspace.

Trabajo preparatorio

1. Hacer un resumen de las características del ensamblador del AVRStudio


2. Describir la ayuda para el ensamblador que posee del AVRStudio 4
3. Traer el siguiente programa como un archivo de texto con la extensión .asm:
;***************************************************************************
;*
;* "div8u" - 8/8 Bit Unsigned Division
;*
;* This subroutine divides the two register variables "dd8u" (dividend) and
;* "dv8u" (divisor). The result is placed in "dres8u" and the remainder in
;* "drem8u".
;*
;* Number of words : 14
;* Number of cycles : 97
;* Low registers used : 1 (drem8u)
;* High registers used : 3 (dres8u/dd8u,dv8u,dcnt8u)
;***************************************************************************
.include “m16def.inc”
;***** Subroutine Register Variables
.def drem8u = r15 ; remainder
.def dres8u = r16 ; result
.def dd8u = r16 ; dividend
.def dv8u = r17 ; divisor
.def dcnt8u = r18 ; loop counter
;***** Code
.org 0x00
ldi dd8u,76
ldi dv8u,24
div8u: sub drem8u,drem8u ; clear remainder and carry
ldi dcnt8u,9 ; init loop counter
d8u_1: rol dd8u ; shift left dividend
dec dcnt8u ; decrement counter
brne d8u_2 ; if done
rjmp fin ; return
d8u_2: rol drem8u ; shift dividend into remainder
sub drem8u,dv8u ; remainder = remainder - divisor
brcc d8u_3 ; if result negative
add drem8u,dv8u ; restore remainder
clc ; clear carry to be shifted into result
rjmp d8u_1 ; else
d8u_3: sec ; set carry to be shifted into result
rjmp d8u_1
;
fin: rjmp fin

Parte Práctica
1. Con la ayuda del instructor ingrese el programa en assembler y genere el archivo
de salida de extensión .hex.
2. Comprobar el funcionamiento adecuado del programa, utilizando para ello el
simulador incluido en AVRStudio 4.

Informe
1. Ejecutar tres pruebas adicionales con diferentes valores para comprobar el
programa y presentar capturas de pantalla como evidencia de lo realizado.
2. Describir el contenido del archivo de extensión .hex que se genera como
resultado del ensamblado y consultar otros formatos para estos archivos.
3. Realizar lo que solicita adicionalmente el instructor.

Vous aimerez peut-être aussi