7/23/2019 Instruciones Avr Espaol
1/33
En este apartado se comentan las instrucciones de ensamblador que poseen los C AVRde 8-BIT. Se explica la funcin de cada una de ellas, su sintaxis, operandos utilizados yuna descripcin con ejemplos.
El conjunto de instrucciones para estos microcontroladores se puede dividir en elsiguiente orden de grupos:
Instrucciones Aritmticas y LgicasInstrucciones de Desvo (salto)Instrucciones de Transferencia de DatosInstrucciones 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 elmicroprocesador. Dependiendo de la instruccin, puede haber uno o dos operandos,incluso pueden no existir; su contenido consiste en un nmero, una variable o unadireccin; normalmente el resultado de una operacin lgica, aritmtica o de carga esalmacenado 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:R26Y=R29:R28 Z=R31:R30)
P Registros del bloque I/O
q Desplazamiento (6-bit) por direccionamiento directo
4
CONJUNTO DE INSTRUCCIONESAVR
7/23/2019 Instruciones Avr Espaol
2/33
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 BLDo BST
V: Indicador de complemento a dosdesbordado
I: Bandera de interrupciones globales
RESUMEN DEL CONJUNTO DE INSTRUCCIONES
Instrucciones Aritmticas y LgicasMnemnico 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 unoNEG 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 signoMULS 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 subrutinaICALL Ninguno Llamada indirecta a subrutina
5
7/23/2019 Instruciones Avr Espaol
3/33
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 ComparaCPC 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
7/23/2019 Instruciones Avr Espaol
4/33
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-DecrementoST 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 SleepWDR Ninguno Reiniciar el Watchdog
7
7/23/2019 Instruciones Avr Espaol
5/33
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.
Banderasafectadas:
H: Se activa si hay un acarreo del bit 3, de lo contrario seborrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 locontrario 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 ydeja el resultado en el registro destino Rd.
Banderasafectadas:
H: Se activa si hay un acarreo del bit 3, de lo contrario seborrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 locontrario 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. Podemosindicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YLo slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizarR27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo aR30. Tambin podemos usar el registro de 16 bits compuesto porR25:R24 al que tambin podemos indicar como R24.
Operando2:0K 63
Descripcin: Agrega un valor K a un par de registros y deja elresultado en el par de registros
Banderasafectadas:
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 dela operacin.N: Se activa si el bit MSB est a uno.Z: Se activa si el resultado es 0x00.C: Seactivasi 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 delregistro Rd y del registro Rr; deja el resultado en el registrodestino Rd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 r2LDI r16, 1 ; Poner 0000 0001 en r16AND r2, r16 ; Aislar el bit 0 en r2
8
7/23/2019 Instruciones Avr Espaol
6/33
ANDI Funcin lgica AND entre un registro yun 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 delregistro Rd y el valor K; deja el resultado en el registro destinoRd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 r18ANDI 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 laderecha. El bit 7 se mantiene constante. El bit 0 se carga dentrode la bandera C. Esta operacin divide entre dos un valor consigno sin cambiar su signo. La bandera C puede usarse pararedondear el resultado.
Banderasafectadas:
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 auno.
Ejemplo:
LDI r16, $10 ; Cargar 16 decimal en r16ASR r16 ; r16 = r16 / 2LDI r17, $FC ; Cargar -4 en r17ASR r17 ; r17 = r17 / 2
BCLR Poner a cero el bit de una banderaSintaxis: BCLR s
Operacin: SREG(s) 0
Operandos: 0 s 7
Descripcin: Pone a cero un bit especfico del registro debanderas SREG.
Banderasafectadas:
I: 0 si s = 7; de lo contrario sin cambioT: 0 si s = 6; de lo contrario sin cambioH: 0 si s = 5; de lo contrario sin cambioS: 0 si s = 4; de lo contrario sin cambioV: 0 si s = 3; de lo contrario sin cambioN: 0 si s = 2; de lo contrario sin cambioZ: 0 si s = 1; de lo contrario sin cambioC: 0 si s = 0; de lo contrario sin cambio
Ejemplo:
BCLR 0 ; Borrar la bandera CBCLR 7 ; Deshabilitar interrupciones
BLD Carga en un registro la bandera TSintaxis: 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 bdel registro Rd.
Banderasafectadas: Ninguna
Ejemplo:
BST r1, 2 ; Guardar el bit 2 de r1 en la bandera TBLD r0, 4 ; Cargar T en el bit 4 de r0
9
7/23/2019 Instruciones Avr Espaol
7/33
BRBC Brinca si el bit de SREG es cero
Sintaxis: BRBC s, k
Operacin: Si SREG(s) = 0 entonces PC PC + k +1Si SREG(s) = 1 entonces PC PC + 1
Operandos: 0 s 7, -64 k 63
Descripcin: Examina un bit del registro SREG y realiza unsalto relativo en el PC (contador de programa) si el bit est acero. La instruccin desva relativamente al PC en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.
Banderasafectadas: Ninguna
Ejemplo:
CPI r20, 5 ; Comparar r20 con el valor 5BRBC 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 +1Si SREG(s) = 0 entonces PC PC + 1
Operandos: 0 s 7, -64 k 63
Descripcin: Examina un bit del registro SREG y realiza unsalto relativo en el PC (contador de programa) si el bit est a uno. La instruccin desva relativamente al PC en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.
Banderasafectadas: Ninguna
Ejemplo:
BST r0, 3 ; Carga la bandera T con el bit 3 de r0BRBS 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 ceroSintaxis: BRCS k
Operacin: Si C = 0 entonces PC PC + k + 1Si C = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera C y si es cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 0, k).
Banderasafectadas: Ninguna
Ejemplo:
ADD r22, r23 ; Suma r23 a r22BRCC 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 + 1Si C = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera C y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 0, k).
Banderasafectadas: Ninguna
Ejemplo:
CPI r26, $56 ; Comparar r26 con $56BRCS desvo ; Desva si C est a uno
...desvo: NOP ; Destino de desvo
10
7/23/2019 Instruciones Avr Espaol
8/33
BREAK Pausa
Sintaxis: BREAK
Operacin: Pausa en la depuracin
Operandos: Ninguno
Descripcin: Se utiliza para la depuracin y normalmente no seutiliza en el programa de la aplicacin. Cuando la instruccin esejecutada el CPU del AVR se pone en modo de inactividad. Estole da al depurador acceso a los recursos internos.
La instruccin no est disponible para todos los modelos deAVRs.
Banderasafectadas: Ninguna
BREQ Salta si es igual
Sintaxis: BREQ k
Operacin: Si Rd = Rr : Z = 1 entonces PC PC + k + 1Si Rd Rr : Z = 0 entonces PCPC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera Z y ejecuta un salto relativo enPC (contador de programa) si Z est a uno. Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con osin signo representado en Rd es igual al nmero binario con o sinsigno representado en Rr. Esta instruccin desva relativamente aPC en cualquier direccin (PC - 63 destino PC + 64). Elparmetro k es el offset de PC y es representado en forma decomplemento a dos. (Equivalente a la instruccin BRBS 1, k).
Banderasafectadas: Ninguna
Ejemplo:
CP r1, r0 ; Comparar registros r1 y r0BREQ 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 < Rrentonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera S y si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBC 0, k). Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si elnmero binario con o sin signo representado en Rd es mayor oigual al nmero binario con o sin signo representado en Rr.
Banderasafectadas: Ninguna
Ejemplo:
CP r11, r12 ; Comparar los registros r11 y r12BRGE desvo ; Desva si r11 r12 (con signo)
...desvo: NOP ; Destino de desvo
BRHC Salta si la bandera H est a ceroSintaxis: BRHS k
Operacin: Si H = 0 entonces PC PC + k + 1Si H = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera H y si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 5, k).
Banderasafectadas: Ninguna
Ejemplo:
BRHC desvio ; Desvo si la bandera H est a cero...
desvio: NOP ; Destino de desvo
11
7/23/2019 Instruciones Avr Espaol
9/33
BRHS Salta si la bandera H est a uno
Sintaxis: BRHS k
Operacin: Si H = 1 entonces PC PC + k + 1Si H = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera H y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 5, k).
Banderasafectadas: 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 + 1Si T = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera I; si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 7, k).
Banderasafectadas: 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 unoSintaxis: BRIE k
Operacin: Si I = 1 entonces PC PC + k + 1Si I = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera I; si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 7, k).
Banderasafectadas: Ninguna
Ejemplo:
BRIE desvio ; Desva si la bandera I est a uno...
desvio: NOP ; Destino de desvo
BRLO Salta si es menorSintaxis: BREQ k
Operacin: Si Rd < Rr : C = 1 entonces PC PC + k + 1Si Rd Rr : C = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin:Examina la bandera C y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBC 0, k). Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si elnmero binario con o sin signo representado en Rd es mayor oigual al nmero binario con o sin signo representado en Rr.
Banderasafectadas: Ninguna
Ejemplo:
CP r1, r0 ; Comparar registros r1 y r0BREQ igual ; Salta si Z=0 (los registros son iguales)...
igual: NOP ; Destino de desvo (No hacer nada)
12
7/23/2019 Instruciones Avr Espaol
10/33
BRLT Salta si es menor (con signo)
Sintaxis: BRLT k
Operacin: Si Rd Rr : (N V = 1) entonces PC PC + k + 1
Si Rd < Rrentonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera S y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBC 0, k). Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si elnmero binario con o sin signo representado en Rd es mayor oigual al nmero binario con o sin signo representado en Rr.
Banderasafectadas: Ninguna
Ejemplo:
CP r16, r1 ; Comparar los registros r16 con r1BRLT 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 + 1Si N = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera N y si est a uno se desvarelativamente al PC (contador de programa en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 2, k).
Banderasafectadas: Ninguna
Ejemplo:
SUBI r18, 4 ; Restar 4 de r18BRMI desvo ; Desva si la bandera N=1
...desvo: NOP ; Destino de desvo
BRNE Salta si es diferenteSintaxis: BRNE k
Operacin: Si Rd = Rr : Z = 0 entonces PC PC + k + 1Si Rd Rr : Z = 1 entonces PCPC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera Z y ejecuta un salto relativo enPC (contador de programa) si Z est a cero. Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con osin signo representado en Rd es diferente al nmero binario cono sin signo representado en Rr. Esta instruccin desvarelativamente a PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado enforma de complemento a dos. (Equivalente a la instruccinBRBS 1, k).
Banderasafectadas: Ninguna
Ejemplo:
EOR r27, r27 ; Borrar r27loop: INC r27 ; Incrementar r27
...CPI r27,5 ; Comparar r27 con 5BRNE loop ; Desvo si r27 5NOP ; Salida de Loop
BRPL Salta si es positivoSintaxis: BRPL k
Operacin: Si N = 0 entonces PC PC + k + 1Si N = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera N y si est a cero se desvarelativamente al PC (contador de programa en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 2, k).
Banderasafectadas: Ninguna
Ejemplo:
SUBI r26, $50 ; Restar $50 de r26BRPL desvo ; Desva si r26 es positivo
...desvo: NOP ; Destino de desvo
13
7/23/2019 Instruciones Avr Espaol
11/33
BRSH Salta si es mayor o igual (sin signo)
Sintaxis: BRSH k
Operacin: Si Rd Rr : C = 0 entonces PC PC + k + 1Si Rd < Rr : C = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera C y si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBC 0, k). Si la instruccin seejecuta inmediatamente despus de alguna de las instruccionesCP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si elnmero binario con o sin signo representado en Rd es mayor oigual al nmero binario con o sin signo representado en Rr.
Banderasafectadas: Ninguna
Ejemplo:
SUBI r19, 4 ; Restar 4 de r19BRSH 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 + 1Si T = 1 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera T y si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 5, k).
Banderasafectadas: Ninguna
Ejemplo:
BST r3, 5 ; cargar el bit 5 de r3 en la bandera TBRTS desvio ; Desva si ese bit est a cero
...desvio: NOP ; Destino de desvo
BRTS Salta si la bandera T est a unoSintaxis: BRTS k
Operacin: Si T = 1 entonces PC PC + k + 1Si T = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera T y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 6, k).
Banderasafectadas: Ninguna
Ejemplo:
BST r3, 5 ; cargar el bit 5 de r3 en la bandera TBRTS desvio ; Desva si ese bit est a uno
...desvio: NOP ; Destino de desvo
BRVC Salta si la bandera V est a ceroSintaxis: BRTC k
Operacin: Si V = 1 entonces PC PC + k + 1Si V = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera V y si est a cero desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 6, k).
Banderasafectadas: Ninguna
Ejemplo:
ADD r3, r4 ; Suma el registro r4 a r3BRVS desvio ; Desva si no hay desbordamiento
...desvio: NOP ; Destino de desvo
14
7/23/2019 Instruciones Avr Espaol
12/33
BRVS Salta si la bandera V est a uno
Sintaxis: BRVS k
Operacin: Si V = 1 entonces PC PC + k + 1Si V = 0 entonces PC PC + 1
Operandos: -64 k 63
Descripcin: Examina la bandera V y si est a uno desvarelativamente al PC (contador de programa) en cualquierdireccin (PC - 63 destino PC + 64). El parmetro k es eloffset de PC y es representado en forma de complemento a dos.(Equivalente a la instruccin BRBS 6, k).
Banderasafectadas: Ninguna
Ejemplo:
ADD r3, r4 ; Suma el registro r4 a r3BRVS 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 debanderas SREG.
Banderasafectadas:
I: 1 si s = 7; de lo contrario sin cambioT: 1 si s = 6; de lo contrario sin cambioH: 1 si s = 5; de lo contrario sin cambioS: 1 si s = 4; de lo contrario sin cambioV: 1 si s = 3; de lo contrario sin cambioN: 1 si s = 2; de lo contrario sin cambioZ: 1 si s = 1; de lo contrario sin cambioC: 1 si s = 0; de lo contrario sin cambio
Ejemplo:
BSET 6 ; Poner a uno la bandera TBSET 7 ; Interrupcin habilitada
BST Guarda en T el bit de un registroSintaxis: 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 delregistro de SREG.
Banderasafectadas:
T: Se pone a uno si el bit b del registro Rd est a uno, de locontrario se pone a cero.
Ejemplo:
BST r1, 2 ; Guardar el bit 2 de r1 en la bandera TBLD r0, 4 ; Cargar T en el bit 4 de r0
CALL llamada larga a subrutinaSintaxis: CALL k
Operacin: PC k Dispositivos con PC de 16 bitsPC k Dispositivos con PC de 22 bits
Operandos: 0 k 64K0 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 lamemoria de programa. La direccin de retorno se almacena en lapila. El puntero de pila SP es post-decrementado durante lainstruccin CALL.
Banderasafectadas: Ninguna
Ejemplo:
MOV r16, r0 ; Copiar r0 en r16CALL check ; Llamado a subrutina
...check: CPI r16, $42 ; Compara r16 con un valor
; especfico...
BREQ error ; Salta si son igualesRET ; Retorno de subrutina
error: RJMP error ; Ciclo infinito
15
7/23/2019 Instruciones Avr Espaol
13/33
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, yen los registros de trabajo de 0 a 31.
Banderasafectadas: 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 registroRd y una constante K, y deja el resultado en el registro destinoRd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 CSintaxis: CLC
Operacin: C 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera de acarreo C del registro deestado SREG.
Banderasafectadas:
C: Se pone a cero
Ejemplo:
ADD r0, r0 ; Sumar r0 a s mismoCLC ; Borrar la bandera de acarreo
CLH Poner a cero la bandera HSintaxis: CLH
Operacin: H 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera de medio acarreo H delregistro de estado SREG.
Banderasafectadas:
H: Se pone a cero
Ejemplo:
CLH ; Borrar la bandera H
16
7/23/2019 Instruciones Avr Espaol
14/33
CLI Deshabilitar las interrupciones globales
Sintaxis: CLI
Operacin: N 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera de habilitacin deinterrupciones globales I del registro de estado SREG.
Banderasafectadas:
I: Se pone a cero
Ejemplo:
CLI ; Interrupciones deshabilitadasIN r11, $16 ; Leer el Puerto BSEI ; 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 delregistro de estado SREG.
Banderasafectadas:
C: Se pone a cero
Ejemplo:
ADD r2, r3 ; Sumar r3 a r2
CLN ; Borrar la bandera N
CLR Borra un registroSintaxis: CLR Rd
Operacin: Rd Rd (XOR) Rd
Operandos: 0 d 31
Descripcin: Borra un registro. Esta instruccin realiza una ORexclusiva entre un registro y en s mismo. Borrar todos los bitsdel registro.
Banderasafectadas:
V: Se pone a cero.N: Se pone a ceroZ: Se pone a uno.
Ejemplo:
CLR r18 ; Borrar r18loop: INC r18 ; Incrementar r18
...CPI r18, $50 ; Comparar r18 con $50
BRNE loop
CLS Poner a cero la bandera SSintaxis: CLS
Operacin: S 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera de signo S del registro deestado SREG.
Banderasafectadas:
S: Se pone a cero
Ejemplo:
ADD r2, r3 ; Sumar r3 a r2CLS ; Borrar la bandera S
17
7/23/2019 Instruciones Avr Espaol
15/33
CLT Poner a cero la bandera T
Sintaxis: CLT
Operacin: T 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera T del registro de estadoSREG.
Banderasafectadas:
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 delregistro de estado SREG.
Banderasafectadas:
V: Se pone a cero
Ejemplo:
ADD r2, r3 ; Sumar r3 a r2
CLV ; Borrar la bandera V
CLZ Poner a cero la bandera ZSintaxis: CLZ
Operacin: Z 0
Operandos: Ninguno
Descripcin: Pone a cero la bandera de resultado cero Z delregistro de estado SREG.
Banderasafectadas:
Z: Se pone a cero
Ejemplo:
ADD r2, r3 ; Suma r3 a r2CLZ ; Borra la bandera Z
COM Complemento a unoSintaxis: COM Rd
Operacin: Rd $FF - Rd
Operandos: 0 d 31
Descripcin: Realiza el complemento a uno del registro Rd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 r4BREQ prueba ; brinca si la bandera Z est en uno....
prueba: NOP ; Destino de desvo (No hacer nada)
18
7/23/2019 Instruciones Avr Espaol
16/33
CP Compara
Sintaxis: CP Rd, Rr
Operacin: Rd -Rr
Operandos: 0 d 31, 0 r 31
Descripcin: Efecta una comparacin entre dos registros Rd yRr. Ninguno de los registros es cambiado. Todos los desvoscondicionales pueden usarse despus de esta instruccin.
Banderasafectadas:
H: Se activa si hay un acarreo negativo del bit 3, de lo contrariose borrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 mayorque el contenido de Rd, de lo contrario se borrar.
Ejemplo:
CP r4, r19 ; Comparar r4 con r19BRNE 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 yRr y tambin se toma en cuenta el estado de la bandera C previo.Ninguno de los registros es cambiado. Todos los desvoscondicionales pueden usarse despus de esta instruccin
Banderasafectadas:
H: Se activa si hay un acarreo negativo del bit 3, de lo contrariose borrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: El valor previo permanece sin cambio cuando el resultado esce o, de lo contrario se borrar.r
CEstar a uno si el valor absoluto del contenido de Rr + C, esmayor que el contenido de Rd, de lo contrario se borrar.
Ejemplo:
; Comparar r3:r2 con r1:r0CP r2, r0 ; Compara el byte bajoCPC r3, r1 ; Compara el byte altoBRNE noteq ; Desva si la bandera Z est activa
...noteq: NOP ; Destino de desvo( no hacer nada)
CPI Compara un registro con dato inmediatoSintaxis: CPI Rd, K
Operacin: Rd -K
Operandos: 16 d 31, 0 K 255
Descripcin: Efecta una comparacin entre el registro Rd y undato inmediato. El registro no es cambiado. Todos los desvoscondicionales pueden usarse despus de esta instruccin.
Banderasafectadas:
H: Se activa si hay un acarreo negativo del bit 3, de lo contrariose borrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 queel contenido de Rd, de lo contrario se borrar.
Ejemplo:
CPI r19,3 ; Comparar r19 con 3BRNE error ; Desva si la bandera Z est activa
...error: NOP ; Destino de desvo (No hacer nada)
CPSE Compara y saltar si es igualSintaxis: 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 yRr, y si Rd Rr entonces la siguiente instruccin se ejecuta de locontrario la siguiente instruccin es brincada.
Banderasafectadas: Ninguna
Ejemplo:
INC r4 ; Incrementar r4CPSE r4, r0 ; Comparar r4 con r0NEG r4 ; Slo ejecutar si r4 r0NOP ; Continuar (No hacer nada)
19
7/23/2019 Instruciones Avr Espaol
17/33
DEC Decrementar el registro
Sintaxis: DEC Rd
Operacin: Rd Rd -1
Operandos: 0 d 31
DescripcinSe decrementa en uno al contenido del registro Rd ydeja el resultado en Rd. La bandera C de SREG no es afectadapor la operacin. Al funcionar con nmeros sin signo, slo sepuede esperar que funcionen de forma consistente lasinstrucciones BREQ y BRNE. Al operar con valores encomplemento a dos todas las instrucciones de desvo estndisponibles.
Banderasafectadas:
V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar. Undesbordamiento del complemento a dos ocurrir si y slo si Rdera $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 r17Loop: ADD r1, r2 ; Sumar r2 a r1
DEC r17 ; Decrementar r17BRNE loop ; Desvo si r17 0NOP ; Continuar (No hacer nada)
EOR Funcin lgica OR-exclusiva (
) entreregistros
Sintaxis: EOR Rd, Rr
Operacin: Rd Rd Rr
Operandos: 0 d 31, 0 r 31
Descripcin: Se realiza el XOR lgico entre el contenido delregistro Rd y del registro Rr; deja el resultado en el registrodestino Rd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 subrutinaSintaxis: 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 subrutinaapuntada por el registro puntero Z. El registro puntero Z es de 16bit y permite la llamada a subrutina dentro de los 64K words(128K bytes) ms bajos de la seccin de espacio de memoria deprograma. El SP (puntero de pila) utiliza durante el ICALL unesquema de post-decremento.
Banderasafectadas: Ninguna
Ejemplo:
MOV r30, r0 ; Poner offset a la tabla de llamadaICALL ; Rutina de llamada que apunta a r31:r30
IJMP Salto indirectoSintaxis: IJMP
Operacin: PC Z(15:0)
Operandos: Ninguno
Descripcin: Efecta un salto indirecto a una direccin apuntadapor el registro puntero Z. El registro puntero Z es de 16 bits ypermite saltos hacia los 64K words (128K bytes) ms bajos de laseccin de memoria de programa. La instruccin no estdisponible para todos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
MOV r30, r0 ; Poner offset a la tabla de saltoIJMP ; Saltar a la rutina apuntada por r31:r30
20
7/23/2019 Instruciones Avr Espaol
18/33
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 registrosI/O (Puertos, Timers, registros de configuracin, etc.) en elregistro de trabajo Rd.
Banderasafectadas: 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
DescripcinSe incrementa en uno al contenido del registro Rd ydeja el resultado en el registro Rd. La bandera C de SREG no esafectada por la operacin. Al funcionar con nmeros sin signo,slo se puede esperar que funcionen de forma consistente lasinstrucciones BREQ y BRNE. Al operar con valores encomplemento a dos todas las instrucciones de desvo estndisponibles.
Banderasafectadas:
V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar. Undesbordamiento del complemento a dos ocurrir si y slo si Rdera $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 r22loop: INC r22 ; Incrementar r22
...CPI r22, $4F ; Comparar r22 con $4fBRNE loop ; Desvo si no son igualesNOP ; Continuar (No hacer nada)
JMP SaltoSintaxis: JMP k
Operacin: PC k
Operandos: 0 k 4M
Descripcin: Ejecuta un salto a cualquier posicin de lamemoria de programa. La instruccin no es disponible para todoslos modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
MOV r1, r0 ; Copia r0 en r1JMP lejos ; Salto incondicional
lejos: nop ; Destino de salto
LDI Carga de un dato inmediatoSintaxis: LDI Rd, K
Operacin: Rd K
Operandos: 16 Rd 31, 0 K 255
Descripcin: Carga un dato inmediato de 8-bits en cualquiera delos registros de trabajo a partir de R16 hasta R31.
Banderasafectadas: Ninguna
Ejemplo:
CLR r31 ; Borra el byte alto de ZLDI r30, $F0 ; Pone el byte bajo de Z a $F0LPM ; Carga una constante de la memoria
; de programa apuntada por Z
21
7/23/2019 Instruciones Avr Espaol
19/33
LD Carga indirecta usando X
Sintaxis: LD Rd, XLD Rd, X+LD Rd, -X
Operacin: Rd (X) X: Sin cambios
Rd (X), X X+1 X: Con post-incrementoX X1, Rd (X) X: Con pre-decremento
Operandos: 0 d 31
DescripcinSe carga un byte de manera indirecta procedente delrea de datos hacia un registro de trabajo. Para los dispositivoscon 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 componeslo por los registros de trabajo. La EEPROM tiene un espaciode 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 de64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/ORAMPX tiene que ser correctamente configurado.
El registro puntero X puede permanecer sin cambios por laoperacin, puede post-incrementarse o pre-decrementarse. Estascaractersticas son apropiadas para acceder a matrices, tablas yuso del puntero de pila con el registro puntero X. Slo el bytebajo del puntero X se ocupa para dispositivos sin ms de 256bytes de espacio de datos. Para tales dispositivos, el byte alto delpuntero no es usado por esta instruccin y puede usarse paraotros propsitos.
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 paratodos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
CLR r27 ; Borra el byte alto de XLDI r26, $60 ; Pone el byte bajo de X a $60LD 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 $61LDI r26, $63 ; Pone el byte bajo de X a $63LD r2, X ; Carga en r2 el dato de la localidad $63LD r3, -X ; Cargar en r3 el dato de la localidad $62
;(X pre-decremento)
LD (LDD) Carga indirecta usando YSintaxis: LD Rd, Y
LD Rd, Y+LD Rd, -YLDD Rd, Y+q
Operacin: Rd (Y) Y: Sin cambiosRd (Y), Y Y+1 Y: Con post-incrementoY Y1, Rd (Y) Y: Con pre-decrementoRd (Y+q) Y: Sin cambios,
q: DesplazamientoOperandos: 0 d 31, 0 q 63
DescripcinSe carga un byte de manera indirecta procedente delrea de datos hacia un registro de trabajo. Para los dispositivoscon 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 componeslo por los registros de trabajo. La EEPROM tiene un espaciode 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 de64K bytes. Para acceder a otro segmento de datos en dispositivoscon ms de 64K bytes de datos de espacio, el registro I/ORAMPY tiene que ser correctamente configurado.
El registro puntero Y puede permanecer sin cambios por laoperacin, puede post-incrementarse o pre-decrementarse. Estascaractersticas son apropiadas para acceder a matrices, tablas yuso del puntero de pila con el registro puntero Y. Slo el bytebajo del puntero Y se ocupa para dispositivos sin ms de 256
bytes de espacio de datos. Para tales dispositivos, el byte alto delpuntero no es usado por esta instruccin y puede usarse paraotros 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 paratodos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
CLR r29 ; Borra el byte alto de YLDI r28, $60 ; Pone el byte bajo de Y a $60LD 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 $61LDI r28, $63 ; Pone el byte bajo de Y a $63LD r2, Y ; Carga en r0 el dato de la localidad $63LD 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
7/23/2019 Instruciones Avr Espaol
20/33
LD (LDD) Carga indirecta usando Z
Sintaxis: LD Rd, ZLD Rd, Z+LD Rd, -ZLDD Rd, Z+q
Operacin: Rd (Z) Z: Sin cambiosRd (Z), Z Z+1 Z: Con post-incrementoZ Z 1, Rd (Z) Z: Con pre-decrementoRd (Z+q) Z: Sin cambios,
q: DesplazamientoOperandos: 0 d 31, 0 q 63
DescripcinSe carga un byte de manera indirecta procedente delrea de datos hacia un registro de trabajo. Para los dispositivoscon 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 componeslo por los registros de trabajo. La EEPROM tiene un espaciode 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 de64K bytes. Para acceder a otro segmento de datos en dispositivoscon ms de 64K bytes de datos de espacio, el registro I/ORAMPX tiene que ser correctamente configurado.
El registro puntero Z puede permanecer sin cambios por laoperacin, puede post-incrementarse o pre-decrementarse. Estascaractersticas son apropiadas para acceder a matrices, tablas yuso del puntero de pila; Sin embargo, debido a que este punteropuede usarse para las llamadas indirectas a subrutinas y los saltosindirectos, es mejor usar a los punteros X o Y para direccionar alpuntero de pila..
Slo el byte bajo del puntero Z se ocupa para dispositivos sinms de 256 bytes de espacio de datos. Para tales dispositivos, elbyte alto del puntero no es usado por esta instruccin y puedeusarse 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 paratodos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
CLR r31 ; Borra el byte alto de ZLDI r30, $60 ; Pone el byte bajo de Z a $60LD 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 $61LDI r30, $63 ; Pone el byte bajo de Z a $63LD r2, Z ; Carga en r0 el dato de la localidad $63LD 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 SRAMSintaxis: LDS Rd, k
Operacin: Rd (k)
Operandos: 0 d 31, 0 k 65535
Descripcin: Carga un byte del espacio de memoria de datos aun registro de trabajo. Para los dispositivos con SRAM, elespacio de datos est compuesto por los registros de trabajo,memoria de I/O y SRAM interna (y SRAM externa si esaplicable). Para los dispositivos sin SRAM, el espacio de datosest compuesto slo por los registros de trabajo. La EEPROMtiene un espacio de direcciones separado. Debe proporcionarseuna direccin de 16-bit. Se limita el acceso de memoria alsegmento de datos de 64K bytes. Para acceder a otro segmentode datos en dispositivos con ms de 64K bytes de datos deespacio, el registro I/O RAMPD tiene que ser correctamenteconfigurado.
Banderasafectadas: Ninguna
Esta instruccin no es disponible para todos los modelos deAVRs.
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 programaSintaxis: LPM
LPM Rd, ZLPM Rd, Z+
Operacin: R0 (Z) Z: Sin cambio, R0 implcitoRd (Z) Z: Sin cambioRd (Z), Z Z + 1 Z: Post-incrementado
Operandos: 0 d 31
Descripcin: Se carga un byte apuntado por el registro Z en elregistro R0. La memoria de programa est organizada en palabra(word) de 16-bits; el bit menos significativo del puntero Zselecciona el byte bajo (0) o el byte alto (1). Esta instruccinpuede dirigirse a los primeros 64K bytes (32K words) dememoria de programa. El registro puntero Z queda inalterado porel funcionamiento.
Banderasafectadas: Ninguna
Esta instruccin no es disponible para todos los modelos deAVRs.
Ejemplo:
CLR r31 ; Borrar el byte alto de ZLDI r30, $F0 ; Poner a cero el byte bajo de ZLPM ; Cargar la constante de la
;memoria de programa
;apuntada por Z (r31:r30)
23
7/23/2019 Instruciones Avr Espaol
21/33
LSL Desplazamiento a la izquierda
Sintaxis: LSL Rd
Operacin:
Operandos: 0 d 31
Descripcin: Desplaza todos los bits de Rd una posicin hacia laizquierda. El bit 7 se carga en la bandera C de SREG.Prcticamente esta operacin multiplica por dos al contenido deRd.
Banderasafectadas:
H: Se activa si hay un acarreo del bit 3, de lo contrario seborrar.
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 locontrario 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 r0LSL 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 laderecha. En el bit 7 se carga un cero, en la bandera C se carga elLSB de Rd. Prcticamente esta operacin divide entre dos alcontenido de Rd.
Banderasafectadas:
S:N C, para prueba de signo
V:N C (para N y C despus del desplazamiento)N: Se pone a ceroZ: Se activa si el resultado es $00, de lo contrario se borrar.C: Se activa si el LSB de Rd antes del desplazamiento estaba auno.
Ejemplo:
ADD r0, r4 ; Sumar r4 a r0LSR r0 ; Dividir a r0 entre 2
MOV Copia de registrosSintaxis: 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 registrodestino Rd es cargado con una copia de Rr.
Banderasafectadas: Ninguna
Ejemplo:
MOV r16,r0 ; Copiar r0 en r16CALL check ; Llamada a subrutina
...check: CPI r16,$11 ; Comparar r16 con $11
...
RET ; Retorno de subrutina
MOVW Copia de registros de palabraSintaxis: 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 parde registros. Los registros fuente Rr permanecen sin cambiar,mientras los registros destino Rd son cargados con una copia deRr.
Banderasafectadas: Ninguna
Esta instruccin no es disponible para todos los modelos deAVRs.
Ejemplo:
MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16CALL check ; Llamada a subrutina
...check: CPI r16, $11 ; Comparar r16 con $11
...RET ; Retorno de subrutina
24
7/23/2019 Instruciones Avr Espaol
22/33
NEG Complemento a dosSintaxis: NEG Rd
Operacin: Rd $00 - Rd
Operandos: 0 d 31
Descripcin: Cambia el contenido del registro Rd con sucomplemento a dos; el valor $80 se deja sin cambiar.
Banderasafectadas:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, delo contrario se borrar (cero).V: Se activa si ocurre un desbordamiento del complemento a dosde la resta implcita de cero, de lo contrario se borrar. Undesbordamiento del complemento a dos ocurrir si y slo si elcontenido del registro despus de la operacin es $80.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 restaimplcita de cero, de lo contrario se borrar. La bandera C seactiva en todos los casos excepto cuando el contenido delregistro despus de la operacin es $00.
Ejemplo:
SUB r11, r0 ; Restar r0 de r11BRPL 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 operacinSintaxis: NOP
Operacin: Ninguna
Operandos: Ninguno
Descripcin: Consume un ciclo sin realizar operaciones.
Banderasafectadas: Ninguna
Ejemplo:
CLR r16 ; Borrar r16SER r17 ; Poner a uno r17OUT $18, r16 ; Escribir ceros en el Puerto BNOP ; 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 sonregistros con nmeros signados. El resultado con signo es de 16-bit y se coloca la parte ms significativa del resultado en registroR1 y la menos significativa en R0.
Banderasafectadas:
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 deAVRs.
Ejemplo:
MUL r21 r20 ; Multiplica R21 con R20MOVW 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 sonregistros con nmeros sin signo. El resultado sin signo es de 16-bit y se coloca la parte ms significativa del resultado en registroR1 y la menos significativa en R0. Si el multiplicando y elmultiplicador son R1 y R0 el resultado se sobrescribir en ellos.
Banderasafectadas:
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 deAVRs.
Ejemplo:
MUL r5, r4 ; Multiplica R5 con R4MOVW r4, r0 ; Copia el resultado en R5: R4
25
7/23/2019 Instruciones Avr Espaol
23/33
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 delregistro Rd y del registro Rr; deja el resultado en el registrodestino Rd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
OR r15, r16 ; Hacer OR lgico entre registrosBST 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 undato 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 delregistro Rd y el valor K; deja el resultado en el registro destinoRd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 trabajoSintaxis: OUT P, Rr
Operacin: P Rr
Operandos: 0 r 31, 0 P 63
Descripcin: Carga en un registro del bloque I/O el contenido deun registro trabajo.
Banderasafectadas: Ninguna
Ejemplo:
CLR r16 ; Borrar r16SER r17 ; Poner a unos r17OUT $18, r16 ; Escribir ceros en el Puerto BNOP ; Esperar (No hacer nada)OUT $18, r17 ; Escribir unos en el Puerto B
POP Sacar registro de la pilaSintaxis: POP Rr
Operacin: Rr STACK
Operandos: 0 r 31
Descripcin: Carga el registro Rd con un byte de la pila. Elpuntero de pila es incrementado en uno antes del POP
Banderasafectadas: Ninguna
Esta instruccin no es disponible para todos los modelos deAVRs.
Ejemplo:
CALL routine ; Llamar a subrutina...
routine: PUSH r14 ; Guardar r14 en la pilaPUSH r13 ; Guardar r13 en la pila...POP r13 ; Restaurar r13POP r14 ; Restaurar r14RET ; Retorno de subrutina
26
7/23/2019 Instruciones Avr Espaol
24/33
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. Elpuntero de pila es post-decrementado en uno despus del PUSH
Banderasafectadas: Ninguna
Esta instruccin no es disponible para todos los modelos deAVRs.
Ejemplo:
CALL routine ; Llamar a subrutina...
routine: PUSH r14 ; Guardar r14 en la pilaPUSH r13 ; Guardar r13 en la pila...
POP r13 ; Restaurar r13POP r14 ; Restaurar r14RET ; 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 seencuentra dentro de PC - 2K + 1 y PC +2K (words, palabra). Enensamblador, se usan etiquetas en lugar de operadores relativos.Para los microcontroladores AVR con memoria de programa queno excede 4K words (8K bytes) esta instruccin puededireccionar a toda la memoria desde cualquier posicin. El SP(puntero de pila) utiliza durante el RCALL un esquema de post-decremento.
Banderasafectadas: 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 subrutinaSintaxis: RET
Operacin: PC Stack
Operandos: Ninguno
Pila: SP SP + 2 (bytes)
Descripcin: Efecta un retorno de subrutina. La direccin deretorno es cargada de la pila. El SP (puntero de pila) utilizadurante el RET un esquema de post-incremento.
Banderasafectadas: Ninguna
Ejemplo:
CALL routine ; Llamada a subrutina...
routine: PUSH r14 ; Guardar r14 en la pila...
POP r14 ; Restaurar r14RET ; Retorno de subrutina
RETI Retorno de interrupcinSintaxis: RETI
Operacin: PC Stack
Operandos: Ninguno
Pila: SP SP + 2 (bytes)
Descripcin: Realiza un retorno de una interrupcin. Ladireccin de retorno es cargada desde la pila; la bandera I deSREG (interrupcin global) se pone a uno. El registro de estadono se guarda automticamente al entrar en una rutina deinterrupcin, y no se restaura al volver de la rutina interrupcin.De ser necesario el programa debe incluir una rutina paramanejar adecuadamente esta situacin. El puntero de pila usa unesquema de pre-incremento durante el RETI.
Banderasafectadas:
I: Se pone a uno.
Ejemplo:...
extint: PUSH r0 ; Guardar r0 en la pila...
POP r0 ; Restaurar r0RETI ; Retorno y habilitacin de interrupciones
27
7/23/2019 Instruciones Avr Espaol
25/33
RJMP Salto relativo
Sintaxis: RJMP k
Operacin: PC PC + k + 1
Operandos: -2K k 2K
Descripcin: Ejecuta un salto relativo a una direccin que seencuentra dentro de PC - 2K + 1 y PC +2K. En ensamblador, seusan etiquetas en lugar de operadores relativos. Para losmicrocontroladores AVR con memoria de programa que noexcede 4K words (8K bytes) esta instruccin puede dirigirse atoda la memoria desde cualquier posicin de direccin.
Banderasafectadas: Ninguna
Ejemplo:
CPI r16, $42 ; Compara r16 con $42BRNE error ; Desvo si r16 $42RJMP ok ; Salto incondicional
error: ADD r16, r17 ; Suma r17 a r16INC 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 laizquierda. La bandera C se desplaza al bit 0 de Rd. El bit 7 sedesplaza hacia la bandera C. Esta operacin combinada con LSL,multiplica por dos a valores multi-byte con o sin signo.
Banderasafectadas:
H: Se activa si hay un acarreo del bit 3, de lo contrario seborrar.
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 locontrario 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 auno, de lo contrario se borrar.
Ejemplo:
LSL r18 ; Multiplica r19:r18 por dosROL 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 laderecha. La bandera C se desplaza al bit 7 de Rd. El bit 0 sedesplaza hacia la bandera C. Esta operacin combinada con LSRdivide entre dos a valores multi-byte con o sin signo.
Banderasafectadas:
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 auno.
Ejemplo:
ADD r0, r4 ; Sumar r4 a r0LSL 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 elresultado en el registro Rd.
Banderasafectadas:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, delo contrario se borrar (cero).V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.
N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: El estado anterior permanece sin cambio cuando el resultadoes cero, de lo contrario se borrar.C: Se activa si el valor absoluto del contenido de Rr + el acarreoprevio es mayor que el valor absoluto de Rd, de lo contrario seborrar.
Ejemplo:
; Restar r1:r0 de r3:r2SUB r2, r0 ; Restar el byte bajoSBC r3, r1 ; Restar con acarreo el byte alto
28
7/23/2019 Instruciones Avr Espaol
26/33
SBCI Resta a un registro una constante y elacarreo
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 labandera C; deja el resultado en el registro destino Rd..Banderasafectadas:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, delo contrario se borrar (cero).V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: El estado anterior permanece sin cambio cuando el resultadoes cero, de lo contrario se borrar.C: Se activa si el valor absoluto del contenido de Rr + el acarreoprevio 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 bajoSBCI 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 delbloque I/O. Esta operacin funciona en los 32 registros de I/Oms bajos. Direcciones de $00 a $1F.
Banderasafectadas: Ninguna
Ejemplo:
OUT $1E, r0 ; Escribir la direccin de EEPROMSBI $1C, 0 ; Poner a uno el bit 0 de EECRIN 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 ysalta la siguiente instruccin si el bit est en cero. Est operacinfunciona en los 32 registros de I/O ms bajos, direcciones 0-31).
Banderasafectadas: Ninguna
Ejemplo:
espera: SBIC $1C, 1 ; Saltar prxima instruccin si ; EEWE* est borradoRJMP espera ; Escritura de EEPROM no
; terminadaNOP ; Continuar (No hacer nada)
* EEWE es el bit 1 del registro EECR (Registro de Control de lamemoria EEprom) mapaeado en la localidad $1C de la memoriaRAM.
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 ysalta la siguiente instruccin si el bit est en uno. Est operacinfunciona en los 32 registros de I/O ms bajos, direcciones 0-31).
Banderasafectadas: 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 borradoNOP ; Continuar (No hacer nada)
29
7/23/2019 Instruciones Avr Espaol
27/33
SBIW Resta un dato inmediato a un registro depalabra
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. Podemosindicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YLo slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizarR27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo aR30. Tambin podemos usar el registro de 16 bits compuesto porR25:R24 al que tambin podemos indicar como R24.
Operando2:0K 63
Descripcin: SBIW resta un valor K a un par de registros y dejael resultado en el par de registros
Banderasafectadas:
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 doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 valorabsoluto de Rd, de lo contrario se borrar.
Ejemplo:
SBIW r24, 1 ; Restar 1 de r25:r24SBIW 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 registroRd y una constante K, y deja el resultado en el registro destinoRd.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 ceroSintaxis: 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 lasiguiente instruccin si el bit est borrado (cero).
Banderasafectadas: Ninguna
Ejemplo:
SUB r0, r1 ; Restar r1 de r0SBRC r0, 7 ; Saltar si el bit 7 en r0 est borradoSUB r0, r1 ; Slo se ejecuta si el bit 7 en r0 es unoNOP ; Continuar (No hacer nada)
SBRS Salta si el bit del registro es unoSintaxis: 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 lasiguiente instruccin si el bit est a uno.
Banderasafectadas: Ninguna
Ejemplo:
SUB r0, r1 ; Restar r1 de r0SBRS r0, 7 ; Saltar si el bit 7 en r0 est a unoSUB r0, r1 ; Slo se ejecuta si el bit 7 en r0 es ceroNOP ; Continuar (No hacer nada)
30
7/23/2019 Instruciones Avr Espaol
28/33
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 deestado SREG.
Banderasafectadas:
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 delregistro de estado SREG.
Banderasafectadas:
H: Se pone a uno
Ejemplo:
SEH ; Poner a uno la bandera H
SEI Habilitar las interrupciones globalesSintaxis: SEI
Operacin: I 1
Operandos: Ninguno
Descripcin: Pone a uno la bandera de habilitacin deinterrupciones globales I del registro de estado SREG.
Banderasafectadas:
I: Se pone a uno
Ejemplo:
SEI ; Interrupciones habilitadasSLEEP ; Activacin de modo SLEEP, esperando
; alguna interrupcin
SEN Poner a uno la bandera NSintaxis: SEN
Operacin: N 1
Operandos: Ninguno
Descripcin: Pone a uno la bandera de resultado negativo N delregistro de estado SREG.
Banderasafectadas:
N: Se pone a uno
Ejemplo:
ADD r2, r19 ; Sumar r19 a r2SEN ; Poner a uno la bandera N
31
7/23/2019 Instruciones Avr Espaol
29/33
SER Carga todos los bits de un registro
Sintaxis: SER Rd
Operacin: Rd $FF
Operandos: 16 d 31
Descripcin: SER Carga directamente $FF al registroseleccionado.
Banderasafectadas: Ninguna
Ejemplo:
CLR r16 ; Borrar r16SER r17 ; Poner a uno r17OUT $18, r16 ; Escribir ceros al Puerto BNOP ; 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 deestado SREG.
Banderasafectadas:
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 TSintaxis: SET
Operacin: T 1
Operandos: Ninguno
Descripcin: Pone a uno la bandera T del registro de estadoSREG.
Banderasafectadas:
T: Se pone a uno
Ejemplo:
SET ; Poner a uno la bandera T
SEV Pone a uno la bandera VSintaxis: SEV
Operacin: V 1
Operandos: Ninguno
Descripcin: Pone a uno la bandera de desbordamiento V delregistro de estado SREG.
Banderasafectadas:
V: Se pone a uno
Ejemplo:
ADD r2, r19 ; Sumar r19 a r2SEV ; Poner a uno la bandera V
32
7/23/2019 Instruciones Avr Espaol
30/33
SEZ Poner a uno la bandera Z
Sintaxis: SEZ
Operacin: Z 1
Operandos: Ninguno
Descripcin: Pone a uno la bandera de resultado cero Z delregistro de estado SREG.
Banderasafectadas:
Z: Se pone a uno
Ejemplo:
ADD r2, r19 ; Suma r19 a r2SEZ ; Poner a uno la bandera Z
SLEEP Activar modo sleep
Sintaxis: SLEEP
Operacin: Consulta el manual del dispositivo para obtener unainformacin detalla acerca de este modo de operacin.
Operandos: Ninguno
Descripcin: Pone en modo Sleep al microcontrolador
Banderasafectadas: Ninguna
Ejemplo:
MOV r0, r11 ; Copiar r11 en r0LDI r16, (1
7/23/2019 Instruciones Avr Espaol
31/33
ST (STD) Almacenar indirectamente usando Y
Sintaxis: LD Y, RrLD Y+, RrLD -Y, RrSTD Y+q, Rr
Operacin: (Y) Rr Y: Sin cambios(Y) Rr, Y Y+1 Y: Con post-incrementoY Y1, (Y) Rr Y: Con pre-decremento
(Y+q) Rr Y: Sin cambios,q: Desplazamiento
Operandos: 0 r 31, 0 q 63
DescripcinSe almacena un byte de manera indirectaprocedente de un registro de trabajo hacia el rea de datos. Paralos dispositivos con SRAM, el rea de datos se compone de losregistros de: trabajo, I/O y SRAM interna (y SRAM externa sies aplicable). Para los dispositivos sin SRAM, el espacio dedatos se compone slo por los registros de trabajo. La EEPROMtiene 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 de64K bytes. Para acceder a otro segmento de datos en dispositivoscon ms de 64K bytes de datos de espacio, el registro I/ORAMPY tiene que ser correctamente configurado.
El registro puntero Y puede permanecer sin cambios por laoperacin, puede post-incrementarse o pre-decrementarse. Estascaractersticas son apropiadas para acceder a matrices, tablas yuso del puntero de pila con el registro puntero Y. Slo el bytebajo del puntero Y se ocupa para dispositivos sin ms de 256bytes de espacio de datos. Para tales dispositivos, el byte alto delpuntero no es usado por esta instruccin y puede usarse paraotros 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 paratodos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
CLR r29 ; Borra el byte alto de YLDI r28, $60 ; Pone el byte bajo de Y a $60ST 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 $63ST Y, r2 ; Almacena r0 en la localidad $63ST -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 ZSintaxis: LD Z, Rr
LD Z+, RrLD -Z, RrSTD Z+q, Rr
Operacin: (Z) Rr Z: Sin cambios(Z) Rr, Z Z+1 Z: Con post-incrementoZ Z1, (Z) Rr Z: Con pre-decremento
(Z+q) Rr Z: Sin cambios,q: Desplazamiento
Operandos: 0 r 31, 0 q 63
DescripcinSe almacena un byte de manera indirectaprocedente de un registro de trabajo hacia el rea de datos. Paralos dispositivos con SRAM, el rea de datos se compone de losregistros de: trabajo, I/O y SRAM interna (y SRAM externa sies aplicable). Para los dispositivos sin SRAM, el espacio dedatos se compone slo por los registros de trabajo. La EEPROMtiene 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 de64K bytes. Para acceder a otro segmento de datos en dispositivoscon ms de 64K bytes de datos de espacio, el registro I/ORAMPZ tiene que ser correctamente configurado.
El registro puntero Z puede permanecer sin cambios por laoperacin, puede post-incrementarse o pre-decrementarse. Estascaractersticas son apropiadas para acceder a matrices, tablas yuso del puntero de pila; Sin embargo, debido a que este punteropuede usarse para las llamadas indirectas a subrutinas y los saltos
indirectos, es mejor usar a los punteros X o Y para direccionar alpuntero de pila.
Slo el byte bajo del puntero Z se ocupa para dispositivos sinms de 256 bytes de espacio de datos. Para tales dispositivos, elbyte alto del puntero no es usado por esta instruccin y puedeusarse 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 paratodos los modelos de AVRs.
Banderasafectadas: Ninguna
Ejemplo:
CLR r31 ; Borra el byte alto de ZLDI r30, $60 ; Pone el byte bajo de Z a $60ST Z+, r0 ; Almacena r0 en la localidad $60
; (Z post-incrementado)ST Z, r1 ; Almacena r1 en la localidad $61LDI r30, $63 ; Pone el byte bajo de Z a $63ST Z, r2 ; Almacena r0 en la localidad $63ST Z, r3 ; Almacena r0 en la localidad $62
; (Z pre-decrementado)STD Z+2, r4 ; Almacena r4 en la localidad $64
34
7/23/2019 Instruciones Avr Espaol
32/33
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 lamemoria de datos. Para los dispositivos con SRAM, el espaciode datos est compuesto por los registros de trabajo, memoria deI/O y SRAM interna (y SRAM externa si es aplicable). Para losdispositivos sin SRAM, el espacio de datos est compuesto slopor los registros de trabajo. La EEPROM tiene un espacio dedirecciones separado. Debe proporcionarse una direccin de 16-bit. Se limita el acceso de memoria al segmento de datos de 64Kbytes. Para acceder a otro segmento de datos en dispositivos conms de 64K bytes de datos de espacio, el registro I/O RAMPDtiene que ser correctamente configurado.
Banderasafectadas: 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 r2STS $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 ydeja el resultado en el registro destino Rd.
Banderasafectadas:
H: Se activa si hay un acarreo negativo (Borrow) del bit 3, de locontrario se borrar.V: Se activa si ocurre un desbordamiento del complemento a doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario 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 mayorque 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 elresultado en el registro Rd. Esta instruccin trabaja con losregistros R16 a R31 y es ideal para utilizarla con los punteros X,Y y Z.
Banderasafectadas:
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 doscomo resultado de la operacin, de lo contrario se borrar.N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: Se activa si el resultado es $00, de lo contrario se borrar.C: Se activa si el valor absoluto de K es mayor que el valorabsoluto de Rd, de lo contrario se borrar.
Ejemplo:
SUBI r22, $11 ; Resta la constante (dato inmediato) $11 al;registro de trabajo r22
SWAP Intercambia los nibblesSintaxis: SWAP Rd
Operacin: R(7:4) Rd(3:0), R(3:0) Rd(7:4)
Operandos: 0 d 31
Descripcin: Intercambia al nibble bajo con el nibble alto delRd.
Banderasafectadas: Ninguna
Ejemplo:
INC r1 ; Incrementar r1SWAP r1 ; Intercambiar los nibbles alto y bajo de r1INC r1 ; Incrementar r1SWAP r1 ; Intercambiar otra vez
35
7/23/2019 Instruciones Avr Espaol
33/33
TST revisa si es cero o menor
Sintaxis: TST Rd
Operacin: Rd Rd (AND) Rd
Operandos: 0 d 31
Descripcin: Prueba si el registro es cero o negativo. Realiza unAND lgico entre el registro y l mismo. El registro permanecesin cambios.
Banderasafectadas:
V: Se pone a cero.N: Se activa si el bit MSB del resultado est a uno, de locontrario se borrar.Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
TST r0 ; Prueba r0BREQ prueba ; Brinca si r0 = 0
...prueba: NOP ; Destino de desvo (No hacer nada)
WDR Reinicio del Watchdog
Sintaxis: WDR
Operacin: Reinicio del temporizador Watchdog
Operandos: Ninguno
Descripcin: Hace un Reinicio del Temporizador Watchdog. Lainstruccin debe ejecutarse en un tiempo limitado por elprescaler del Watchdog. Consulta las especificaciones delWatchdog en el manual del dispositivo.
Banderasafectadas: Ninguna
Ejemplo:
WDR ; Reinicializa el temporizador del Watchdog