Posted by : Andrés Cuaycal sábado, 4 de abril de 2015


INSTRUCCIONES DE TRANSFERENCIA DE DATOS

Todas las instrucciones se encuentran en el set de instrucciones.

Este tipo de instrucciones permiten transferir o mover datos desde una localización de memoria a un registro o viceversa, así como entre registros internos o hacia o desde los puertos del circuito. Cada instrucción especifica el modo de direccionamiento utilizado. El set de instrucciones completo se encuentra en la página de Descargas.

El las siguientes instrucciones se utilizará la siguiente nomenclatura:
Rd
Registro de Destino
Rr
Registro Fuente
K
Constante
k
Dirección de memoria

>> Instrucción MOV, Copy Register

Esta instrucción hace la copia del contenido de un registro en otro. El registro fuente Rr, que se encuentra a la derecha de los operandos, no cambia, mientras que el registro de destino Rd es caragado con una copia de Rr. 
Esta instrucción permite utilizar todos los registros del microcontrolador del 0 al 31

Operación:
(Rd) ← (Rr)

Sintaxis:                                Operandos
MOV  Rd,Rr                         0 ≤ d ≤ 31, 0 ≤ r ≤ 31

Ejemplo:
mov    r16,r17     ; el contenido de R17 es copiado a R16

>> Instrucción MOVW, Copy Register Word

Esta instrucción copia el contenido de un par de registros a otro. El contenido de los registros fuente par Rr+1:Rr, no cambia.

Operación:
Rd+1:Rd Rr+1:Rr

Sintaxis:                                                        Operandos
MOVW  Rd+1:Rd,Rr+1:Rr                          d {0,2,4,....}, r {0,2,4,....}

Ejemplos:
movw   r0,r16              ; en R0:R1 se copia el contenido de R16:R17
movw   r3:r2,r19:r18       ; en R2:R3 se copia el contenido de R18:R19

Las dos sintaxis utilizadas son correctas, pero la primera es más corta y se obtienen los mismos resultados.


>> Instrucción LDI, Load Inmediate

Esta instrucción carga una constante de 8 bits directamente a los registros 16 a 31.

Operación:
Rd  K

Sintaxis:                                Operandos
LDI  Rd,K                             16 ≤ d ≤ 31

Ejemplos:
ldi    r18,0b00001111      ; Constante en binario cargado a R18
ldi    r20,255             ; Constante en decimal cargado a R20
ldi    r21,0xFE            ; Constante en hexadecimal cargado a R21



En las siguientes intrucciones la memoria de datos consiste en los registros del archivo de trabajo, memoria I/O, la memoria SRAM interna, y el espacio extendido de I/O.


>> Intruccion LD, Load Indirect from Data Space to Register using Index X, Y, Z


Esta instrucción permite cargar un byte a un registro con direccionamiento indirecto, con o sin desplazamiento, de la memoria de datos a un registro.

El registro puntero X, Y o Z, con la operacion no cambia o puede ser post-incrementado o pre-decrementado. Esta característica es especialmente aplicada para accesos a arreglos, tablas y puntero del stack.

Operación:                                               Comentario
(i)   Rd  (X)                                                  X: No cambia
(ii)  Rd  (X)                                                  X: Post-incremento
(iii) Rd  X-1                                                 X: Pre-decremento

(i)   Rd  (Y)                                                  Y: No cambia
(ii)  Rd  (Y)                                                  Y: Post-incremento
(iii) Rd  Y-1                                                 Y: Pre-decremento

(i)   Rd  (Z)                                                  Z: No cambia
(ii)  Rd  (Z)                                                  Z: Post-incremento
(iii) Rd  Z-1                                                 Z: Pre-decremento

Sintaxis:                                        Operandos

Para el puntero X
(i)   LD  Rd,X                                0 ≤ d ≤ 31
(ii)  LD  Rd,X+                              0 ≤ d ≤ 31
(iii) LD  Rd,-X                               0 ≤ d ≤ 31

Para el puntero Y
(i)   LD  Rd,Y                                0 ≤ d ≤ 31
(ii)  LD  Rd,Y+                              0 ≤ d ≤ 31
(iii) LD  Rd,-Y                               0 ≤ d ≤ 31

Para el puntero Z
(i)   LD  Rd,Z                                0 ≤ d ≤ 31
(ii)  LD  Rd,Z+                              0 ≤ d ≤ 31
(iii) LD  Rd,-Z                               0 ≤ d ≤ 31

Ejemplos
 ld     r2,X         ; en R2 se carga el dato apuntado por X
 ld     r3,X+        ; en R3 se carga el dato apuntado por X, X se incrementa
 ld     r4,-X        ; X se decrementa, y en R4 se carga el dato apuntado por X

 ld     r2,Y         ; en R2 se carga el dato apuntado por Y
 ld     r3,Y+        ; en R3 se carga el dato apuntado por Y, Y se incrementa
 ld     r4,-Y        ; Y se decrementa, y en R4 se carga el dato apuntado por Y

 ld     r2,Z         ; en R2 se carga el dato apuntado por Z
 ld     r3,Z+        ; en R3 se carga el dato apuntado por Z, Z se incrementa
 ld     r4,-Z        ; Z se decrementa, y en R4 se carga el dato apuntado por Z


>> Instrucción LDD, Load Indirect from Data Space to Register using index Y, Z 

Esta instrucción permite cargar un byte a un registro con direccionamiento indirecto, es muy similar a LD, pero se puede sumar un desplazamiento (q) al puntero Y, Z.
El puntero Y, Z no cambia después de la instrucción.

Operación:                                               Comentario
Rd  (Y+q)                                                  Y: No cambia, q: Desplazamiento
Rd  (Z+q)                                                  Z: No cambia, q: Desplazamiento

Sintaxis:                                        Operandos
LDD  Rd,Y+q                               0 ≤ d ≤ 31,  0 ≤ q ≤ 63
LDD  Rd,Z+q                               0 ≤ d ≤ 31,  0 ≤ q ≤ 63

Ejemplos
ldd    r16,y+15        ; en R16 se carga el dato puntado por Y desplazado 15
ldd    r5,z+3          ; en R5 se carga el dato puntado por Z desplazado 3

>>Instrucción LDS, Load Direct from Data Space


Esta instrucción carga un byte de la memoria de datos en un registro.

Operación:
Rd  k

Sintaxis:                                Operandos
LDS  Rd,k                             0 ≤ d ≤ 31, 0 ≤ k ≤ 65535

k: Es una dirección de memoria.

Ejemplos
.dseg              ; inicio de segmento de codigo en SRAM
ram1: .byte 1      ; variable ram1 guardada en la SRAM

.cseg              ; inicio de segmento de codigo en memoria de programa

lds    r18,ram1    ; cargo en R18, el contenido que se encuentra en ram1
lds    r20,0xFF00  ; cargo en R20, el contenido que se encuentra en la direccion 0xFF00

>> Instrucción ST, Store Indirect from Register to Data Space using Index X, Y, Z

Esta instrucción guarda un byte indirectamente, con o sin desplazamiento desde un registro al espacio de datos. 

La localización del dato apuntada por el puntero X, Y, Z no cambia su contenido, pero puede ser modificado si se aplica un post-incremento o un pre-decremento. Esta característica es especialmente aplicada para accesos a arreglos, tablas y puntero del stack.

Operación:                                               Comentario
(i)   (X)  Rr                                                  X: No cambia
(ii)  (X)  Rr                                                  X: Post-incremento
(iii) X-1  Rr                                                 X: Pre-decremento

(i)   (Y)  Rr                                                  Y: No cambia
(ii)  (Y)  Rr                                                  Y: Post-incremento
(iii) Y-1  Rr                                                 Y: Pre-decremento

(i)   (Z)  Rr                                                  Z: No cambia
(ii)  (Z)  Rr                                                  Z: Post-incremento
(iii) Z-1  Rr                                                 Z: Pre-decremento

Sintaxis:                                        Operandos

Para el puntero X
(i)   ST  X,Rr                                0 ≤ r ≤ 31
(ii)  ST  X+,Rr                              0 ≤ r ≤ 31
(iii) ST  -X,Rr                               0 ≤ r ≤ 31

Para el puntero Y
(i)   ST  Y,Rr                                0 ≤ r ≤ 31
(ii)  ST  Y+,Rr                              0 ≤ r ≤ 31
(iii) ST  -Y,Rr                               0 ≤ r ≤ 31

Para el puntero Z
(i)   ST  Z,Rr                                0 ≤ r ≤ 31
(ii)  ST  Z+,Rr                              0 ≤ r ≤ 31
(iii) ST  -Z,Rr                               0 ≤ r ≤ 31

Ejemplos
st     X,r2        ; el dato apuntado por X se carga con R2
st     X+,r3       ; el dato apuntado por X se carga con R3, X se incrementa
st     -X,r4       ; X se decrementa, y el dato apuntado por X se carga con R4

st     Y,r2        ; el dato apuntado por X se carga con R2
st     Y+,r3       ; el dato apuntado por X se carga con R3, X se incrementa
st     -Y,r4       ; X se decrementa, y el dato apuntado por X se carga con R4

st     Z,r2        ; el dato apuntado por X se carga con R2
st     Z+,r3       ; el dato apuntado por X se carga con R3, X se incrementa
st     -Z,r4       ; X se decrementa, y el dato apuntado por X se carga con R4

>> Instrucción STD, Store Indirect from Register to Data Space using Index Y, Z


Esta instrucción guarda un byte indirectamente, es muy similar a ST, pero se puede sumar un desplazamiento (q) al puntero Y, Z.
El puntero Y, Z no cambia después de la instrucción.

Operación:                                               Comentario
(Y+q)  Rr                                                  Y: No cambia, q: Desplazamiento
(Z+q)  Rr                                                  Z: No cambia, q: Desplazamiento

Sintaxis:                                        Operandos
STD  Y+q,Rr                               0 ≤ r ≤ 31,  0 ≤ q ≤ 63
STD  Z+q,Rr                               0 ≤ r ≤ 31,  0 ≤ q ≤ 63

Ejemplos

std    y+5,r21     ; guardo el contenido de R21 en el byte apuntado por Y desplazado 5
std    z+25,r22    ; guardo el contenido de R22 en el byte apuntado por Z desplazado 25

>> Instrucción STS, Store Direct to Data Space

 Guarda un byte de un registro en el espacio de datos.

Operación:
(k)  Rr

Sintaxis:                                 Operandos
STS k,Rr                                 0 ≤ d ≤ 31, 0 ≤ k ≤ 65535
Ejemplos:
std    y+5,r21     ; guardo el contenido de R21 en el byte apuntado por Y desplazado 5
std    z+25,r22    ; guardo el contenido de R22 en el byte apuntado por Z desplazado 25


>> Instrucción LPM, Load Program Memory


Esta instrucción carga un byte apuntado por el registro Z en el registro de destino Rd. La memoria de programa esta organizada como palabras de 16 bits mientras que el puntero Z apunta a la dirección de un byte. El bit menos significativo (LSB) del puntero Z, selecciona o el byte bajo o el alto de la dirección apuntada.
Esta instrucción puede direccionar los primeros 64K bytes de la memoria de programa.

Operación:
R0  (Z)
Rd  (Z)
Rd  (Z)       Z ← Z+1

Sintaxis:                                Operandos
LPM                                       ninguno, R0 implícito
LPM  Rd,Z                             0 ≤ d ≤ 31
LPM  Rd,Z+                           0 ≤ d ≤ 31

Si se utiliza la instrucción LPM sin operandos, el dato apuntado se guarda en R0, caso contrario se guarda en Rd.

Ejemplos:
lpm                ; guarda el contenido apuntado por Z en R0
lpm    r10,Z       ; guarda el contenido apuntado por Z en R10
lpm    r18,Z+      ; guarda el contenido apuntado por Z en R18, Z se incrementa

>> Instrucción OUT, Store Register to I/O location

Esta instrucción guarda el dato contenido en el registro Rr, en el registro del espacio específicado en entrada/salida (I/O: Pórticos, Temporizadores, Registros de Configuración, etc).

Operación:
I/O(A)  Rr

Sintaxis:                                Operandos
OUT  A,Rr                             0 ≤ r ≤ 31,        0 ≤ A ≤ 63

A: Es una dirección de registro de (I/O), entrada/salida

Ejemplos:
ldi    r16,0xF0    ; cargo en R16 el valor de 0xF0
out    porta,r16   ; cargo en el PORTA (registro I/O) el contenido de R16
out    portd,r16   ; cargo en el PORTD (registro I/O) el contenido de R16

>> Instrucción IN, Load an I/O location to register

Esta instrucción carga un dato del espacio de memoria de entrada/salida (I/O: Pórticos, Temporizadores, Registros de Configuración, etc) en un registro Rd.

Operación:
Rd  I/O(A)

Sintaxis:                                Operandos
IN  Rd,A                             0 ≤ d ≤ 31,        0 ≤ A ≤ 63

A: Es una dirección de registro de (I/O), entrada/salida
Ejemplos:
in     r5,pinc     ; guardo en R5 en contenido de PINC (registro I/O)
in     r18,pinb    ; guardo en R18 en contenido de PINC (registro I/O)

Deja un Comentario

Buscar en el Blog

Contador de Visitas

Traducir Blog

Etiquetas

Post Populares

- Copyright © Tutoriales Avr -