-
MICROCONTROLADORES AVR ATMEL ha llevado la filosofa de diseo
RISC (adaptada) a los microprocesadores de 8 BIT. Esta nueva
arquitectura proporciona todos los beneficios habituales del RISC:
tasa de reloj ms rpida, mejor desempeo, y una optimizacin ms
eficiente en el compilador. AVR compite con varias familias de
microprocesadores bien establecidas en el mercado, tales como:
8051, 68HC05, 68HC11 y los PIC de Microchip que se han extendido
rpidamente en los ltimos aos. AVR es el primer diseo de CPU de
ATMEL, una compaa ms conocida por sus productos de memoria "flash"
y EEPROM. La firma tambin produce y vende varios subproductos de la
popular familia 8051, con la diferencia que estos estn basados en
"flash". La tabla que se presenta a continuacin resume las
caractersticas ms importantes de algunos modelos que pueden ser
adquiridos en el mercado local:
Los dispositivos se fabrican usando la tecnologa de memoria no
voltil de alta densidad de ATMEL. La Flash programable permite
reprogramar la memoria de programa en el sistema a travs de un
interfaz serie SPI o por un programador de memoria no voltil
convencional. Combinando una reforzada CPU RISC de 8-bit y la Flash
programable en un chip monoltico, los microcontroladores de ATMEL
serie AT90SXX proporcionan una gran flexibilidad y soluciones
eficaces a muchas aplicaciones de control integradas. Los AVR
cuentan con un amplio conjunto de instrucciones y con 32 registros
de trabajo de propsito general. Los 32 registros se conectan
directamente a la Unidad Aritmtico-Lgica (ALU), permitiendo acceder
a dos registros independientes con una instruccin ejecutada en un
ciclo de reloj. La arquitectura resultante trabaja con un cdigo ms
eficaz, logrando capacidades de procesamiento diez veces ms rpidas
que los microcontroladores CISC convencionales.
1
-
Diagrama a bloques del AT90S8535
Pueden usarse seis de los 32 registros como tres punteros de
registro de direccin indirectos (de 16-bits) para el
direccionamiento del espacio de datos (memoria de datos RAM),
proporcionando clculos de direccin eficaces. Tambin se usa uno de
los tres punteros de direccin para observar una tabla de
constantes. Estos registros de funciones agregados son los
registros: X, Y y Z.
2
-
El espacio de memoria I/O contiene 64 direcciones para la
configuracin de funciones perifricas de la CPU como los registros
de control, Temporizadores / Contadores, convertidores A/D y otras
funciones. Los registros de I/O deben ser accedidos con su direccin
del espacio I/O no considerando su direccin absoluta-. A estos
registros de propsito especfico ATMEL tambin los llama Puertos
(Ports). El AVR utiliza el concepto de arquitectura Harvard, con
buses y memorias de programa y datos por separado. La memoria de
programa se ejecuta con un sistema de dos fases. Mientras una
instruccin est ejecutndose, la siguiente instruccin se pre-extrae
de la memoria de programa. Con las instrucciones de salto relativo
(relative jump) y llamada a subrutina (call), se accede
directamente a cualquier direccin de la memoria de programa. La
mayora de las instrucciones de los AVR tiene el formato de palabra
(word) de 16-bit. Cada direccin de memoria de programa contiene una
instruccin de 16 o 32 bit. Durante las interrupciones y las
llamadas a subrutinas, la direccin de retorno del contador de
programa (PC) se guarda en la pila. La pila est de forma acertada
situada en la SRAM de datos de propsito general, y por
consiguiente, el tamao de la pila est slo limitado por el tamao
total de la SRAM. Todos los programas del usuario deben inicializar
el puntero de pila (SP) antes de la ejecucin de subrutinas o
interrupciones, considerando que cada vez que se carga un valor en
la pila la direccin del SP decrece. El SP de 16 bit es accesible
para lectura y escritura mediante el espacio de memoria I/O. Las
localidades de la memoria de datos (SRAM) pueden ser accedidos
fcilmente a travs de los diferentes modos de direccionamiento
soportados en la arquitectura AVR. El modo ocioso (idle) detiene la
CPU, permitiendo que continen funcionando la SRAM, el puerto SPI,
los Temporizadores / Contadores y el sistema de interrupciones. El
modo hibernacin (power-down) guarda los contenidos de los registros
pero congela el oscilador, deshabilitando todas las otras funciones
del chip hasta la prxima interrupcin externa o Reset del
hardware.
3
-
CONJUNTO DE INSTRUCCIONES
En este apartado se comentan las instrucciones de ensamblador
que poseen los C AVR de 8-BIT. Se explica la funcin de cada una de
ellas, su sintaxis, operandos utilizados y una descripcin con
ejemplos.
El conjunto de instrucciones para estos microcontroladores se
puede dividir en el siguiente orden de grupos: Instrucciones
Aritmticas y Lgicas Instrucciones de Desvo (salto) Instrucciones de
Transferencia de Datos Instrucciones de Bit y prueba de Bit Una
lnea tpica en lenguaje ensamblador est dada de la siguiente forma:
[Mnemnico] operando1, operando2 Los Mnemnicos son las instrucciones
en lenguaje ensamblador que puede reconocer el microprocesador.
Dependiendo de la instruccin, puede haber uno o dos operandos,
incluso pueden no existir; su contenido consiste en un nmero, una
variable o una direccin; normalmente el resultado de una operacin
lgica, aritmtica o de carga es almacenado en operando1.
NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES
Registros y operandos
Rd Registro destino (y fuente) del bloque de registros de
trabajo
Rr Registro fuente del bloque de registros de trabajo
R Resultado despus de que una instruccin es ejecutada
K Dato inmediato (constante)
k Direccin de memoria
b Bit de un registro I/O (7-0)
s Bit en el registro de estado (SREG)
X,Y,Z Registros de direccionamiento indirecto o registros de
palabra (X=R27:R26 Y=R29:R28 Z=R31:R30)
P Registros del bloque I/O
q Desplazamiento (6-bit) por direccionamiento directo
4
-
Banderas del registros de estado (SREG)
C: Bandera de acarreo S: NV para pruebas de signo
Z: Bandera de resultado cero H: Bandera de medio acarreo
N: Bandera de resultado negativo T: Bit transferido por la
instruccin BLD o BST
V: Indicador de complemento a dos desbordado
I: Bandera de interrupciones globales
RESUMEN DEL CONJUNTO DE INSTRUCCIONES
Instrucciones Aritmticas y Lgicas Mnemnico Operandos Descripcin
ADD Rd,Rr Suma sin acarreo ADC Rd,Rr Suma sin acarreo ADIW Rd, K
Suma un inmediato a un registro de palabra SUB Rd,Rr Resta sin
acarreo SUBI Rd,K Resta un inmediato SBC Rd,Rr Resta con acarreo
SBCI Rd,K Resta un inmediato con acarreo AND Rd,Rr AND lgico ANDI
Rd,K AND lgico con inmediato OR Rd,Rr OR lgico ORI Rd,K OR lgico
con inmediato EOR Rd,Rr OR exclusivo COM Rd Complemento a uno NEG
Rd Complemento a dos SBR Rd,K Pon a uno los bits de un registro CBR
Rd,K Pon a cero los bits de un registro INC Rd Incrementa al
registro DEC Rd Decrementa al registro TST Rd Revisa si es cero o
menor CLR Rd Borra el registro SER Rd Carga los bits de un registro
ADIW Rd+1:Rd,K Suma un inmediato a un registro de palabra SBIW
Rd+1:Rd,K Resta un inmediato a un registro de palabra MUL Rd,Rr
Multiplica sin signo MULS Rd,Rr Multiplica con signo MULSU Rd,Rr
Multiplica signado con no signado
Instrucciones de desvo (salto) Mnemnicos Operandos Descripcin
RJMP k Salto relativo IJMP Ninguno Salto indirecto EIJMP Ninguno
Salto indirecto extendido JMP k Salto RCALL k Llamada relativa a
subrutina ICALL Ninguno Llamada indirecta a subrutina
5
-
EICALL Ninguno Llamada indirecta a subrutina extendida CALL k
Llamada a subrutina RET Ninguno Regreso de subrutina RETI Ninguno
Regreso de interrupcin CPSE Rd,Rr Compare y salta si es igual CP
Rd,Rr Compara CPC Rd,Rr Compara con acarreo CPI Rd,K Compara con
inmediato SBRC Rr,b Salta si el bit del registro es cero SBRS Rr,b
Salta si el bit del registro es uno SBIC P,b Salta si el bit del
registro I/O es cero SBIS P,b Salta si el bit del registro I/O es
uno BRBC s,k Salta si el bit de SREG es cero BRBS s,k Salta si el
bit de SREG es uno BREQ k Salta si es igual BRNE k Salta si es
diferente BRCS k Salta si C est a uno BRCC k Salta si C est a cero
BRSH k Salta si es mayor o igual BRLO k Salta si es menor BRMI k
Salta si es negativo BRPL k Salta si es mayor BRGE k Salta si es
mayor o igual (con signo) BRLT k Salta si es menor (con signo) BRHS
k Salta si H est a uno BRHC k Salta si H est a cero BRTS k Salta si
T est a uno BRTC k Salta si T est a cero BRVS k Salta si V esta a
uno BRVC k Salta si V est a cero BRIE k Salta si I est a uno BRID k
Salta si I est a cero
Instrucciones de Transferencia de Datos Mnemnicos Operandos
Descripcin MOV Rd,Rr Copia de registros MOVW Rd,Rr Copia registros
de palabra LDI Rd,K Carga de un inmediato LDS Rd,k Carga directa LD
Rd,X Carga indirecta LD Rd,X+ Carga indirecta con Post-Incremento
LD Rd,-X Carga indirecta con Pre-Decremento LD Rd,Y Carga indirecta
LD Rd,Y+ Carga indirecta con Post-Incremento LD Rd,-Y Carga
indirecta con Pre-Decremento LDD Rd,Y+q Carga indirecta con
desplazamiento LD Rd,Z Carga indirecta con LD Rd,Z+ Carga indirecta
con Post-Incremento LD Rd,-Z Carga indirecta con Pre-Decremento LDD
Rd,Z+q Carga indirecta con desplazamiento STS k,Rr Almacena
directamente
6
-
ST X,Rr Almacena indirectamente ST X+,Rr Almacena indirectamente
con Post-Incremento ST -X,Rr Almacena indirectamente con
Pre-Decremento ST Y,Rr Almacena indirectamente ST Y+,Rr Almacena
indirectamente con Post-Incremento ST -Y,Rr Almacena indirectamente
con Pre-Decremento ST Y+q,Rr Almacena indirectamente con
desplazamiento ST Z,Rr Almacena indirectamente ST Z+,Rr Almacena
indirectamente con Post-Incremento ST -Z,Rr Almacena indirectamente
con Pre-Decremento ST Z+q,Rr Almacena indirectamente con
desplazamiento LPM Ninguno Carga memoria de programa SPM Ninguno
Almacena memoria de programa IN Rd,P Cargar un registro con un I/O
OUT P,Rr Cargar un I/O con un registro PUSH Rr Cargar registro en
la pila POP Rd Sacar dato de la pila
Instrucciones de Bit y prueba de Bit Mnemnicos Operandos
Descripcin LSL Rd Desplazamiento a la izquierda LSR Rd
Desplazamiento a la derecha ROL Rd Rotacin a la izquierda con
acarreo ROR Rd Rotacin a la derecha con acarreo ASR Rd
Desplazamiento aritmtico SWAP Rd Intercambio de nibbles BSET s
Poner a uno la bandera BCLR s Poner a cero la bandera SBI P,b Poner
a uno el bit de un registro I/O CBI P,b Poner a cero el bit de un
registro I/O BST Rr,b Guarda en T el bit de un registro BLD Rd,b
Carga T en el bit de un registro SEC Ninguno Poner a uno la bandera
C CLC Ninguno Poner a cero la bandera C SEN Ninguno Poner a uno la
bandera N CLN Ninguno Poner a cero la bandera N SEZ Ninguno Poner a
uno la bandera Z CLZ Ninguno Poner a cero la bandera Z SEI Ninguno
Poner a uno la bandera I CLI Ninguno Poner a cero la bandera I SES
Ninguno Poner a uno la bandera S CLN Ninguno Poner a cero la
bandera S SEV Ninguno Poner a uno la bandera V CLV Ninguno Poner a
cero la bandera V SET Ninguno Poner a uno la bandera T CLT Ninguno
Poner a cero la bandera T SEH Ninguno Poner a uno la bandera H CLH
Ninguno Poner a cero la bandera H NOP Ninguno No operacin SLEEP
Ninguno Modo Sleep WDR Ninguno Reiniciar el Watchdog
7
-
ADC Suma de dos registros con acarreo Sintaxis: ADC Rd, Rr
Operacin: Rd Rd + Rr + C Operandos: 0 d 31, 0 r 31 Descripcin: Suma
dos registros y el contenido de la bandera C; deja el resultado en
el registro destino Rd. Banderas afectadas: H: Se activa si hay un
acarreo del bit 3, de lo contrario se borrar. V: Se activa si
ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. C: Se activa si hay
acarreo del bit MSB del resultado, de lo contrario se borrar.
Ejemplo: ADC r1, r2 ; Suma r1, r2 y C
; el resultado lo pone en r1
ADD Suma de dos registros sin acarreo Sintaxis: ADD Rd, Rr
Operacin: Rd Rd + Rr Operandos: 0 d 31, 0 r 31 Descripcin: Suma dos
registros sin considerar la bandera C y deja el resultado en el
registro destino Rd. Banderas afectadas: H: Se activa si hay un
acarreo del bit 3, de lo contrario se borrar. V: Se activa si
ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. C: Se activa si hay
acarreo del bit MSB del resultado, de lo contrario se borrar.
Ejemplo: ADD r1, r2 ; Suma r2 a r1 (r1=r1+r2) ADD r28, r28 ; Suma
r28 a s mismo (r28=r28+r28)
ADIW Suma un dato inmediato a un registro de palabra Sintaxis:
ADIW Rd+1:Rd,K Operacin: Rd +1: Rd Rd+1: Rd + K Operandos:
Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos
indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL o slo
a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar R27:R26 o slo a
R26; R29:R28 o slo a R28; R31:R30 o slo a R30. Tambin podemos usar
el registro de 16 bits compuesto por R25:R24 al que tambin podemos
indicar como R24. Operando2: 0 K 63 Descripcin: Agrega un valor K a
un par de registros y deja el resultado en el par de registros
Banderas afectadas: S: Se activa slo si una de las banderas V o N
est a uno. V: Se activa si hay desbordamiento en el complemento a
dos de la operacin. N: Se activa si el bit MSB est a uno. Z: Se
activa si el resultado es 0x00. C: Se activa si hay acarreo del bit
MSB. Ejemplo: ADIW R25:R24, 1 ; Suma 1 a R24 y en caso de que haya
; acarreo se lo suma a R25
AND Funcin lgica AND entre registros Sintaxis: AND Rd, Rr
Operacin: Rd Rd (AND) Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se
realiza el AND lgico entre el contenido del registro Rd y del
registro Rr; deja el resultado en el registro destino Rd. Banderas
afectadas: V: Se pone a cero. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. Ejemplo: AND r2, r3 ;
AND lgico entre r2 y r3, resultado en r2 LDI r16, 1 ; Poner 0000
0001 en r16 AND r2, r16 ; Aislar el bit 0 en r2
8
-
ANDI Funcin lgica AND entre un registro y un dato inmediato
Sintaxis: AND Rd, K Operacin: Rd Rd (AND) K Operandos: 0 d 31, 0 K
255 Descripcin: Se realiza el AND lgico entre el contenido del
registro Rd y el valor K; deja el resultado en el registro destino
Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit
MSB del resultado est a uno, de lo contrario se borrar. Z: Se
activa si el resultado es $00, de lo contrario se borrar. Ejemplo:
ANDI r17, $0F ; Borrar el nibble alto de r17 ANDI r18, $10 ; Aislar
el bit 4 en r18 ANDI r19, $AA ; Borrar los bits impares de r19
ASR Desplazamiento aritmtico a la derecha Sintaxis: ASR Rd
Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits
de Rd una posicin hacia la derecha. El bit 7 se mantiene constante.
El bit 0 se carga dentro de la bandera C. Esta operacin divide
entre dos un valor con signo sin cambiar su signo. La bandera C
puede usarse para redondear el resultado. Banderas afectadas: S: N
C, para prueba de signo V: N C (para N y C despus del
desplazamiento) N: Se pone a uno si el MSB de Rd esta a uno. Z: Se
activa si el resultado es $00, de lo contrario se borrar. C: Se
activa antes del desplazamiento el LSB de Rd estaba a uno. Ejemplo:
LDI r16, $10 ; Cargar 16 decimal en r16 ASR r16 ; r16 = r16 / 2 LDI
r17, $FC ; Cargar -4 en r17 ASR r17 ; r17 = r17 / 2
BCLR Poner a cero el bit de una bandera Sintaxis: BCLR s
Operacin: SREG(s) 0 Operandos: 0 s 7 Descripcin: Pone a cero un bit
especfico del registro de banderas SREG. Banderas afectadas: I: 0
si s = 7; de lo contrario sin cambio T: 0 si s = 6; de lo contrario
sin cambio H: 0 si s = 5; de lo contrario sin cambio S: 0 si s = 4;
de lo contrario sin cambio V: 0 si s = 3; de lo contrario sin
cambio N: 0 si s = 2; de lo contrario sin cambio Z: 0 si s = 1; de
lo contrario sin cambio C: 0 si s = 0; de lo contrario sin cambio
Ejemplo: BCLR 0 ; Borrar la bandera C BCLR 7 ; Deshabilitar
interrupciones
BLD Carga en un registro la bandera T Sintaxis: BLD Rd, b
Operacin: Rd(b) T Operandos: 0 d 31, 0 b 7 Descripcin: Carga la
bandera T del registro SREG en el bit b del registro Rd. Banderas
afectadas: Ninguna Ejemplo: BST r1, 2 ; Guardar el bit 2 de r1 en
la bandera T BLD r0, 4 ; Cargar T en el bit 4 de r0
9
-
BRBC Brinca si el bit de SREG es cero Sintaxis: BRBC s, k
Operacin: Si SREG(s) = 0 entonces PC PC + k +1 Si SREG(s) = 1
entonces PC PC + 1 Operandos: 0 s 7, -64 k 63 Descripcin: Examina
un bit del registro SREG y realiza un salto relativo en el PC
(contador de programa) si el bit est a cero. La instruccin desva
relativamente al PC en cualquier direccin (PC - 63 destino PC +
64). El parmetro k es el offset de PC y es representado en forma de
complemento a dos. Banderas afectadas: Ninguna Ejemplo:
CPI r20, 5 ; Comparar r20 con el valor 5 BRBC 1, dife ; Salta si
la bandera Z es cero
... dife: NOP ; Destino de desvo (No hacer nada)
BRBS Brinca si el bit de SREG est a set (uno) Sintaxis: BRBS s,
k Operacin: Si SREG(s) = 1 entonces PC PC + k +1 Si SREG(s) = 0
entonces PC PC + 1 Operandos: 0 s 7, -64 k 63 Descripcin: Examina
un bit del registro SREG y realiza un salto relativo en el PC
(contador de programa) si el bit est a uno . La instruccin desva
relativamente al PC en cualquier direccin (PC - 63 destino PC +
64). El parmetro k es el offset de PC y es representado en forma de
complemento a dos. Banderas afectadas: Ninguna Ejemplo:
BST r0, 3 ; Carga la bandera T con el bit 3 de r0 BRBS 6, salto
; Salta si el bit T est a uno
... salto: NOP ; Destino de desvo (No hacer nada)
BRCC Salta si la bandera C es cero Sintaxis: BRCS k Operacin: Si
C = 0 entonces PC PC + k + 1 Si C = 1 entonces PC PC + 1 Operandos:
-64 k 63 Descripcin: Examina la bandera C y si es cero desva
relativamente al PC (contador de programa) en cualquier direccin
(PC - 63 destino PC + 64). El parmetro k es el offset de PC y es
representado en forma de complemento a dos. (Equivalente a la
instruccin BRBS 0, k). Banderas afectadas: Ninguna Ejemplo:
ADD r22, r23 ; Suma r23 a r22 BRCC desvo ; Desva si C est
borrado
... desvo: NOP ; Destino de desvo
BRCS Salta si la bandera C est a set (uno) Sintaxis: BRCS k
Operacin: Si C = 1 entonces PC PC + k + 1 Si C = 0 entonces PC PC +
1 Operandos: -64 k 63 Descripcin: Examina la bandera C y si est a
uno desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 0, k). Banderas afectadas: Ninguna Ejemplo:
CPI r26, $56 ; Comparar r26 con $56 BRCS desvo ; Desva si C est
a uno
... desvo: NOP ; Destino de desvo
10
-
BREAK Pausa Sintaxis: BREAK Operacin: Pausa en la depuracin
Operandos: Ninguno Descripcin: Se utiliza para la depuracin y
normalmente no se utiliza en el programa de la aplicacin. Cuando la
instruccin es ejecutada el CPU del AVR se pone en modo de
inactividad. Esto le da al depurador acceso a los recursos
internos. La instruccin no est disponible para todos los modelos de
AVRs. Banderas afectadas: Ninguna
BREQ Salta si es igual Sintaxis: BREQ k Operacin: Si Rd = Rr : Z
= 1 entonces PC PC + k + 1 Si Rd Rr : Z = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera Z y ejecuta un
salto relativo en PC (contador de programa) si Z est a uno. Si la
instruccin se ejecuta inmediatamente despus de alguna de las
instrucciones CP, CPI, SUB o SUBI, el salto ocurre si el nmero
binario con o sin signo representado en Rd es igual al nmero
binario con o sin signo representado en Rr. Esta instruccin desva
relativamente a PC en cualquier direccin (PC - 63 destino PC + 64).
El parmetro k es el offset de PC y es representado en forma de
complemento a dos. (Equivalente a la instruccin BRBS 1, k).
Banderas afectadas: Ninguna Ejemplo:
CP r1, r0 ; Comparar registros r1 y r0 BREQ igual ; Salta si Z=0
(los registros son iguales)
... igual: NOP ; Destino de desvo (No hacer nada)
BRGE Salta si es mayor o igual (con signo) Sintaxis: BRGE k
Operacin: Si Rd Rr : (N V = 0) entonces PC PC + k + 1 Si Rd < Rr
entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la
bandera S y si est a cero desva relativamente al PC (contador de
programa) en cualquier direccin (PC - 63 destino PC + 64). El
parmetro k es el offset de PC y es representado en forma de
complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la
instruccin se ejecuta inmediatamente despus de alguna de las
instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo
si el nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr. Banderas
afectadas: Ninguna Ejemplo:
CP r11, r12 ; Comparar los registros r11 y r12 BRGE desvo ;
Desva si r11 r12 (con signo)
... desvo: NOP ; Destino de desvo
BRHC Salta si la bandera H est a cero Sintaxis: BRHS k Operacin:
Si H = 0 entonces PC PC + k + 1 Si H = 1 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera H y si est a
cero desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:
BRHC desvio ; Desvo si la bandera H est a cero ... desvio: NOP ;
Destino de desvo
11
-
BRHS Salta si la bandera H est a uno Sintaxis: BRHS k Operacin:
Si H = 1 entonces PC PC + k + 1 Si H = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera H y si est a uno
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:
BRHS desvio ; Desvo si la bandera H est a uno ... desvio: NOP ;
Destino de desvo
BRID Salta si la bandera I est a cero Sintaxis: BRID k Operacin:
Si T = 0 entonces PC PC + k + 1 Si T = 1 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera I; si est a cero
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 7, k). Banderas afectadas: Ninguna Ejemplo:
BRIE desvio ; Desva si la bandera I est a cero ...
desvio: NOP ; Destino de desvo
BRIE Salta si la bandera I est a uno Sintaxis: BRIE k Operacin:
Si I = 1 entonces PC PC + k + 1 Si I = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera I; si est a uno
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 7, k). Banderas afectadas: Ninguna Ejemplo:
BRIE desvio ; Desva si la bandera I est a uno ...
desvio: NOP ; Destino de desvo
BRLO Salta si es menor Sintaxis: BREQ k Operacin: Si Rd < Rr
: C = 1 entonces PC PC + k + 1 Si Rd Rr : C = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera C y si est a uno
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBC 0, k). Si la instruccin se ejecuta
inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o
SUBI, el desvo puede ocurrir si y slo si el nmero binario con o sin
signo representado en Rd es mayor o igual al nmero binario con o
sin signo representado en Rr. Banderas afectadas: Ninguna
Ejemplo:
CP r1, r0 ; Comparar registros r1 y r0 BREQ igual ; Salta si Z=0
(los registros son iguales)
... igual: NOP ; Destino de desvo (No hacer nada)
12
-
BRLT Salta si es menor (con signo) Sintaxis: BRLT k Operacin: Si
Rd Rr : (N V = 1) entonces PC PC + k + 1 Si Rd < Rr entonces PC
PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera S y si
est a uno desva relativamente al PC (contador de programa) en
cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el
offset de PC y es representado en forma de complemento a dos.
(Equivalente a la instruccin BRBC 0, k). Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones CP,
CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el nmero
binario con o sin signo representado en Rd es mayor o igual al
nmero binario con o sin signo representado en Rr. Banderas
afectadas: Ninguna Ejemplo:
CP r16, r1 ; Comparar los registros r16 con r1 BRLT desvo ;
Desva si r16 < r1 (con signo)
... desvo: NOP ; Destino de desvo (No hacer nada)
BRMI Salta si es negativo Sintaxis: BRMI k Operacin: Si N = 1
entonces PC PC + k + 1 Si N = 0 entonces PC PC + 1 Operandos: -64 k
63 Descripcin: Examina la bandera N y si est a uno se desva
relativamente al PC (contador de programa en cualquier direccin (PC
- 63 destino PC + 64). El parmetro k es el offset de PC y es
representado en forma de complemento a dos. (Equivalente a la
instruccin BRBS 2, k). Banderas afectadas: Ninguna Ejemplo:
SUBI r18, 4 ; Restar 4 de r18 BRMI desvo ; Desva si la bandera
N=1
... desvo: NOP ; Destino de desvo
BRNE Salta si es diferente Sintaxis: BRNE k Operacin: Si Rd = Rr
: Z = 0 entonces PC PC + k + 1 Si Rd Rr : Z = 1 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera Z y ejecuta un
salto relativo en PC (contador de programa) si Z est a cero. Si la
instruccin se ejecuta inmediatamente despus de alguna de las
instrucciones CP, CPI, SUB o SUBI, el salto ocurre si el nmero
binario con o sin signo representado en Rd es diferente al nmero
binario con o sin signo representado en Rr. Esta instruccin desva
relativamente a PC en cualquier direccin (PC - 63 destino PC + 64).
El parmetro k es el offset de PC y es representado en forma de
complemento a dos. (Equivalente a la instruccin BRBS 1, k).
Banderas afectadas: Ninguna Ejemplo:
EOR r27, r27 ; Borrar r27 loop: INC r27 ; Incrementar r27
...
CPI r27,5 ; Comparar r27 con 5 BRNE loop ; Desvo si r27 5 NOP ;
Salida de Loop
BRPL Salta si es positivo Sintaxis: BRPL k Operacin: Si N = 0
entonces PC PC + k + 1 Si N = 1 entonces PC PC + 1 Operandos: -64 k
63 Descripcin: Examina la bandera N y si est a cero se desva
relativamente al PC (contador de programa en cualquier direccin (PC
- 63 destino PC + 64). El parmetro k es el offset de PC y es
representado en forma de complemento a dos. (Equivalente a la
instruccin BRBS 2, k). Banderas afectadas: Ninguna Ejemplo:
SUBI r26, $50 ; Restar $50 de r26 BRPL desvo ; Desva si r26 es
positivo
... desvo: NOP ; Destino de desvo
13
-
BRSH Salta si es mayor o igual (sin signo) Sintaxis: BRSH k
Operacin: Si Rd Rr : C = 0 entonces PC PC + k + 1 Si Rd < Rr : C
= 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la
bandera C y si est a cero desva relativamente al PC (contador de
programa) en cualquier direccin (PC - 63 destino PC + 64). El
parmetro k es el offset de PC y es representado en forma de
complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la
instruccin se ejecuta inmediatamente despus de alguna de las
instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo
si el nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr. Banderas
afectadas: Ninguna Ejemplo:
SUBI r19, 4 ; Restar 4 de r19 BRSH desvo ; Desva si r19 4 (sin
signo)
... desvo: NOP ; Destino de desvo
BRTC Salta si la bandera T est a cero Sintaxis: BRTC k Operacin:
Si T = 0 entonces PC PC + k + 1 Si T = 1 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera T y si est a
cero desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:
BST r3, 5 ; cargar el bit 5 de r3 en la bandera T BRTS desvio ;
Desva si ese bit est a cero
... desvio: NOP ; Destino de desvo
BRTS Salta si la bandera T est a uno Sintaxis: BRTS k Operacin:
Si T = 1 entonces PC PC + k + 1 Si T = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera T y si est a uno
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:
BST r3, 5 ; cargar el bit 5 de r3 en la bandera T BRTS desvio ;
Desva si ese bit est a uno
... desvio: NOP ; Destino de desvo
BRVC Salta si la bandera V est a cero Sintaxis: BRTC k Operacin:
Si V = 1 entonces PC PC + k + 1 Si V = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera V y si est a
cero desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:
ADD r3, r4 ; Suma el registro r4 a r3 BRVS desvio ; Desva si no
hay desbordamiento ...
desvio: NOP ; Destino de desvo
14
-
BRVS Salta si la bandera V est a uno Sintaxis: BRVS k Operacin:
Si V = 1 entonces PC PC + k + 1 Si V = 0 entonces PC PC + 1
Operandos: -64 k 63 Descripcin: Examina la bandera V y si est a uno
desva relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el offset de
PC y es representado en forma de complemento a dos. (Equivalente a
la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:
ADD r3, r4 ; Suma el registro r4 a r3 BRVS desvio ; Desva si hay
desbordamiento ...
desvio: NOP ; Destino de desvo
BSET Poner a uno el bit de una bandera Sintaxis: BSET s
Operacin: SREG(s) 1 Operandos: 0 s 7 Descripcin: Pone a uno un bit
especfico del registro de banderas SREG. Banderas afectadas: I: 1
si s = 7; de lo contrario sin cambio T: 1 si s = 6; de lo contrario
sin cambio H: 1 si s = 5; de lo contrario sin cambio S: 1 si s = 4;
de lo contrario sin cambio V: 1 si s = 3; de lo contrario sin
cambio N: 1 si s = 2; de lo contrario sin cambio Z: 1 si s = 1; de
lo contrario sin cambio C: 1 si s = 0; de lo contrario sin cambio
Ejemplo: BSET 6 ; Poner a uno la bandera T BSET 7 ; Interrupcin
habilitada
BST Guarda en T el bit de un registro Sintaxis: BST Rd, b
Operacin: T Rd(b) Operandos: 0 d 31, 0 b 7 Descripcin: Guarda el
bit b del registro Rd en la bandera T del registro de SREG.
Banderas afectadas: T: Se pone a uno si el bit b del registro Rd
est a uno, de lo contrario se pone a cero. Ejemplo: BST r1, 2 ;
Guardar el bit 2 de r1 en la bandera T BLD r0, 4 ; Cargar T en el
bit 4 de r0
CALL llamada larga a subrutina Sintaxis: CALL k Operacin: PC k
Dispositivos con PC de 16 bits PC k Dispositivos con PC de 22 bits
Operandos: 0 k 64K 0 k 4M Pila: Stack PC + 2 : SP SP -2 (2 Bytes)
Stack PC + 2 : SP SP -3 (3 Bytes) Descripcin: Llama a una subrutina
en cualquier lugar de la memoria de programa. La direccin de
retorno se almacena en la pila. El puntero de pila SP es
post-decrementado durante la instruccin CALL. Banderas afectadas:
Ninguna Ejemplo:
MOV r16, r0 ; Copiar r0 en r16 CALL check ; Llamado a
subrutina
... check: CPI r16, $42 ; Compara r16 con un valor ; especfico
...
BREQ error ; Salta si son iguales RET ; Retorno de subrutina
error: RJMP error ; Ciclo infinito
15
-
CBI Poner a cero un bit del registro I/O Sintaxis: CBI P, b
Operacin: (P, b) 1 Operandos: 0 P 31, 0 b 7 Descripcin: Pone a cero
un bit especfico en un registro de I/O. Esta operacin funciona en
los 32 registros de I/O ms bajos, y en los registros de trabajo de
0 a 31. Banderas afectadas: Ninguna Ejemplo: CBI $12, 7 ; Poner a
cero el bit 7 de Port D
CBR Pone a cero los bits del registro Sintaxis: CBR Rd, K
Operacin: Rd Rd AND ($FF K) Operandos: 16 d 31, 0 K 255 Descripcin:
Pone a uno los bits del registro Rd indicados. Realiza la operacin
ORI lgica entre el contenido del registro Rd y una constante K, y
deja el resultado en el registro destino Rd. Banderas afectadas: V:
Se pone a cero. N: Se activa si el bit MSB del resultado est a uno,
de lo contrario se borrar. Z: Se activa si el resultado es $00, de
lo contrario se borrar. Ejemplo: CBR r16, $F0 ; Borra el nibble
alto de r16 CBR r18, 1 ; Borra el bit 0 de r18
CLC Poner a cero la bandera C Sintaxis: CLC Operacin: C 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de acarreo C
del registro de estado SREG. Banderas afectadas: C: Se pone a cero
Ejemplo: ADD r0, r0 ; Sumar r0 a s mismo CLC ; Borrar la bandera de
acarreo
CLH Poner a cero la bandera H Sintaxis: CLH Operacin: H 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de medio
acarreo H del registro de estado SREG. Banderas afectadas: H: Se
pone a cero Ejemplo: CLH ; Borrar la bandera H
16
-
CLI Deshabilitar las interrupciones globales Sintaxis: CLI
Operacin: N 0 Operandos: Ninguno Descripcin: Pone a cero la bandera
de habilitacin de interrupciones globales I del registro de estado
SREG. Banderas afectadas: I: Se pone a cero Ejemplo: CLI ;
Interrupciones deshabilitadas IN r11, $16 ; Leer el Puerto B SEI ;
Interrupciones habilitadas
CLN Poner a cero la bandera N Sintaxis: CLN Operacin: N 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de resultado
negativo N del registro de estado SREG. Banderas afectadas: C: Se
pone a cero Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLN ; Borrar la
bandera N
CLR Borra un registro Sintaxis: CLR Rd Operacin: Rd Rd (XOR) Rd
Operandos: 0 d 31 Descripcin: Borra un registro. Esta instruccin
realiza una OR exclusiva entre un registro y en s mismo. Borrar
todos los bits del registro. Banderas afectadas: V: Se pone a cero.
N: Se pone a cero Z: Se pone a uno. Ejemplo:
CLR r18 ; Borrar r18 loop: INC r18 ; Incrementar r18 ...
CPI r18, $50 ; Comparar r18 con $50 BRNE loop
CLS Poner a cero la bandera S Sintaxis: CLS Operacin: S 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de signo S
del registro de estado SREG. Banderas afectadas: S: Se pone a cero
Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLS ; Borrar la bandera S
17
-
CLT Poner a cero la bandera T Sintaxis: CLT Operacin: T 0
Operandos: Ninguno Descripcin: Pone a cero la bandera T del
registro de estado SREG. Banderas afectadas: T: Se pone a cero
Ejemplo: CLT ; Borrar la bandera T
CLV Poner a cero la bandera V Sintaxis: CLV Operacin: V 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de
desbordamiento V del registro de estado SREG. Banderas afectadas:
V: Se pone a cero Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLV ; Borrar
la bandera V
CLZ Poner a cero la bandera Z Sintaxis: CLZ Operacin: Z 0
Operandos: Ninguno Descripcin: Pone a cero la bandera de resultado
cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone
a cero Ejemplo: ADD r2, r3 ; Suma r3 a r2 CLZ ; Borra la bandera
Z
COM Complemento a uno Sintaxis: COM Rd Operacin: Rd $FF - Rd
Operandos: 0 d 31 Descripcin: Realiza el complemento a uno del
registro Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si
el bit MSB del resultado est a uno, de lo contrario se borrar. Z:
Se activa si el resultado es $00, de lo contrario se borrar. C: se
pone a uno. Ejemplo:
COM r4 ; Realiza el complemento a uno de r4 BREQ prueba ; brinca
si la bandera Z est en uno. ... prueba: NOP ; Destino de desvo (No
hacer nada)
18
-
CP Compara Sintaxis: CP Rd, Rr Operacin: Rd -Rr Operandos: 0 d
31, 0 r 31 Descripcin: Efecta una comparacin entre dos registros Rd
y Rr. Ninguno de los registros es cambiado. Todos los desvos
condicionales pueden usarse despus de esta instruccin. Banderas
afectadas: H: Se activa si hay un acarreo negativo del bit 3, de lo
contrario se borrar. V: Se activa si ocurre un desbordamiento del
complemento a dos como resultado de la operacin, de lo contrario se
borrar. N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar. Z: Se activa si el resultado es $00, de lo
contrario se borrar. C: Se activa si el valor absoluto del
contenido de Rr es mayor que el contenido de Rd, de lo contrario se
borrar. Ejemplo:
CP r4, r19 ; Comparar r4 con r19 BRNE noteq ; Desva si la
bandera Z est activa.
... noteq: NOP ; Destino de desvo (No hacer nada)
CPC Compara con acarreo Sintaxis: CPC Rd, Rr Operacin: Rd Rr -C
Operandos: 0 d 31, 0 r 31 Descripcin: Realiza una comparacin entre
dos registros Rd y Rr y tambin se toma en cuenta el estado de la
bandera C previo. Ninguno de los registros es cambiado. Todos los
desvos condicionales pueden usarse despus de esta instruccin
Banderas afectadas: H: Se activa si hay un acarreo negativo del bit
3, de lo contrario se borrar. V: Se activa si ocurre un
desbordamiento del complemento a dos como resultado de la operacin,
de lo contrario se borrar. N: Se activa si el bit MSB del resultado
est a uno, de lo contrario se borrar. Z: El valor previo permanece
sin cambio cuando el resultado es ce o, de lo contrario se borrar.
rC Estar a uno si el valor absoluto del contenido de Rr + C, es
mayor que el contenido de Rd, de lo contrario se borrar.
Ejemplo:
; Comparar r3:r2 con r1:r0 CP r2, r0 ; Compara el byte bajo CPC
r3, r1 ; Compara el byte alto BRNE noteq ; Desva si la bandera Z
est activa
... noteq: NOP ; Destino de desvo( no hacer nada)
CPI Compara un registro con dato inmediato Sintaxis: CPI Rd, K
Operacin: Rd -K Operandos: 16 d 31, 0 K 255 Descripcin: Efecta una
comparacin entre el registro Rd y un dato inmediato. El registro no
es cambiado. Todos los desvos condicionales pueden usarse despus de
esta instruccin. Banderas afectadas: H: Se activa si hay un acarreo
negativo del bit 3, de lo contrario se borrar. V: Se activa si
ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. C: Se activa si el
valor absoluto del contenido de K es mayor que el contenido de Rd,
de lo contrario se borrar. Ejemplo:
CPI r19,3 ; Comparar r19 con 3 BRNE error ; Desva si la bandera
Z est activa
... error: NOP ; Destino de desvo (No hacer nada)
CPSE Compara y saltar si es igual Sintaxis: CPSE Rd, Rr
Operacin: Si Rd = Rr entonces PC PC + 2 ( o 3) Si Rd Rr entonces PC
PC + 1 Operandos: 0 d 31, 0 r 31 Descripcin: Ejecuta una comparacin
entre dos registros Rd y Rr, y si Rd Rr entonces la siguiente
instruccin se ejecuta de lo contrario la siguiente instruccin es
brincada. Banderas afectadas: Ninguna Ejemplo: INC r4 ; Incrementar
r4 CPSE r4, r0 ; Comparar r4 con r0 NEG r4 ; Slo ejecutar si r4 r0
NOP ; Continuar (No hacer nada)
19
-
DEC Decrementar el registro Sintaxis: DEC Rd Operacin: Rd Rd -1
Operandos: 0 d 31 Descripcin Se decrementa en uno al contenido del
registro Rd y deja el resultado en Rd. La bandera C de SREG no es
afectada por la operacin. Al funcionar con nmeros sin signo, slo se
puede esperar que funcionen de forma consistente las instrucciones
BREQ y BRNE. Al operar con valores en complemento a dos todas las
instrucciones de desvo estn disponibles. Banderas afectadas: V: Se
activa si ocurre un desbordamiento del complemento a dos como
resultado de la operacin, de lo contrario se borrar. Un
desbordamiento del complemento a dos ocurrir si y slo si Rd era $80
antes de la operacin. N: Se activa si el bit MSB del resultado est
a uno, de lo contrario se borrar. Z: Se activa si el resultado es
$00, de lo contrario se borrar. Ejemplo: LDI r17, $10 ; Cargar
constante en r17 Loop: ADD r1, r2 ; Sumar r2 a r1 DEC r17 ;
Decrementar r17 BRNE loop ; Desvo si r17 0 NOP ; Continuar (No
hacer nada)
EOR Funcin lgica OR-exclusiva () entre registros Sintaxis: EOR
Rd, Rr Operacin: Rd Rd Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se
realiza el XOR lgico entre el contenido del registro Rd y del
registro Rr; deja el resultado en el registro destino Rd. Banderas
afectadas: V: Se pone a cero. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. Ejemplo: EOR r4, r4 ;
Borrar r4 EOR r0, r22 ; OR exclusiva entre r0 y r22
ICALL llamada indirecta a subrutina Sintaxis: ICALL Operacin: PC
(15:0) Z (15:0) Operandos: Ninguno Pila: Stack PC + 1 : SP SP -2 (2
Bytes) Descripcin: Realiza una llamada indirecta a una subrutina
apuntada por el registro puntero Z. El registro puntero Z es de 16
bit y permite la llamada a subrutina dentro de los 64K words (128K
bytes) ms bajos de la seccin de espacio de memoria de programa. El
SP (puntero de pila) utiliza durante el ICALL un esquema de
post-decremento. Banderas afectadas: Ninguna Ejemplo:
MOV r30, r0 ; Poner offset a la tabla de llamada ICALL ; Rutina
de llamada que apunta a r31:r30
IJMP Salto indirecto Sintaxis: IJMP Operacin: PC Z(15:0)
Operandos: Ninguno Descripcin: Efecta un salto indirecto a una
direccin apuntada por el registro puntero Z. El registro puntero Z
es de 16 bits y permite saltos hacia los 64K words (128K bytes) ms
bajos de la seccin de memoria de programa. La instruccin no est
disponible para todos los modelos de AVRs. Banderas afectadas:
Ninguna Ejemplo: MOV r30, r0 ; Poner offset a la tabla de salto
IJMP ; Saltar a la rutina apuntada por r31:r30
20
-
IN Cargar un registro de trabajo con I/O Sintaxis: IN Rd, P
Operacin: Rd P Operandos: 0 d 31, 0 P 63 Descripcin: Carga un dato
proveniente del bloque de registros I/O (Puertos, Timers, registros
de configuracin, etc.) en el registro de trabajo Rd. Banderas
afectadas: Ninguna Ejemplo:
IN r25, $16 ; Carga en r25 el ;dato ;contenido en Puerto B
CPI r25,4 ; Comparar el valor de r25 con ; un dato inmediato
BREQ exit ; Desva si r25 = 4 ... exit: NOP ; Destino de
desvo
INC Incrementar el registro Sintaxis: INC Rd Operacin: Rd Rd +1
Operandos: 0 d 31 Descripcin Se incrementa en uno al contenido del
registro Rd y deja el resultado en el registro Rd. La bandera C de
SREG no es afectada por la operacin. Al funcionar con nmeros sin
signo, slo se puede esperar que funcionen de forma consistente las
instrucciones BREQ y BRNE. Al operar con valores en complemento a
dos todas las instrucciones de desvo estn disponibles. Banderas
afectadas: V: Se activa si ocurre un desbordamiento del complemento
a dos como resultado de la operacin, de lo contrario se borrar. Un
desbordamiento del complemento a dos ocurrir si y slo si Rd era $7F
antes de la operacin. N: Se activa si el bit MSB del resultado est
a uno, de lo contrario se borrar. Z: Se activa si el resultado es
$00, de lo contrario se borrar. Ejemplo: CLR r22 ; Borrar r22 loop:
INC r22 ; Incrementar r22 ... CPI r22, $4F ; Comparar r22 con $4f
BRNE loop ; Desvo si no son iguales NOP ; Continuar (No hacer
nada)
JMP Salto Sintaxis: JMP k Operacin: PC k Operandos: 0 k 4M
Descripcin: Ejecuta un salto a cualquier posicin de la memoria de
programa. La instruccin no es disponible para todos los modelos de
AVRs. Banderas afectadas: Ninguna Ejemplo:
MOV r1, r0 ; Copia r0 en r1 JMP lejos ; Salto incondicional
lejos: nop ; Destino de salto
LDI Carga de un dato inmediato Sintaxis: LDI Rd, K Operacin: Rd
K Operandos: 16 Rd 31, 0 K 255 Descripcin: Carga un dato inmediato
de 8-bits en cualquiera de los registros de trabajo a partir de R16
hasta R31. Banderas afectadas: Ninguna Ejemplo: CLR r31 ; Borra el
byte alto de Z LDI r30, $F0 ; Pone el byte bajo de Z a $F0 LPM ;
Carga una constante de la memoria
; de programa apuntada por Z
21
-
El resultado de estas combinaciones es indefinido: LD r26, X+ LD
r27, X+ LD r26, -X LD r27, -X Algunas variantes de esta instruccin
no son disponibles para todos los modelos de AVRs. Banderas
afectadas: Ninguna Ejemplo: CLR r27 ; Borra el byte alto de X LDI
r26, $60 ; Pone el byte bajo de X a $60 LD r0, X+ ; Carga en r0 el
dato de la localidad $60
;(X post-incrementado) LD r1, X ; Carga en r1 el dato contenido
en la
; localidad $61 LDI r26, $63 ; Pone el byte bajo de X a $63 LD
r2, X ; Carga en r2 el dato de la localidad $63 LD r3, -X ; Cargar
en r3 el dato de la localidad $62
;(X pre-decremento)
LD Carga indirecta usando X Sintaxis: LD Rd, X
LD Rd, X+ LD Rd, -X
Operacin: Rd (X) X: Sin cambios Rd (X), X X+1 X: Con
post-incremento X X1, Rd (X) X: Con pre-decremento Operandos: 0 d
31 Descripcin Se carga un byte de manera indirecta procedente del
rea de datos hacia un registro de trabajo. Para los dispositivos
con SRAM, el rea de datos se compone de los registros de: trabajo,
I/O y SRAM interna (y SRAM externa si es aplicable). Para los
dispositivos sin SRAM, el espacio de datos se compone slo por los
registros de trabajo. La EEPROM tiene un espacio de direccin
separado. La direccin de los datos es apuntado por el registro
puntero X (16 bits). Se limita el acceso de memoria al segmento de
datos de 64K bytes. Para acceder a otro segmento de datos en
dispositivos con ms de 64K bytes de datos de espacio, el registro
I/O RAMPX tiene que ser correctamente configurado. El registro
puntero X puede permanecer sin cambios por la operacin, puede
post-incrementarse o pre-decrementarse. Estas caractersticas son
apropiadas para acceder a matrices, tablas y uso del puntero de
pila con el registro puntero X. Slo el byte bajo del puntero X se
ocupa para dispositivos sin ms de 256 bytes de espacio de datos.
Para tales dispositivos, el byte alto del puntero no es usado por
esta instruccin y puede usarse para otros propsitos.
LD (LDD) Carga indirecta usando Y Sintaxis: LD Rd, Y
LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q
Operacin: Rd (Y) Y: Sin cambios Rd (Y), Y Y+1 Y: Con
post-incremento Y Y1, Rd (Y) Y: Con pre-decremento
Rd (Y+q) Y: Sin cambios, q: Desplazamiento
Operandos: 0 d 31, 0 q 63 Descripcin Se carga un byte de manera
indirecta procedente del rea de datos hacia un registro de trabajo.
Para los dispositivos con SRAM, el rea de datos se compone de los
registros de: trabajo, I/O y SRAM interna (y SRAM externa si es
aplicable). Para los dispositivos sin SRAM, el espacio de datos se
compone slo por los registros de trabajo. La EEPROM tiene un
espacio de direccin separado. La direccin de los datos es apuntado
por el registro puntero Y (16 bits). Se limita el acceso de memoria
al segmento de datos de 64K bytes. Para acceder a otro segmento de
datos en dispositivos con ms de 64K bytes de datos de espacio, el
registro I/O RAMPY tiene que ser correctamente configurado. El
registro puntero Y puede permanecer sin cambios por la operacin,
puede post-incrementarse o pre-decrementarse. Estas caractersticas
son apropiadas para acceder a matrices, tablas y uso del puntero de
pila con el registro puntero Y. Slo el byte bajo del puntero Y se
ocupa para dispositivos sin ms de 256 bytes de espacio de datos.
Para tales dispositivos, el byte alto del puntero no es usado por
esta instruccin y puede usarse para otros propsitos.
El resultado de estas combinaciones es indefinido: LD r28, Y+ LD
r29, Y+ LD r28, -Y LD r29, -Y Algunas variantes de esta instruccin
no son disponibles para todos los modelos de AVRs. Banderas
afectadas: Ninguna Ejemplo: CLR r29 ; Borra el byte alto de Y LDI
r28, $60 ; Pone el byte bajo de Y a $60 LD r0, Y+ ; Carga en r0 el
dato de la localidad $60
; (Y post-incrementado) LD r1, Y ; Carga en r1 el dato de la
localidad $61 LDI r28, $63 ; Pone el byte bajo de Y a $63 LD r2, Y
; Carga en r0 el dato de la localidad $63 LD r3,-Y ; Carga en r0 el
dato de la localidad $62
; (Y pre-decrementado) LDD r4, Y+2 ; Carga en r4 el dato de la
localidad $64
22
-
LD (LDD) Carga indirecta usando Z Sintaxis: LD Rd, Z
LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q
Operacin: Rd (Z) Z: Sin cambios Rd (Z), Z Z+1 Z: Con
post-incremento Z Z 1, Rd (Z) Z: Con pre-decremento
Rd (Z+q) Z: Sin cambios, q: Desplazamiento
Operandos: 0 d 31, 0 q 63 Descripcin Se carga un byte de manera
indirecta procedente del rea de datos hacia un registro de trabajo.
Para los dispositivos con SRAM, el rea de datos se compone de los
registros de: trabajo, I/O y SRAM interna (y SRAM externa si es
aplicable). Para los dispositivos sin SRAM, el espacio de datos se
compone slo por los registros de trabajo. La EEPROM tiene un
espacio de direccin separado. La direccin de los datos es apuntado
por el registro puntero Z (16 bits). Se limita el acceso de memoria
al segmento de datos de 64K bytes. Para acceder a otro segmento de
datos en dispositivos con ms de 64K bytes de datos de espacio, el
registro I/O RAMPX tiene que ser correctamente configurado. El
registro puntero Z puede permanecer sin cambios por la operacin,
puede post-incrementarse o pre-decrementarse. Estas caractersticas
son apropiadas para acceder a matrices, tablas y uso del puntero de
pila; Sin embargo, debido a que este puntero puede usarse para las
llamadas indirectas a subrutinas y los saltos indirectos, es mejor
usar a los punteros X o Y para direccionar al puntero de pila.
.
Slo el byte bajo del puntero Z se ocupa para dispositivos sin ms
de 256 bytes de espacio de datos. Para tales dispositivos, el byte
alto del puntero no es usado por esta instruccin y puede usarse
para otros propsitos. El resultado de estas combinaciones es
indefinido: LD r30, Z+ LD r31, Z+ LD r30, -Z LD r31, -Z Algunas
variantes de esta instruccin no son disponibles para todos los
modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r31 ;
Borra el byte alto de Z LDI r30, $60 ; Pone el byte bajo de Z a $60
LD r0, Z+ ; Carga en r0 el dato de la localidad $60
; (Z post-incrementado) LD r1, Z ; Carga en r1 el dato de la
localidad $61 LDI r30, $63 ; Pone el byte bajo de Z a $63 LD r2, Z
; Carga en r0 el dato de la localidad $63 LD r3,-Z ; Carga en r0 el
dato de la localidad $62
; (Z pre-decrementado) LDD r4, Z+2 ; Carga en r4 el dato de la
localidad $64
LDS Carga directa desde SRAM Sintaxis: LDS Rd, k Operacin: Rd
(k) Operandos: 0 d 31, 0 k 65535 Descripcin: Carga un byte del
espacio de memoria de datos a un registro de trabajo. Para los
dispositivos con SRAM, el espacio de datos est compuesto por los
registros de trabajo, memoria de I/O y SRAM interna (y SRAM externa
si es aplicable). Para los dispositivos sin SRAM, el espacio de
datos est compuesto slo por los registros de trabajo. La EEPROM
tiene un espacio de direcciones separado. Debe proporcionarse una
direccin de 16-bit. Se limita el acceso de memoria al segmento de
datos de 64K bytes. Para acceder a otro segmento de datos en
dispositivos con ms de 64K bytes de datos de espacio, el registro
I/O RAMPD tiene que ser correctamente configurado. Banderas
afectadas: Ninguna Esta instruccin no es disponible para todos los
modelos de AVRs. Ejemplo: LDS r2, $FF00 ; Carga r2 con el contenido
de la localidad
; $FF00 de la memoria de datos ADD r2, r1 ; Sumar r1 a r2 STS
$FF00, r2 ; Escribir en SRAM el contenido de r2
LPM Carga memoria de programa Sintaxis: LPM LPM Rd, Z LPM Rd, Z+
Operacin: R0 (Z) Z: Sin cambio, R0 implcito Rd (Z) Z: Sin cambio Rd
(Z), Z Z + 1 Z: Post-incrementado Operandos: 0 d 31 Descripcin: Se
carga un byte apuntado por el registro Z en el registro R0. La
memoria de programa est organizada en palabra (word) de 16-bits; el
bit menos significativo del puntero Z selecciona el byte bajo (0) o
el byte alto (1). Esta instruccin puede dirigirse a los primeros
64K bytes (32K words) de memoria de programa. El registro puntero Z
queda inalterado por el funcionamiento. Banderas afectadas: Ninguna
Esta instruccin no es disponible para todos los modelos de AVRs.
Ejemplo:
CLR r31 ; Borrar el byte alto de Z LDI r30, $F0 ; Poner a cero
el byte bajo de Z LPM ; Cargar la constante de la
;memoria de programa ;apuntada por Z (r31:r30)
23
-
LSL Desplazamiento a la izquierda Sintaxis: LSL Rd
Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits
de Rd una posicin hacia la izquierda. El bit 7 se carga en la
bandera C de SREG. Prcticamente esta operacin multiplica por dos al
contenido de Rd. Banderas afectadas: H: Se activa si hay un acarreo
del bit 3, de lo contrario se borrar. S: N C, para prueba de signo
V: N C (para N y C despus del desplazamiento) N: Se activa si el
bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se
activa si el resultado es $00, de lo contrario se borrar. C: Se
activa si antes del desplazamiento el MSB del Rd est a uno, de lo
contrario se borrar. Ejemplo: ADD r0, r4 ; Sumar r4 a r0 LSL r0 ;
Multiplicar r0 por 2
LSR Desplazamiento a la derecha Sintaxis: LSR Rd
Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits
de Rd una posicin hacia la derecha. En el bit 7 se carga un cero,
en la bandera C se carga el LSB de Rd. Prcticamente esta operacin
divide entre dos al contenido de Rd. Banderas afectadas: S: N C,
para prueba de signo V: N C (para N y C despus del desplazamiento)
N: Se pone a cero Z: Se activa si el resultado es $00, de lo
contrario se borrar. C: Se activa si el LSB de Rd antes del
desplazamiento estaba a uno. Ejemplo: ADD r0, r4 ; Sumar r4 a r0
LSR r0 ; Dividir a r0 entre 2
MOV Copia de registros Sintaxis: MOV Rd, Rr Operacin: Rd Rr
Operandos: 0 d 31, 0 r 31 Descripcin: Efecta una copia de un
registro en otro registro. El registro fuente Rr permanece sin
cambiar, mientras el registro destino Rd es cargado con una copia
de Rr. Banderas afectadas: Ninguna Ejemplo:
MOV r16,r0 ; Copiar r0 en r16 CALL check ; Llamada a
subrutina
... check: CPI r16,$11 ; Comparar r16 con $11 ...
RET ; Retorno de subrutina
MOVW Copia de registros de palabra Sintaxis: MOVW Rd + 1: Rd, Rr
+ 1: Rr Operacin: Rd + 1: Rd Rr + 1: Rr Operandos: d {0,2,,30} r
{0,2,,30} Descripcin: Efecta una copia de un par de registros en
otro par de registros. Los registros fuente Rr permanecen sin
cambiar, mientras los registros destino Rd son cargados con una
copia de Rr. Banderas afectadas: Ninguna Esta instruccin no es
disponible para todos los modelos de AVRs. Ejemplo:
MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16 CALL check ;
Llamada a subrutina
... check: CPI r16, $11 ; Comparar r16 con $11 ...
RET ; Retorno de subrutina
24
-
NEG Complemento a dos Sintaxis: NEG Rd Operacin: Rd $00 - Rd
Operandos: 0 d 31 Descripcin: Cambia el contenido del registro Rd
con su complemento a dos; el valor $80 se deja sin cambiar.
Banderas afectadas: H: Se activa si haba un acarreo negativo
(Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa
si ocurre un desbordamiento del complemento a dos de la resta
implcita de cero, de lo contrario se borrar. Un desbordamiento del
complemento a dos ocurrir si y slo si el contenido del registro
despus de la operacin es $80. N: Se activa si el bit MSB del
resultado est a uno, de lo contrario se borrar. Z: Se activa si el
resultado es $00, de lo contrario se borrar. C: Se activa si hay un
acarreo negativo (borrow) en la resta implcita de cero, de lo
contrario se borrar. La bandera C se activa en todos los casos
excepto cuando el contenido del registro despus de la operacin es
$00. Ejemplo:
SUB r11, r0 ; Restar r0 de r11 BRPL prueba ; Desvo si la bandera
N est a cero. NEG r11 ; Realizar el complemento a dos de r11
prueba: NOP ; Destino de desvo (No hacer nada)
NOP No operacin Sintaxis: NOP Operacin: Ninguna Operandos:
Ninguno Descripcin: Consume un ciclo sin realizar operaciones.
Banderas afectadas: Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ;
Poner a uno r17 OUT $18, r16 ; Escribir ceros en el Puerto B NOP ;
Esperar (No hacer nada) OUT $18, r17 ; Escribir unos en el Puerto
B
MULS Multiplicacin con signo Sintaxis: MULS Rd, Rr Operacin:
R1:R0 Rd x Rr Operandos: 16 d 31, 0 r 16 Descripcin: El
multiplicando Rd y el multiplicador Rr son registros con nmeros
signados. El resultado con signo es de 16-bit y se coloca la parte
ms significativa del resultado en registro R1 y la menos
significativa en R0.
Banderas afectadas: C: Se pone a uno si el bit 15 del resultado
est a uno. Z: Se pone a uno si el resultado es cero. Esta
instruccin no es disponible para todos los modelos de AVRs.
Ejemplo: MUL r21 r20 ; Multiplica R21 con R20 MOVW r20, r0 ; Copia
el resultado en R21: R20
MUL Multiplicacin sin signo Sintaxis: MUL Rd, Rr Operacin: R1:R0
Rd x Rr Operandos: 0 d 31, 0 r 31 Descripcin: El multiplicando Rd y
el multiplicador Rr son registros con nmeros sin signo. El
resultado sin signo es de 16-bit y se coloca la parte ms
significativa del resultado en registro R1 y la menos significativa
en R0. Si el multiplicando y el multiplicador son R1 y R0 el
resultado se sobrescribir en ellos.
Banderas afectadas: C: Se pone a uno si el bit 15 del resultado
est a uno. Z: Se pone a uno si el resultado es cero. Esta
instruccin no es disponible para todos los modelos de AVRs.
Ejemplo: MUL r5, r4 ; Multiplica R5 con R4 MOVW r4, r0 ; Copia el
resultado en R5: R4
25
-
OR Funcin lgica OR entre registros Sintaxis: OR Rd, Rr Operacin:
Rd Rd (OR) Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se realiza el
OR lgico entre el contenido del registro Rd y del registro Rr; deja
el resultado en el registro destino Rd. Banderas afectadas: V: Se
pone a cero. N: Se activa si el bit MSB del resultado est a uno, de
lo contrario se borrar. Z: Se activa si el resultado es $00, de lo
contrario se borrar. Ejemplo: OR r15, r16 ; Hacer OR lgico entre
registros
BST r15, 6 ; Almacena el bit 6 de r15 en el flag T BRTS ok ;
Desvo si el flag T est a uno ... ok: NOP ; Destino de desvo (No
hacer nada)
ORI Funcin lgica OR entre un registro y un dato inmediato
Sintaxis: ORI Rd, K Operacin: Rd Rd (OR) K Operandos: 0 d 31, 0 K
255 Descripcin: Se realiza el OR lgico entre el contenido del
registro Rd y el valor K; deja el resultado en el registro destino
Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit
MSB del resultado est a uno, de lo contrario se borrar. Z: Se
activa si el resultado es $00, de lo contrario se borrar. Ejemplo:
ORI r16, $F0 ; Poner a uno el nibble alto de r16 ORI r17, 1 ; Poner
a uno el bit 0 de r17
OUT Cargar en I/O un registro de trabajo Sintaxis: OUT P, Rr
Operacin: P Rr Operandos: 0 r 31, 0 P 63 Descripcin: Carga en un
registro del bloque I/O el contenido de un registro trabajo.
Banderas afectadas: Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ;
Poner a unos r17 OUT $18, r16 ; Escribir ceros en el Puerto B NOP ;
Esperar (No hacer nada) OUT $18, r17 ; Escribir unos en el Puerto
B
POP Sacar registro de la pila Sintaxis: POP Rr Operacin: Rr
STACK Operandos: 0 r 31 Descripcin: Carga el registro Rd con un
byte de la pila. El puntero de pila es incrementado en uno antes
del POP Banderas afectadas: Ninguna Esta instruccin no es
disponible para todos los modelos de AVRs. Ejemplo:
CALL routine ; Llamar a subrutina ... routine: PUSH r14 ;
Guardar r14 en la pila
PUSH r13 ; Guardar r13 en la pila ...
POP r13 ; Restaurar r13 POP r14 ; Restaurar r14 RET ; Retorno de
subrutina
26
-
PUSH Guardar registro en la pila Sintaxis: PUSH Rr Operacin:
STACK Rr Operandos: 0 r 31 Descripcin: Guarda el contenido del
registro Rr en la pila. El puntero de pila es post-decrementado en
uno despus del PUSH Banderas afectadas: Ninguna Esta instruccin no
es disponible para todos los modelos de AVRs. Ejemplo:
CALL routine ; Llamar a subrutina ... routine: PUSH r14 ;
Guardar r14 en la pila
PUSH r13 ; Guardar r13 en la pila ...
POP r13 ; Restaurar r13 POP r14 ; Restaurar r14 RET ; Retorno de
subrutina
RCALL llamada relativa a subrutina Sintaxis: RCALL k Operacin:
PC PC + k + 1 Operandos: -2K k 2K Pila: Stack PC + 1 : SP SP -2 (2
Bytes) Descripcin: Realiza una llamada relativa a una direccin que
se encuentra dentro de PC - 2K + 1 y PC +2K (words, palabra). En
ensamblador, se usan etiquetas en lugar de operadores relativos.
Para los microcontroladores AVR con memoria de programa que no
excede 4K words (8K bytes) esta instruccin puede direccionar a toda
la memoria desde cualquier posicin. El SP (puntero de pila) utiliza
durante el RCALL un esquema de post-decremento. Banderas afectadas:
Ninguna Ejemplo:
RCALL routine ; Llamada a subrutina
... routine: PUSH r14 ; Guardar r14 en la pila ...
POP r14 ; Restaurar r14 RET ; Retorno de subrutina
RET Retorno de subrutina Sintaxis: RET Operacin: PC Stack
Operandos: Ninguno Pila: SP SP + 2 (bytes) Descripcin: Efecta un
retorno de subrutina. La direccin de retorno es cargada de la pila.
El SP (puntero de pila) utiliza durante el RET un esquema de
post-incremento. Banderas afectadas: Ninguna Ejemplo:
CALL routine ; Llamada a subrutina
... routine: PUSH r14 ; Guardar r14 en la pila
... POP r14 ; Restaurar r14 RET ; Retorno de subrutina
RETI Retorno de interrupcin Sintaxis: RETI Operacin: PC Stack
Operandos: Ninguno Pila: SP SP + 2 (bytes) Descripcin: Realiza un
retorno de una interrupcin. La direccin de retorno es cargada desde
la pila; la bandera I de SREG (interrupcin global) se pone a uno.
El registro de estado no se guarda automticamente al entrar en una
rutina de interrupcin, y no se restaura al volver de la rutina
interrupcin. De ser necesario el programa debe incluir una rutina
para manejar adecuadamente esta situacin. El puntero de pila usa un
esquema de pre-incremento durante el RETI. Banderas afectadas: I:
Se pone a uno. Ejemplo: ... extint: PUSH r0 ; Guardar r0 en la pila
... POP r0 ; Restaurar r0 RETI ; Retorno y habilitacin de
interrupciones
27
-
RJMP Salto relativo Sintaxis: RJMP k Operacin: PC PC + k + 1
Operandos: -2K k 2K Descripcin: Ejecuta un salto relativo a una
direccin que se encuentra dentro de PC - 2K + 1 y PC +2K. En
ensamblador, se usan etiquetas en lugar de operadores relativos.
Para los microcontroladores AVR con memoria de programa que no
excede 4K words (8K bytes) esta instruccin puede dirigirse a toda
la memoria desde cualquier posicin de direccin. Banderas afectadas:
Ninguna Ejemplo:
CPI r16, $42 ; Compara r16 con $42 BRNE error ; Desvo si r16 $42
RJMP ok ; Salto incondicional
error: ADD r16, r17 ; Suma r17 a r16 INC r16 ; Incrementa
r16
ok: NOP ; Destino de RJMP
ROL Desplazamiento a la izquierdo con acarreo Sintaxis: ROL
Rd
Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits
de Rd una posicin hacia la izquierda. La bandera C se desplaza al
bit 0 de Rd. El bit 7 se desplaza hacia la bandera C. Esta operacin
combinada con LSL, multiplica por dos a valores multi-byte con o
sin signo. Banderas afectadas: H: Se activa si hay un acarreo del
bit 3, de lo contrario se borrar. S: N C, para prueba de signo V: N
C (para N y C despus del desplazamiento) N: Se activa si el bit MSB
del resultado est a uno, de lo contrario se borrar. Z: Se activa si
el resultado es $00, de lo contrario se borrar. C: Se activa si
antes del desplazamiento el MSB del Rd est a uno, de lo contrario
se borrar. Ejemplo:
LSL r18 ; Multiplica r19:r18 por dos ROL r19 ; r19:r18 es un
entero de dos
;bytes -con o sin signo- BRCS oneenc ; Desva si C est a uno
... oneenc: NOP ; Destino de desvo
ROR Desplazamiento a la derecha con acarreo Sintaxis: ROR Rd
Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits
de Rd una posicin hacia la derecha. La bandera C se desplaza al bit
7 de Rd. El bit 0 se desplaza hacia la bandera C. Esta operacin
combinada con LSR divide entre dos a valores multi-byte con o sin
signo. Banderas afectadas: S: N C, para prueba de signo V: N C
(para N y C despus del desplazamiento) N: Se pone a uno si el MSB
de Rd esta a uno. Z: Se activa si el resultado es $00, de lo
contrario se borrar. C: Se activa antes del desplazamiento el LSB
de Rd estaba a uno. Ejemplo: ADD r0, r4 ; Sumar r4 a r0 LSL r0 ;
Multiplicar r0 por 2
SBC Resta de dos registros con acarreo Sintaxis: SBC Rd, Rr
Operacin: Rd Rd Rr - C Operandos: 0 d 31, 0 r 31 Descripcin: Resta
dos registros y resta la bandera C; deja el resultado en el
registro Rd. Banderas afectadas: H: Se activa si haba un acarreo
negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V:
Se activa si ocurre un desbordamiento del complemento a dos como
resultado de la operacin, de lo contrario se borrar. N: Se activa
si el bit MSB del resultado est a uno, de lo contrario se borrar.
Z: El estado anterior permanece sin cambio cuando el resultado es
cero, de lo contrario se borrar. C: Se activa si el valor absoluto
del contenido de Rr + el acarreo previo es mayor que el valor
absoluto de Rd, de lo contrario se borrar. Ejemplo:
; Restar r1:r0 de r3:r2 SUB r2, r0 ; Restar el byte bajo SBC r3,
r1 ; Restar con acarreo el byte alto
28
-
SBCI Resta a un registro una constante y el acarreo Sintaxis:
ADD Rd, Rr Operacin: Rd Rd K - C Operandos: 16 d 31, 0 K 255
Descripcin: Resta una constante con un registro y con la bandera C;
deja el resultado en el registro destino Rd. . Banderas afectadas:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de lo
contrario se borrar (cero). V: Se activa si ocurre un
desbordamiento del complemento a dos como resultado de la operacin,
de lo contrario se borrar. N: Se activa si el bit MSB del resultado
est a uno, de lo contrario se borrar. Z: El estado anterior
permanece sin cambio cuando el resultado es cero, de lo contrario
se borrar. C: Se activa si el valor absoluto del contenido de Rr +
el acarreo previo es mayor que el valor absoluto de Rd, de lo
contrario se borrar. Ejemplo:
; Resta $4F23 de r17:r16 SUBI r16, $23 ; Restar el byte bajo
SBCI r17, $4F ; Restar con acarreo el byte alto
SBI Poner a uno un bit del registro I/O Sintaxis: SBI P, b
Operacin: (P, b) 1 Operandos: 0 P 31, 0 b 7 Descripcin: Pone a uno
un bit especfico de un registro del bloque I/O. Esta operacin
funciona en los 32 registros de I/O ms bajos. Direcciones de $00 a
$1F. Banderas afectadas: Ninguna Ejemplo: OUT $1E, r0 ; Escribir la
direccin de EEPROM SBI $1C, 0 ; Poner a uno el bit 0 de EECR IN r1,
$1D ; Leer datos de EEPROM
SBIC Salta si el bit del registro I/O es cero Sintaxis: SBCI P,
b Operacin: Si I/O(P,b) = 0 entonces PC PC + 2 ( o 3) Si I/O(P,b) 0
entonces PC PC + 1 Operandos: 0 P 31, 0 b 7 Descripcin: Examina un
bit del registro de I/O seleccionado y salta la siguiente
instruccin si el bit est en cero. Est operacin funciona en los 32
registros de I/O ms bajos, direcciones 0-31). Banderas afectadas:
Ninguna Ejemplo: espera: SBIC $1C, 1 ; Saltar prxima instruccin
si
; EEWE* est borrado RJMP espera ; Escritura de EEPROM no
; terminada NOP ; Continuar (No hacer nada) * EEWE es el bit 1
del registro EECR (Registro de Control de la memoria EEprom)
mapaeado en la localidad $1C de la memoria RAM.
SBIS Salta si el bit del registro I/O es uno Sintaxis: SBIS P, b
Operacin: Si I/O(P,b) = 1 entonces PC PC + 2 ( o 3) Si I/O(P,b) 1
entonces PC PC + 1 Operandos: 0 P 31, 0 b 7 Descripcin: Examina un
bit del registro de I/O seleccionado y salta la siguiente
instruccin si el bit est en uno. Est operacin funciona en los 32
registros de I/O ms bajos, direcciones 0-31). Banderas afectadas:
Ninguna Ejemplo: espera: SBIS $10, 0 ; Saltar la siguiente
instruccin ; si el bit 0 en el Puerto D est a uno RJMP espera ; Bit
0 borrado NOP ; Continuar (No hacer nada)
29
-
SBIW Resta un dato inmediato a un registro de palabra Sintaxis:
SBIW Rd+1:Rd,K Operacin: Rd +1: Rd Rd+1 : Rd - K Operandos:
Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos
indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL o slo
a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar R27:R26 o slo a
R26; R29:R28 o slo a R28; R31:R30 o slo a R30. Tambin podemos usar
el registro de 16 bits compuesto por R25:R24 al que tambin podemos
indicar como R24. Operando2: 0 K 63 Descripcin: SBIW resta un valor
K a un par de registros y deja el resultado en el par de registros
Banderas afectadas: S: Se activa slo si una de las banderas V o N
est a uno. V: Se activa si ocurre un desbordamiento del complemento
a dos como resultado de la operacin, de lo contrario se borrar. N:
Se activa si el bit MSB del resultado est a uno, de lo contrario se
borrar. Z: Se activa si el resultado es $0000, de lo contrario se
borrar. C: Se activa si el valor absoluto de K es mayor que el
valor absoluto de Rd, de lo contrario se borrar. Ejemplo: SBIW r24,
1 ; Restar 1 de r25:r24 SBIW r28, 63 ; Restar 63 del puntero Y
(r29:r28)
SBR Pone a uno los bits del registro Sintaxis: SBR Rd, K
Operacin: Rd Rd v K Operandos: 16 d 31, 0 K 255 Descripcin: Pone a
uno los bits del registro Rd indicados. Realiza la operacin ORI
lgica entre el contenido del registro Rd y una constante K, y deja
el resultado en el registro destino Rd. Banderas afectadas: V: Se
pone a cero. N: Se activa si el bit MSB del resultado est a uno, de
lo contrario se borrar. Z: Se activa si el resultado es $00, de lo
contrario se borrar. Ejemplo: SBR r16, 3 ; Poner a uno los bits 0 y
1 de r16 SBR r17, $F0 ; Poner a uno los 4 MSB en r17
SBRC Salta si el bit del registro es cero Sintaxis: SBRC Rr, b
Operacin: Si Rr(b) = 0 entonces PC PC + 2 ( o 3) Si Rr(b) 0
entonces PC PC + 1 Operandos: 0 r 31, 0 b 7 Descripcin: Examina un
bit del registro seleccionado y salta la siguiente instruccin si el
bit est borrado (cero). Banderas afectadas: Ninguna Ejemplo: SUB
r0, r1 ; Restar r1 de r0 SBRC r0, 7 ; Saltar si el bit 7 en r0 est
borrado SUB r0, r1 ; Slo se ejecuta si el bit 7 en r0 es uno NOP ;
Continuar (No hacer nada)
SBRS Salta si el bit del registro es uno Sintaxis: SBRC Rr, b
Operacin: Si Rr(b) = 1 entonces PC PC + 2 ( o 3) Si Rr(b) 1
entonces PC PC + 1 Operandos: 0 r 31, 0 b 7 Descripcin: Examina un
bit del registro seleccionado y salta la siguiente instruccin si el
bit est a uno. Banderas afectadas: Ninguna Ejemplo: SUB r0, r1 ;
Restar r1 de r0 SBRS r0, 7 ; Saltar si el bit 7 en r0 est a uno SUB
r0, r1 ; Slo se ejecuta si el bit 7 en r0 es cero NOP ; Continuar
(No hacer nada)
30
-
SEC Poner a uno la bandera C Sintaxis: SEC Operacin: C 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de acarreo C
del registro de estado SREG. Banderas afectadas: C: Se pone a uno
Ejemplo: SEC ; Poner a uno la bandera de acarreo ADC r0, 1 ; r0 =
r0 + r1 + 1
SEH Pone a uno la bandera H Sintaxis: SEH Operacin: H 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de medio
acarreo H del registro de estado SREG. Banderas afectadas: H: Se
pone a uno Ejemplo: SEH ; Poner a uno la bandera H
SEI Habilitar las interrupciones globales Sintaxis: SEI
Operacin: I 1 Operandos: Ninguno Descripcin: Pone a uno la bandera
de habilitacin de interrupciones globales I del registro de estado
SREG. Banderas afectadas: I: Se pone a uno Ejemplo: SEI ;
Interrupciones habilitadas SLEEP ; Activacin de modo SLEEP,
esperando ; alguna interrupcin
SEN Poner a uno la bandera N Sintaxis: SEN Operacin: N 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de resultado
negativo N del registro de estado SREG. Banderas afectadas: N: Se
pone a uno Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SEN ; Poner a uno
la bandera N
31
-
SER Carga todos los bits de un registro Sintaxis: SER Rd
Operacin: Rd $FF Operandos: 16 d 31 Descripcin: SER Carga
directamente $FF al registro seleccionado. Banderas afectadas:
Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ; Poner a uno r17 OUT
$18, r16 ; Escribir ceros al Puerto B NOP ; Retardo (No hacer nada)
OUT PORTB, r17 ; Escribir unos en el Puerto B
SES Pone a uno la bandera S Sintaxis: SES Operacin: S 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de signo S del
registro de estado SREG. Banderas afectadas: S: Se pone a uno
Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SES ; Poner a uno la bandera
S
SET Pone a uno la bandera T Sintaxis: SET Operacin: T 1
Operandos: Ninguno Descripcin: Pone a uno la bandera T del registro
de estado SREG. Banderas afectadas: T: Se pone a uno Ejemplo: SET ;
Poner a uno la bandera T
SEV Pone a uno la bandera V Sintaxis: SEV Operacin: V 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de
desbordamiento V del registro de estado SREG. Banderas afectadas:
V: Se pone a uno Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SEV ; Poner
a uno la bandera V
32
-
SEZ Poner a uno la bandera Z Sintaxis: SEZ Operacin: Z 1
Operandos: Ninguno Descripcin: Pone a uno la bandera de resultado
cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone
a uno Ejemplo: ADD r2, r19 ; Suma r19 a r2 SEZ ; Poner a uno la
bandera Z
SLEEP Activar modo sleep Sintaxis: SLEEP Operacin: Consulta el
manual del dispositivo para obtener una informacin detalla acerca
de este modo de operacin. Operandos: Ninguno Descripcin: Pone en
modo Sleep al microcontrolador Banderas afectadas: Ninguna Ejemplo:
MOV r0, r11 ; Copiar r11 en r0 LDI r16, (1
-
ST (STD) Almacenar indirectamente usando Y Sintaxis: LD Y,
Rr
LD Y+, Rr LD -Y, Rr STD Y+q, Rr
Operacin: (Y) Rr Y: Sin cambios (Y) Rr, Y Y+1 Y: Con
post-incremento Y Y1, (Y) Rr Y: Con pre-decremento
(Y+q) Rr Y: Sin cambios, q: Desplazamiento
Operandos: 0 r 31, 0 q 63 Descripcin Se almacena un byte de
manera indirecta procedente de un registro de trabajo hacia el rea
de datos. Para los dispositivos con SRAM, el rea de datos se
compone de los registros de: trabajo, I/O y SRAM interna (y SRAM
externa si es aplicable). Para los dispositivos sin SRAM, el
espacio de datos se compone slo por los registros de trabajo. La
EEPROM tiene un espacio de direccin separado. La direccin de los
datos es apuntado por el registro puntero Y (16 bits). Se limita el
acceso de memoria al segmento de datos de 64K bytes. Para acceder a
otro segmento de datos en dispositivos con ms de 64K bytes de datos
de espacio, el registro I/O RAMPY tiene que ser correctamente
configurado. El registro puntero Y puede permanecer sin cambios por
la operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y uso
del puntero de pila con el registro puntero Y. Slo el byte bajo del
puntero Y se ocupa para dispositivos sin ms de 256 bytes de espacio
de datos. Para tales dispositivos, el byte alto del puntero no es
usado por esta instruccin y puede usarse para otros propsitos.
El resultado de estas combinaciones es indefinido: ST Y+, r28 ST
Y+, r29 ST -Y, r28 ST -Y, r29 Algunas variantes de esta instruccin
no son disponibles para todos los modelos de AVRs. Banderas
afectadas: Ninguna Ejemplo: CLR r29 ; Borra el byte alto de Y LDI
r28, $60 ; Pone el byte bajo de Y a $60 ST Y+, r0 ; Almacena r0 en
la localidad $60
; (Y post-incrementado) ST Y, R1 ; Almacena r1 en la localidad
$61 LDI r28, $63 ; Pone el byte bajo de Y a $63 ST Y, r2 ; Almacena
r0 en la localidad $63 ST -Y, r3 ; Almacena r0 en la localidad
$62
; (Y pre-decrementado) STD Y+2, r4 ; Almacena r4 en la localidad
$64
ST (STD) Almacenar indirectamente usando Z Sintaxis: LD Z,
Rr
LD Z+, Rr LD -Z, Rr STD Z+q, Rr
Operacin: (Z) Rr Z: Sin cambios (Z) Rr, Z Z+1 Z: Con
post-incremento Z Z1, (Z) Rr Z: Con pre-decremento
(Z+q) Rr Z: Sin cambios, q: Desplazamiento
Operandos: 0 r 31, 0 q 63 Descripcin Se almacena un byte de
manera indirecta procedente de un registro de trabajo hacia el rea
de datos. Para los dispositivos con SRAM, el rea de datos se
compone de los registros de: trabajo, I/O y SRAM interna (y SRAM
externa si es aplicable). Para los dispositivos sin SRAM, el
espacio de datos se compone slo por los registros de trabajo. La
EEPROM tiene un espacio de direccin separado. La direccin de los
datos es apuntado por el registro puntero Z (16 bits). Se limita el
acceso de memoria al segmento de datos de 64K bytes. Para acceder a
otro segmento de datos en dispositivos con ms de 64K bytes de datos
de espacio, el registro I/O RAMPZ tiene que ser correctamente
configurado. El registro puntero Z puede permanecer sin cambios por
la operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y uso
del puntero de pila; Sin embargo, debido a que este puntero puede
usarse para las llamadas indirectas a subrutinas y los saltos
indirectos, es mejor usar a los punteros X o Y para direccionar al
puntero de pila.
Slo el byte bajo del puntero Z se ocupa para dispositivos sin ms
de 256 bytes de espacio de datos. Para tales dispositivos, el byte
alto del puntero no es usado por esta instruccin y puede usarse
para otros propsitos. El resultado de estas combinaciones es
indefinido: ST Z+, r30 ST Z+, r31 ST -Z, r30 ST -Z, r31 Algunas
variantes de esta instruccin no son disponibles para todos los
modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r31 ;
Borra el byte alto de Z LDI r30, $60 ; Pone el byte bajo de Z a $60
ST Z+, r0 ; Almacena r0 en la localidad $60
; (Z post-incrementado) ST Z, r1 ; Almacena r1 en la localidad
$61 LDI r30, $63 ; Pone el byte bajo de Z a $63 ST Z, r2 ; Almacena
r0 en la localidad $63 ST Z, r3 ; Almacena r0 en la localidad
$62
; (Z pre-decrementado) STD Z+2, r4 ; Almacena r4 en la localidad
$64
34
-
STS Almacena directamente en SRAM Sintaxis: STS (k), Rr
Operacin: (k) Rd Operandos: 0 r 31, 0 k 65535 Descripcin: Almacena
un byte de un registro de trabajo en la memoria de datos. Para los
dispositivos con SRAM, el espacio de datos est compuesto por los
registros de trabajo, memoria de I/O y SRAM interna (y SRAM externa
si es aplicable). Para los dispositivos sin SRAM, el espacio de
datos est compuesto slo por los registros de trabajo. La EEPROM
tiene un espacio de direcciones separado. Debe proporcionarse una
direccin de 16-bit. Se limita el acceso de memoria al segmento de
datos de 64K bytes. Para acceder a otro segmento de datos en
dispositivos con ms de 64K bytes de datos de espacio, el registro
I/O RAMPD tiene que ser correctamente configurado. Banderas
afectadas: Ninguna Esta instruccin no es disponible para todos los
modelos de AVRs. Ejemplo: LDS r2, $FF00 ; Carga r2 con el contenido
de la localidad
; $FF00 de la memoria de datos ADD r2, r1 ; Sumar r1 a r2 STS
$FF00, r2 ; Escribir en SRAM el contenido de r2
SUB Resta de dos registros sin acarreo Sintaxis: SUB Rd, Rr
Operacin: Rd Rd - Rr Operandos: 0 d 31, 0 r 31 Descripcin: Resta
dos registros sin considerar la bandera C y deja el resultado en el
registro destino Rd. Banderas afectadas: H: Se activa si hay un
acarreo negativo (Borrow) del bit 3, de lo contrario se borrar. V:
Se activa si ocurre un desbordamiento del complemento a dos como
resultado de la operacin, de lo contrario se borrar. N: Se activa
si el bit MSB del resultado est a uno, de lo contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar. C:
Se activa si el valor absoluto del contenido de Rr es mayor que el
valor absoluto de Rd, de lo contrario se borrar. Ejemplo: ADD r1,
r2 ; Suma r2 a r1 (r1=r1+r2) ADD r28, r28 ; Suma r28 a s mismo
(r28=r28+r28)
SUBI Resta un dato inmediato a un registro Sintaxis: SUBI Rd,Rr
Operacin: Rd Rd - K Operandos: 16 d 31, 0 K 255 Descripcin: Resta
un registro con una constante y deja el resultado en el registro
Rd. Esta instruccin trabaja con los registros R16 a R31 y es ideal
para utilizarla con los punteros X, Y y Z. Banderas afectadas: H:
Se activa si hay un acarreo negativo (Borrow) del bit 3, de lo
contrario se borrar (cero). V: Se activa si ocurre un
desbordamiento del complemento a dos como resultado de la operacin,
de lo contrario se borrar. N: Se activa si el bit MSB del
resultad