You are on page 1of 15

__________________________________________________________________________ITSP

Modos de Direccionamiento e Instrucciones del AVR


ATmega32.

3.1 INTRODUCCIN
Todos los modelos de microcontroladores RISC de la familia AVR soportan los modos
de direccionamiento para accesar a la memoria de programa (Flash) y a la memoria de
datos (SRAM, Archivo de Registros, Memoria de I/O, y la Memoria Extendida de I/O).
Para los siguientes modos de direccionamiento OP significa el Cdigo de Operacin de
la Instruccin. Para generalizar, los trminos RAMEND y FLASHEND se usan para
representar la memoria ms alta de la localidad en los datos y en el programa.

3.2 MODOS DE DIRECCIONAMIENTO.


DIRECCIONAMIENTO DIRECTO DE UN SOLO REGISTRO

El operando esta contenido en el registro d (Rd).

Ejemplos:
INC R16
CLR R22

Documento traducido de la hoja de datos del ATmega32 1


__________________________________________________________________________ITSP

DIRECCIONAMIENTO DIRECTO DE DOS REGISTROS

Los operandos estn contenidos en el registro r (Rr) y d (Rd). El resultado se almacena


en el Registro d (Rd).

Ejemplos:
ADD R16,R17
CP R22,R5
MOV R0, R1

DIRECCIONAMIENTO DIRECTO DE I/O

La direccin del operando esta contenida en 6 bits de la instruccin de la palabra. A es


la direccin del registro destino o fuente.

Ejemplos:
IN R16,PIND
OUT PORTC,R16

Documento traducido de la hoja de datos del ATmega32 2


__________________________________________________________________________ITSP

DIRECCIONAMIENTO DIRECTO DE DATOS

Una direccin de datos de 16 bits esta contenida en los 16 bits menos significativos de
la instruccin de dos bytes. Rd/Rr especifican el registro destino o fuente.

Ejemplos:
STS 0x1000,R16

DIRECCIONAMIENTO INDIRECTO DE DATOS CON DESPLAZAMIENTO

La direccin del operando es el resultado del contenido del registro Y o Z, sumada a la


direccin contenida en 6 bits (q) de la instruccin de la palabra. Rd/Rr especifican el
registro destino o fuente.

Ejemplos:
LDD R16, Y+0x10
STD Z+0x20, R16
Documento traducido de la hoja de datos del ATmega32 3
__________________________________________________________________________ITSP

DIRECCIONAMIENTO INDIRECTO DE DATOS

La direccin del operando es el contenido del registro X, Y o Z.

Ejemplos:
LD R16, Y
ST Z, R16

DIRECCIONAMIENTO INDIRECTO DE DATOS CON PRE-DECREMENTO

Los registros X, Y o Z se decrementan antes de la operacin. La direccin del operando


es el contenido decrementado del registro X, Y o Z.

Ejemplos:
LD R16, -Z
ST -Z, R16

Documento traducido de la hoja de datos del ATmega32 4


__________________________________________________________________________ITSP

DIRECCIONAMIENTO INDIRECTO DE DATOS CON POST-INCREMENTO

Los registros X, Y o Z se incrementan despus de la operacin. La direccin del


operando es el contenido del registro X, Y o Z antes de incrementarse.

Ejemplos:
LD R16, Z+
ST Z+, R16

DIRECCIONAMIENTO A MEMORIA DE PROGRAMA

La direccin del byte se especifica por el contenido del registro Z. Los 15 bytes ms
significativos seleccionan la direccin de la palabra. Para LPM, si LSB = 0 se selecciona
el byte bajo, de lo contrario si LSB = 1, se selecciona el byte alto.

Ejemplos:
LPM

Documento traducido de la hoja de datos del ATmega32 5


__________________________________________________________________________ITSP

DIRECCIONAMIENTO INDIRECTO A MEMORIA DE PROGRAMA, IJMP e ICALL

La ejecucin del programa contina en la direccin contenida en el registro Z.

Ejemplos:
IJMP
ICALL

DIRECCIONAMIENTO RELATIVO A MEMORIA DE PROGRAMA

El programa continua la ejecucin en la direccin PC + k + 1. La direccin relativa de k


vara de -2047 a 2048.

Ejemplos:
RJMP
RCALL

Documento traducido de la hoja de datos del ATmega32 6


__________________________________________________________________________ITSP

3.3 TIPOS DE INSTRUCCIONES.


El set de instrucciones del ATmega32 se puede dividir segn las especialidades:
 Instrucciones Aritmticas y Lgicas.
 Instrucciones de Salto.
 Instrucciones de Transferencia de Datos.
 Instrucciones Orientadas a Bits.
 Instrucciones de Control del MCU.

Instrucciones Aritmticas y Lgicas.

En la tabla 3.1, se muestra el men de las instrucciones Aritmticas y Lgicas del


ATmega32. Se indica en la tabla el mnemnico de cmo reconoce el MCU la
instruccin, los operandos que utiliza cada instruccin, as como tambin la operacin
que realiza y las banderas afectadas en el registro de estado SREG ($3F), adems de
los ciclos de reloj en que el MCU tarda en ejecutar la instruccin.

Tabla 3.1.

La instruccin ADD, suma dos registros sin la bandera de acarreo y el resultado lo


coloca en el registro destino (Rd).

Documento traducido de la hoja de datos del ATmega32 7


__________________________________________________________________________ITSP

Ejemplo:
add r1,r2 ;Suma r2 a r1 (r1=r1+r2)
add r28,r28 ;Se suma el r28 el mismo (r28=r28+r28)

La instruccin EOR, ejecuta la operacin lgica X-OR al contenido del registro destino
y el registro fuente colocando el resultado en el registro destino (Rd).

Ejemplo:
eor r4,r4 ;Se limpia r4
eor r0,r22 ;Se realiza una OR exclusiva entre r0 y r22

La instruccin COM, realiza el complemento a 1 al registro destino (Rd). Mientras que la


instruccin NEG, realiza el complemento a 2 al registro destino (Rd).

Ejemplo:
sub r11,r0 ;Resta r0 de r11
brpl positivo ;Salta si el resultado es positivo
neg r11 ;Toma el complemento a 2 de r11
positivo: nop ;Destino del salto (no hace nada)

La instruccin CLR, limpia el registro. Mientras que la instruccin SER, coloca


directamente $FF en el registro destino.

La instruccin MUL, realiza la operacin de multiplicacin de dos registros de 8 bits sin


signo, y el resultado de 16 bits lo coloca en el registro 1, el byte alto, y registro 0, el byte
bajo.

Ejemplo:
mul r5,r4 ;multiplica r5 y r4 nmeros sin signo
movw r4,r0 ;Copia el resultado de nuevo a r5:r4

La instruccin MULS, realiza la misma operacin que la instruccin MUL solo que se
toma en cuenta el bit de signo.

Ejemplo:
muls r21,r20 ;multiplica r21 y r20 nmeros con signo
movw r20,r0 ;Copia el resultado de nuevo a r21:r20

Documento traducido de la hoja de datos del ATmega32 8


__________________________________________________________________________ITSP

Instrucciones de Salto

En la tabla 3.2, se muestra el men de las instrucciones de Salto.

Tabla 3.2.

Existen dos tipos de salto: los saltos condicionales, que son aquellos que antes de
saltar requieren verificar una de las banderas del Registro de Estado (SREG), mientras
que los saltos incondicionales no requieren verificar ninguna bandera, en cuanto el
micro los encuentre este saltar a la nueva posicin marcada con la etiqueta.

La instruccin RJMP, es un salto incondicional. Salto relativo a una direccin ubicada


en el rango de PC 2K + 1 a PC + 2K.

La instruccin IJMP, es un salto incondicional. Salto indirecto, ya que brincara a una


direccin apuntada por el registro Z de 16 bits.

Documento traducido de la hoja de datos del ATmega32 9


__________________________________________________________________________ITSP

La instruccin BRCS, es un salto condicional. Verifica la bandera de acarreo, C, y salta


en un rango de PC 63 destino PC + 64, si esta bandera est en 1. Este tipo de
instrucciones siempre van colocadas despus de CP, CPI, SUB o SUBI.

La instruccin BRNE, es un salto condicional. Verifica la bandera cero, Z, y salta en un


rango de PC 63 destino PC + 64, si esta bandera est en 1. Este tipo de
instrucciones siempre van colocadas despus de CP, CPI, SUB o SUBI.

Ejemplo:
cpi r16,$42 ;Compara r16 con el nmero 42h
brne error ;Salta si r16 es diferente a 42h
rjmp ok ;Salto incondicional
error: add r16,r17 ;Suma r17 a r16
inc r16 ;Incrementa r16
ok: nop ;Destino para rjmp (no hace nada)

Documento traducido de la hoja de datos del ATmega32 10


__________________________________________________________________________ITSP

Instrucciones de Transferencia de Datos

En la tabla 3.3, se muestra el men de las instrucciones de Transferencia de Datos.

Tabla 3.3

La instruccin MOV, hace una copia de un registro a otro. El registro fuente, Rr, no sufre
ningn cambio, mientras que el registro destino, Rd, se carga con una copia de Rr.

La instruccin MOVW, hace una copia de un par de registros a otro par de registros. El
par de registros fuente, Rr+1:Rr, no sufren ningn cambio, mientras que el par de
registros destino, Rd+1:Rd, se cargan con una copia de Rr+1:Rr.

La instruccin LD, carga un byte indirecto con o sin desplazamiento de un espacio de


memoria a un registro. El espacio de memoria es direccionado por los registros
apuntadores de 16 bits X, Y o Z.

Documento traducido de la hoja de datos del ATmega32 11


__________________________________________________________________________ITSP

La instruccin LDI, carga una constante de 8 bits directamente a los registros de r16 a
r31.

Ejemplo:
clr r27 ;Limpia el byte alto de X
ldi r26,$60 ;Coloca el byte bajo de X con el nmero $60
ld r0,X+ ;Se carga r0 con el valor de la localidad $60 y se increm
ld r1,X ;Se carga r1 con el valor de la localidad $61
ldi r26,$63 ;Coloca el byte bajo de X con el nmero $63
ld r2,X ;Se carga r2 con el valor de la localidad $63
ld r3,-X ;Se decrem X y se carga r3 con el valor de la localidad $62

La instruccin ST, almacena un byte indirecto del registro a un espacio de memoria. El


espacio de memoria es direccionado por los registros apuntadores de 16 bits X, Y o Z.

La instruccin LPM, carga un byte del registro apuntado por Z a un registro destino.

Ejemplo:
ldi ZH,high(Tabla_1) ;Inicializa el apuntador Z
ldi ZL,low(Tabla_1)
lpm r16,Z ;Carga una constante de la memoria de programa
;apuntada por Z (r31:r30)

La instruccin IN, carga datos desde un espacio de I/O (Puertos, Timers, Registros de
Configuracin, etc.) al registro destino, Rd.

Ejemplo:
in r25,$16 ;Lee el puerto B
cpi r25,4 ;Compara el valor ledo con una constante
breq exit ;Salta si r25=4
...
exit: nop ;Salta al destino (no hace nada)

La instruccin OUT, enva los datos desde un registro fuente, Rr, a un espacio de I/O
(Puertos, Timers, Registros de Configuracin, etc.).

Ejemplo:
clr r16 ;Limpia el registro r16
ser r17 ;Coloca unos en r17
out $18,r16 ;Enva ceros al puerto B
nop ;Espera (no hace nada)
out $18,r17 ;Enva unos al puerto B

Documento traducido de la hoja de datos del ATmega32 12


__________________________________________________________________________ITSP

Instrucciones Orientadas a Bits

En la tabla 3.4, se muestra el men de las instrucciones Orientadas a Bits.

Tabla 3.4.

La instruccin SBI, pone un uno en el bit del registro especificado.

Ejemplo:
out $1E,r0 ;Se escribe la direccin de la EEPROM
sbi $1C,0 ;Pone a 1 el bit 0 del registro 1C (EECR)
in r1,$1D ;Lee el dato de la EEPROM

La instruccin CBI, limpia un bit del registro especificado.

Ejemplo:
cbi $12,7 ;Limpia el bit 7 del puerto D

La instruccin LSL, recorre todos los bits a la izquierda en un bit. El Bit 0 se limpia. El
Bit 7 se carga en la bandera de acarreo, C, del registro SREG. Esta instruccin efecta
multiplicaciones de nmeros con signo y sin signo por 2.

Ejemplo:
add r0,r4 ;Suma r4 a r0
lsl r0 ;Multiplica r0 por 2
Documento traducido de la hoja de datos del ATmega32 13
__________________________________________________________________________ITSP

La instruccin LSR, recorre todos los bits a la derecha en un bit. El Bit 7 se limpia. El Bit
0 se carga en la bandera de acarreo, C, del registro SREG. Esta instruccin efecta
divisiones de nmeros sin signo entre 2.

Ejemplo:
add r0,r4 ;Suma r4 a r0
lsr r0 ;Divide r0 entre 2

La instruccin ROL, recorre todos los bits del registro destino a la izquierda. La bandera
del acarreo se pasa al Bit 0 del registro. El Bit 7 se pasa a la bandera del acarreo, C.
Esta instruccin combinada con LSL, efecta multiplicaciones de varios bytes con
valores con signo y sin signo por 2.

La instruccin SWAP, intercambia los nibbles en un registro, el alto por el bajo y


viceversa.

La instruccin SEC, pone a uno el bit de la bandera de acarreo, C, en el registro SREG.


Mientras que la instruccin CLC, limpia esta bandera.

Documento traducido de la hoja de datos del ATmega32 14


__________________________________________________________________________ITSP

Instrucciones de Control del MCU

En la tabla 3.5, se muestra el men de las instrucciones de Control del MCU.

Tabla 3.5.

La instruccin NOP, se ejecuta en un solo ciclo de instruccin, y no realiza nada.

La instruccin SLEEP, coloca al circuito en modo dormido definido por el modo de


control del MCU.

La instruccin BREAK, se usa para un sistema de debug interno. Cuando se ejecuta


esta instruccin el CPU del AVR se coloca en modo de Stop. Esto ayuda a accesar a
los recursos internos del micro a travs de software.

Documento traducido de la hoja de datos del ATmega32 15

You might also like