LDS(Load Direct from SRAM(data Space)
Se carga Rd con el contenido de lo que está en la dirección K.
Carga Directa del espacio de datos hacia Rd.
 |
Instrucción |
Ejemplo
------------------------------------------------------------------------------------------------------------------------------------------------------
;Agregar el contenido de la ubicación de memoria 0x300 hacia la ubicación de memoria 0x302.
------------------------------------------------------------------------------------------------------------------------------------------------------
 |
Código
|
|
Importante
Los datos que puedo copiar a través de sus direcciones puede ser cualquier datos de la SRAM( registros SFRs(I/O registers), SRAM interna o incluso datos de GPRs). es decir hay tres opciones de uso de LDS:
- Opción1: de SRAM interna a GPRs
- LDS R20, 0x300,se sabe que direcciones[0x0060,.....,0x045F] le corresponde a datos de SRAM interna.
- Opción2: de I/O registers a GPRs
- LDS R20, 0x20 ,se sabe que direcciones[0x0020,.....,0x005F] le corresponden a registros SFRs[TWBR,......,SREG]
- Opción3: de GPRs a GPRs
- LDS R20,0x1; R20=R1, se sabe que direcciones [0,.....,1F] le corresponden a registros de datos [R0,......,R31]
Las direcciones variaran según el microcontrolador AVR que se use, pero la manera de utilizar LDS es la misma.
Haremos mención a la última opción de uso de la LDS:
LDS R20,0x1 ; instrucción copiará el contenido de la ubicación1 (en hexadecimal) dentro de R20, Como sabemos la ubicación o dirección 1 es la memoria de datos es parte de GPRs y la dirección le corresponde a R1, así la instrucción copia R1 a R20.
STS(Store Direct to SRAM)
Almacenamiento Directo hacia el SRAM(espacio de datos)
Guarda un valor en una ubicación de memoria.
Store Rr a ubicación de memoria k.
Instrucción===> STS dirección donde se va a almacenar, el valor a almacenar.
 |
Instrucción |
Ejemplo
---------------------------------------------------------------------------------------------------------------------
; cuando el pinb,0 =0 se guarda en la dirección 0x0200 el valor de 0x55
;cuando el pinb,0=1 se guarda el la dirección 0x0200 el valor de 0x10
---------------------------------------------------------------------------------------------------------------------
 |
Guarda el dato 0x55
|
 |
Guarda el dato 0x10

Diagrama de flujo

Memory
|
USO DE STS PARA CARGAR REGISTROS DENTRO DE GPRS
Como podemos ver en la gráfica los registros GPRS forman parte de las primeras direcciones de la memoria de datos.
Memoria de datos
sus direcciones son:
R0<-0x0000 - R1<-0x0001 - R2<-0x0002 - R3<-0x0003 - R4<-0x0004
R5<-0x0005 - R6<-0x0006 - R7<-0x0007 - R8<-0x0008 - R9<-0x0009
R10<-0x000A - R11<-0x000B - R12<-0x000C - R13<-0x000D - R14<-0x000E
R15<-0x000F - R16<-0x0010 - R17<-0x0011 - R18<-0x0012 - R19<-0x0013 R20<-0x0014 - R21<-0x0015 - R22<-0x0016 - R23<-0x0017 - R24<-0x0018 R25<-0x0019 - R26<-0x001A - R27<-0x001B - R28<-0x001C - R29<-0x001D
R30<-0x001E - R31<-0x001F
EJEMPLO:
Deseamos guardar en R17 el valor del registro R16. Como sabemos R17 esta en la dirección 0x0011 y R16 se encuentra en la dirección 0x0010.
Código
Debug
Detalles a tomar en cuenta al usar estos comandos(LDS y STS):
- Para ejecutar el comando LDS o STS el CPU utiliza 2 ciclos de maquina.
- LDS y STS son instrucciones que ocupan mas código en memoria de programa ya que por ejemplo para pasar datos a una dirección determinada, primero debemos cargar el dato a un registro GPRs y luego recién cargamos a alguna dirección de memoria SRAM.
- Trabajar con direcciones y no con nombres es poco tedioso al trabajar.
- Las instrucciones LDS y STS no están disponibles en algunos AVRs y eso debemos tener en cuenta si se desea utilizar.
|
No hay comentarios:
Publicar un comentario