Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Memoria EEPROM
Las primeras dos memorias (flash y esttica) son las que se usan ms comnmente durante la ejecucin de
programas. En la siguiente figura se muestran los mapas de memoria de estos dos tipos de memoria:
Como se observa en la figura, la memoria de programa o memoria flash es una memoria de 8 Kbytes que est
organizada como 4K palabras de 16 bits cada una. En el procesador AT90S8515 el PC (Program Counter) es
un registro de 12 bits, lo que le permite direccionar 4K celdas (212 = 4096).
La memoria esttica est organizada en bytes, es decir, en celdas de 8 bits cada una. Las primeras 96
direcciones de la memoria esttica corresponden a los 32 registros de propsito general y a los 64 registros
de entrada/salida. Las siguientes 512 direcciones corresponden a la memoria esttica interna. Es posible
agregar una memoria esttica externa que compartira el espacio de direccionamiento con la memoria interna.
Esta extensin de la memoria ocupar las siguientes direcciones disponibles hasta un mximo de 64 Kbytes.
La memoria esttica o de datos puede ser accesada por medio de cinco modos de direccionamiento:
Directo,
Indirecto,
En el modo directo se puede direccionar toda la memoria de datos. En el modo indirecto con desplazamiento
se pueden alcanzar 63 localidades de memoria basadas en las direcciones dadas en los registros Y o Z. En
modo de direccionamiento indirecto con predecremento o posincremento, los contenidos de los registros X, Y
y Z son decrementados o incrementados.
La memoria EEPROM
Esta memoria se accesa por medio de tres registros direccionados en el espacio de E/S:
2.
3.
4.
Escribir un "1" al bit EEMWE del registro de control EECR. Para esto, el bit EEWE dese estar
inactivo.
5.
Antes que transcurran cuatro ciclos de reloj despus de activar el bit EEMWE, se debe escribir un "1"
al bit EEWE.
El bit 0 es llamado Bit de Lectura (EERE, EEPROM Read Enable). Cuando la direccin ha sido fijada en
EEARH:EEARL, debe activarse el bit EERE. Cuando este bit es desactivado por el hardware, el dato ledo se
encuentra en EEDR.
Apuntador
Secuencia
Ejemplos
X+
-X
El apuntador se
decrementa en uno y
despus se
Lee/Escribe desde
direccin X.
LD R1,-X
ST -X,R1
Los direccionamientos mostrados arriba corresponden al modo de direccionamiento directo, que se ilustra en
la siguiente figura:
Observen que: i) interviene un registro, que dependiendo de la operacin ser el origen o el destino; ii) en la
instruccin se incluye un campo de direccin de 16 bits; y iii) este modo de direccionamiento permite
direccionar todo el espacio de la memoria de datos (desde la direccin $0000 hasta la direccin $FFFF, si
hubiera suficiente memoria instalada).
Usando apuntadores
Otra forma de accesar la SRAM es mediante el uso de apuntadores. Como comentamos en la seccin
anterior, los procesadores AVR manejan tres registros apuntadores:
X (XH:XL o R27:R26),
Y (YH:YL o R29:R28), y
Z (ZH:ZL o R31:R30).
La siguiente figura ilustra este modo de direccionamiento, que corresponde al direccionamiento indirecto:
Observen que en este modo de direccionamiento tambin es posible accesar cualquier celda de la memoria
de datos, ya que su espacio de direccionamiento abarca de la direccin $0000 a la direccin $FFFF.
Las siguientes lneas de cdigo ilustran el uso de apuntadores:
; Definimos smbolos
ldi ZL,HIGH(MiDireccPreferida3)
ldi ZL,LOW(MiDireccPreferida3)
; X apunta a Dato1
; Y apunta a Dato2
ldi ZH,HIGH(MiDireccPreferida3)
ldi ZL,LOW(MiDireccPreferida3)
; Z apunta a Dato3
El punto 1 muestra las opciones del men "View": Memory (Alt+4) y Register (Alt+0), entre otras. El punto 2
seala la ventana de los registros y el punto 3 muestra la ventana de la memoria. En esta ltima, se muestra
que se seleccion la memoria de datos (Data). La opcin de Direccin (Address) muestra el 0 x 60, indicando
que se muestra el inicio de la memoria de datos.
Conforme se traza el programa (con F11), podrs observar los cambios que se operan, tanto en los registros
como en la memoria de datos.
En la figura podemos observar que el contenido del apuntador (X, Y o Z) se decrementa en uno (en la figura
se muestra como la suma de -1) y el nuevo valor del apuntador se utiliza para accesar al espacio de datos, de
ah su nombre.
La figura de abajo ilustra el direccionamiento indirecto con posincremento:
En esta figura podemos observar que el contenido del apuntador (X, Y o Z) se utiliza para accesar el espacio
de datos y posteriormente se incrementa en uno.
Las instrucciones siguientes ejemplifican estos modos de direccionamiento:
; Y apunta a Dato2
ldi ZH,HIGH(MiDireccPreferida3)
; Z apunta a Dato3
ldi ZL,LOW(MiDireccPreferida3)
; Transferimos de SRAM a registros
ld R1,X ; R1 <-- SRAM[X]
ld R2,Y ; R2 <-- SRAM[Y]
ld R3,Z ; R3 <-- SRAM[Z]
; Obtenemos la suma de los tres datos
add R1,R2
add R1,R3
; Guardamos el resultado en la memoria SRAM
sts MiDireccPreferida4,R1
loop:
rjmp loop
Las instrucciones que se utilizan para accesar la memoria de datos (SRAM) son sts y ld.
La instruccin sts tiene el siguiente formato:
sts k,Rr
y realiza la operacin
SRAM[k] Rr
La instruccin ld que se utiliza en este programa tiene el siguiente formato:
ld Rd,X
y realiza la operacin
Rd SRAM[X
Segundo ejemplo
El siguiente programa ilustra el uso de las memorias de programa y de datos para manejar tablas de datos. El
programa define en una tabla, almacenada en la memoria de programa (Flash), el alfabeto en minsculas.
El programa regresa en la variable "Letra" definida en la memoria SRAM, la letra que corresponde a la
constante "Numero"; es decir, si "Numero" fuera 3, debera dejar en la variable "Letra" el cdigo ASCII de la
"c", la tercera letra del alfabeto.; Archivo: tabla.asm
; Ilustra el uso de tablas devolviendo el cdigo ascii de las
; letras del alfabeto en minsculas
.NOLIST
.INCLUDE "8515def.inc"
.LIST
.EQU Numero = 20