Anda di halaman 1dari 9

INSTRUCCIONES AVR

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).

P. 1

Ejemplo:
add
add

r1,r2
r28,r28

;Suma r2 a r1 (r1=r1+r2)
;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
eor

r4,r4
r0,r22

;Se limpia r4
;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
brpl positivo
neg
r11
positivo: nop

;Resta r0 de r11
;Salta si el resultado es positivo
;Toma el complemento a 2 de r11
;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

P. 2

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.

P. 3

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
brne
rjmp
error: add
inc
ok: nop

r16,$42
error
ok
r16,r17
r16

;Compara r16 con el nmero 42h


;Salta si r16 es diferente a 42h
;Salto incondicional
;Suma r17 a r16
;Incrementa r16
;Destino para rjmp (no hace nada)

P. 4

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.

P. 5

La instruccin LDI, carga una constante de 8 bits directamente a los registros de r16 a
r31.
Ejemplo:
clr
ldi
ld
ld
ldi
ld
ld

r27
r26,$60
r0,X+
r1,X
r26,$63
r2,X
r3,-X

;Limpia el byte alto de X


;Coloca el byte bajo de X con el nmero $60
;Se carga r0 con el valor de la localidad $60 y se increm
;Se carga r1 con el valor de la localidad $61
;Coloca el byte bajo de X con el nmero $63
;Se carga r2 con el valor de la localidad $63
;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
ldi
lpm

ZH,high(Tabla_1) ;Inicializa el apuntador Z


ZL,low(Tabla_1)
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
cpi
breq
...
exit: nop

r25,$16 ;Lee el puerto B


r25,4
;Compara el valor ledo con una constante
exit
;Salta si r25=4
;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
ser
out
nop
out

r16
;Limpia el registro r16
r17
;Coloca unos en r17
$18,r16 ;Enva ceros al puerto B
;Espera (no hace nada)
$18,r17 ;Enva unos al puerto B

P. 6

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
sbi
in

$1E,r0
$1C,0
r1,$1D

;Se escribe la direccin de la EEPROM


;Pone a 1 el bit 0 del registro 1C (EECR)
;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
lsl

r0,r4
r0

;Suma r4 a r0
;Multiplica r0 por 2

P. 7

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
lsr

r0,r4
r0

;Suma r4 a 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.

P. 8

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.

P. 9

Anda mungkin juga menyukai