ola alguêm me podia dar uma ajuda, em como usar uma table (dw) no atmega, algum exenplo,obrigado desde já
Hola Sony Trataré De Ayudarte en lo poquito que pueda
aqui te pongo el significado de lo que significa .DB y .DW
Tambien Te pongo Un Ejemplo Asm Hecho con El AvrStudio Para El Atmega88 Y Su Simulacion
Si Quieres Ver Su Simulacion En Avi te Lo E Subido A Esta Pagina Para Que Lo Puedas Ver Mejor
http://rapidshare.com/files/86569674/Simulacion_En_AvrStudio.avi.html .DB
Reserva espacio en la memoria de programa o en la memoria eeprom para contener una constante.
Debe estar precedida por una etiqueta que fijará el nombre de la constante.
Esta directiva puede tomar como parámetros un valor o una lista de valores que se colocaran
uno a continuación de otro, separados por coma ( , ). Cada valor debe ser un byte expresado
en cualquier notación (decimal, hexadecimal o binario).
Solo se puede colocar esta directiva en el segmento de código (CSEG) o en el de eeprom (ESEG).
Ejemplos:
.CSEG
claves: .DB 12, 0xEF, 8, 0b01100011, -23, 33
.ESEG
valor: .DB 0xFD
.DW
Directiva similar a .DB pero que reserva 2 bytes o múltiplo de 2 bytes.
;------------------------------------------------------
; FICHERO: ejercicios.asm
;
;------------------------------------------------------
; Declaraciones estandar para este micro Atmega88:
.include "m88def.inc"
;-----------------------------------------------------------
; Definicion de constantes y variables
; --------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores de interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000
rjmp RESET ; RESET
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET: cli
ldi r16,HIGH ( PILA )
out SPH,r16
ldi r16,LOW (PILA )
out SPL,r16
;*******DESDE AQUÍ VUESTRO CODIGO*****
;-------------------------------------------------------------------------------------------------------------------
; Llamada de la function
;-------------------------------------------------------------------------------------------------------------------
ldi Zh,High(Tabla*2);Inicio Puntero Msb ( La Multiplicacion Es Obligatorio Para Alinear La Direccion Sobre 16 Bits )
ldi Zl,Low(Tabla*2) ;Inicio Puntero Lsb ( Debido A La Estructura De La Memoria Interna )
;-------------------------------------------------------------------------------------------------------------------
; Envio De Una Cadena A La Ram Desde La Memoria Flash
;-------------------------------------------------------------------------------------------------------------------
clr r18
ldi r18,0x10 ; Contador
ldi YL, 0x60 ; Posiciono r28 En La Direcion $60 De La Ram
Lectura:
lpm ;Lectura En Flash Por Zh / Zl
mov r16,r0 ;Lo Transfiero En Un Registro Temporal
st Y+, r16 ;Guardalo En La Memoria E Incremento Y Para Que Apunte Al Siguiente
EscribirEEprom:
sbic Eecr, 1 ;Continua Si La Escritura De La EEPROM esta Lista
rjmp EscribirEEprom ;Salta Si No Esta Lista
out Eearl, zl ;Apunta La Direccion Donde Vamos Escribir
out Eedr, r16 ;Escribe El Dato A La EEPROM
sbi Eecr, 2 ;Mete a 1 el Bit EEMWE(Bit 2 )
sbi Eecr, 1 ;Mete à 1 el bit EEWE Salida de Escritura En La EEPROM Con ( Bit 1 )
inc zl ;Pasate Al Proximo Byte En EEPROM
dec r18
cpi r18,0x00
breq stop ;Salta Si La Bandera Z es 1
rjmp Lectura
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA
.CSEG
.ORG 0x0500
Tabla:
.DW 0x1122,0x3344,0x5566,0x7788,0x99AA,0xBBCC,0x5478,0x2600