Professional Documents
Culture Documents
.cseg
Sintaxis:
.cseg
.db
"Byte de Datos"; con esta directiva podrás colocar valores de las constantes en la
memoria de programa en una dirección conocida, por ejemplo, números seriados,
cadenas para un menú, tablas. Ellos son tratados como bytes y deberán estar dentro de
un rango de 8 bits. Casi todas las expresiones utilizan la directiva .db.
Sintaxis:
Ejemplos:
Las cadenas pueden ser colocadas en la memoria de programa con solo la directiva
.db:
.dw
"Palabra de Datos"; la directiva .dw trabaja como la directiva .db, pero se usará una
palabra para cada valor.
.org
.org puede ser usada para establecer el contador de programa a un valor específico.
Sintaxis:
Directivas SRAM
.byte
Sintaxis:
.byte tamaño
.dseg
.org
Directivas EEPROM
Las directivas EEPROM trabajan justo como las directivas para la memoria de
programa y la SRAM. Los valores pueden ser descargados para almacenarlos en la
EEPROM y las directivas .db y .dw se usan de igual manera.
.db
.dw
.eseg
.org
.def
"Definir (registros)"; con esta directiva podrás asignar nombres a los registros para
identificarlos.
Sintaxis:
Ejemplo:
.equ
Esta directiva asigna un nombre a una constante la cual no pueda cambiarse después:
.set
Esta directiva trabaja de forma similar a .def, pero el valor de la etiqueta puede
cambiarse despues:
.set contador = 1
.set contador = 2
Directivas de Código
.endm / .endmacro
"Fin de la Macro"; Esta le dice al ensamblador que una macro previamente comenzó y
finalice aquí. Solamente se usa cuando al inicio se tenga la directiva .macro.
.macro
.include
Incluye archivos (por ejemplo, la definición de archivos para cada AVR) y tiene la
posibilidad de separar código dentro de varios archivos.
Sintaxis:
.include path
Ejemplo:
.include c:\Archivos de programa\Atmel\AVR Tools\AvrAssembler\Appnotes\m32def.inc"
.include "\drv_routines\lcd.inc"
.device
AT90S1200
ATmega32
ATtiny26
Sintaxis:
.device codigo_del_dispositivo
.exit
Ejemplo:
.list
El ensamblador por default crea un archivo de lista (una combinación de código fuente,
código de operación y constantes). Aunada con .nolist puedes especificar que partes
del archivo se mostraran en el archivo de lista.
.listmac
Esta directiva creara una macro expansión del archivo lista. Por default, solamente se
ve que macro es llamada y que argumentos se usan. Para poder ver que esta pasando
durante la ejecución, para propósitos de debugging.
.nolist
Para crear un proyecto nuevo, vaya al menú “Project” y selecciona “New Project”. Un
cuadro de dialogo se mostrará como aparece en la siguiente figura. En este cuadro de
dialogo podrás ver dos tipos de proyectos, si deseas realizar un programa en
ensamblador (.asm) elige Atmel AVR Assembler, o de lo contrario si deseas realizar un
programa en Lenguaje C (.c) elige AVR GCC. Se elegirá un programa en ensamblador
y de Project name “led”, pero este puede ser cualquier nombre.
El próximo paso es llenar el archivo vacío led.asm. Abra el archivo led.asm dando
doble clic en él en la ventana de proyectos. El cursor se coloca al inicio del archivo
vacío y tendrás que insertar el siguiente código o simplemente Copiarlo y Pegarlo
directamente donde se encuentra la ventana de edición.
;**************************************************************
.include "m32def.inc" ;Incluir este archivo para el ATMega32
rjmp RESET ;Saltar a la etiqueta Reset
;**************************************************************
RESET:
.def temp =r16 ;Definir al registro 16 como temp
Apuntador de Instrucción
Ahora analizaremos el editor, veras una flecha amarilla que aparece al margen
izquierdo del código. Esta flecha indica la posición del contador de programa. En otras
palabras, apunta a la siguiente instrucción a ser ejecutada. Lo que debemos hacer
ahora es ver las líneas de entrada salida para visualizar que esta pasando en los
registros del Puerto B, durante la ejecución del programa.
Estableciendo la visualización a IO
Abra el Puerto B dando dos clics en el icono del puerto. Ahora se expandirá y se
mostraran todos los registros asociados con el Puerto B, estos son: Registro de Datos
del Puerto B (PORT B), la Dirección de Datos (DDRB) y los Pines de Entrada (PINB).
Como se muestra cada bit en los registros se representan por un cuadro de chequeo.
Un “cero” lógico (0) se representa por el cuadro de chequeo sin marca y un “uno” lógico
(1) se representa por el cuadro de chequeo con una marca. Estos cuadros de chequeo
serán actualizados durante la ejecución del programa, y muestran el estado actual de
cada bit. También podrás colocar un uno o limpiar estos bits dando un clic en el cuadro
de chequeo apropiado en cualquier tiempo durante la ejecución del programa.
Existen dos comandos para correr el código paso a paso. Son "Step Over" <F10> y
"Trace Into" <F11>. La diferencia entre estos dos comandos es que <F10> no entra
dentro de las subrutinas. Ya que en nuestro ejemplo no contiene ninguna subrutina, no
habrá diferencia entre la operación de estos comandos en este ejemplo.
Ahora ejecutando paso a paso hasta la ultima línea del código (rjmp loop)
presionando repetidamente <F11> o seleccionando "Trace Into" del menú "Debug".
Note como el color cambia de negro a rojo en los registros donde cambia el valor. Esto
hace más fácil identificar cuales registros cambian los valores en cada instrucción.
Continua presionando <F11> y se vera como el valor binario del Puerto B se
incrementa.
Colocando Breakpoints
Modificando el Código
Ahora vamos a programar un conteo descendente. Para hacer este cambio editaremos
el código fuente. Coloca el cursor en la ventana de la fuente, y cambia la instrucción de
inc a dec. Si ahora presionas <F5> (Go) el siguiente cuadro de dialogo aparecerá.
Este cuadro indica que uno de los archivos fuente ha sido cambiado, y el proyecto
deberá recompilarlo. Presione "Yes".
Las variables que son definidas (por la directiva .def) pueden ser colocadas en la
ventana Watch. La única variable definida en este código es la variable temp. De un clic
con el botón derecho y la ventana "Watches" se abrirá, seleccione "Add Watch". Teclee
en el nombre de la variable temp y presione Enter. Como se continúa con la ejecución
del programa, la variable temp constantemente se actualizara durante la ejecución del
programa.
Ahora ajustaremos la información del Procesador. Abra esta información dando un clic
en "Processor" dentro de la ventana de “IO” del menú "View".
Salvando el Proyecto
En el AVR Studio para salvar el proyecto selecciona "Save" del menú "Project".
Primeramente se necesita que el AVR Studio genere como archivo con formato de
salida en HEX. Para hacer esto, se necesita generar "Intel Hex Format Output". Así que
en el menú “Project” das un clic en “Assembler Options”.
Ahora abra el Panel de control en Sistema, y dando un clic en la pestaña Hardware abra
el Administrador de dispositivos.
Revise los puertos (COM & LPT), y de un clic en la cruz (+), esta se abrirá mostrando
algo como la siguiente ventana.
Dando dos clics en USB-SERIAL CH430, se abrirá una ventana como la siguiente.
1
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=432640
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=36947&postdays=0&postorder=asc&start=20