You are on page 1of 36

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 AritmticoLgica (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.

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.

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 Rr R K k b s Registro destino (y fuente) del bloque de registros de trabajo Registro fuente del bloque de registros de trabajo Resultado despus de que una instruccin es ejecutada Dato inmediato (constante) Direccin de memoria Bit de un registro I/O (7-0) 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

Banderas del registros de estado (SREG) C: Bandera de acarreo Z: Bandera de resultado cero N: Bandera de resultado negativo V: Indicador de complemento a dos desbordado S: NV para pruebas de signo H: Bandera de medio acarreo T: Bit transferido por la instruccin BLD o BST I: Bandera de interrupciones globales

RESUMEN DEL CONJUNTO DE INSTRUCCIONES Instrucciones Aritmticas y Lgicas


Mnemnico ADD ADC ADIW SUB SUBI SBC SBCI AND ANDI OR ORI EOR COM NEG SBR CBR INC DEC TST CLR SER ADIW SBIW MUL MULS MULSU Operandos Rd,Rr Rd,Rr Rd, K Rd,Rr Rd,K Rd,Rr Rd,K Rd,Rr Rd,K Rd,Rr Rd,K Rd,Rr Rd Rd Rd,K Rd,K Rd Rd Rd Rd Rd Rd+1:Rd,K Rd+1:Rd,K Rd,Rr Rd,Rr Rd,Rr Descripcin Suma sin acarreo Suma sin acarreo Suma un inmediato a un registro de palabra Resta sin acarreo Resta un inmediato Resta con acarreo Resta un inmediato con acarreo AND lgico AND lgico con inmediato OR lgico OR lgico con inmediato OR exclusivo Complemento a uno Complemento a dos Pon a uno los bits de un registro Pon a cero los bits de un registro Incrementa al registro Decrementa al registro Revisa si es cero o menor Borra el registro Carga los bits de un registro Suma un inmediato a un registro de palabra Resta un inmediato a un registro de palabra Multiplica sin signo Multiplica con signo Multiplica signado con no signado

Instrucciones de desvo (salto)


Mnemnicos RJMP IJMP EIJMP JMP RCALL ICALL Operandos k Ninguno Ninguno k k Ninguno Descripcin Salto relativo Salto indirecto Salto indirecto extendido Salto Llamada relativa a subrutina Llamada indirecta a subrutina

EICALL CALL RET RETI CPSE CP CPC CPI SBRC SBRS SBIC SBIS BRBC BRBS BREQ BRNE BRCS BRCC BRSH BRLO BRMI BRPL BRGE BRLT BRHS BRHC BRTS BRTC BRVS BRVC BRIE BRID

Ninguno k Ninguno Ninguno Rd,Rr Rd,Rr Rd,Rr Rd,K Rr,b Rr,b P,b P,b s,k s,k k k k k k k k k k k k k k k k k k k

Llamada indirecta a subrutina extendida Llamada a subrutina Regreso de subrutina Regreso de interrupcin Compare y salta si es igual Compara Compara con acarreo Compara con inmediato Salta si el bit del registro es cero Salta si el bit del registro es uno Salta si el bit del registro I/O es cero Salta si el bit del registro I/O es uno Salta si el bit de SREG es cero Salta si el bit de SREG es uno Salta si es igual Salta si es diferente Salta si C est a uno Salta si C est a cero Salta si es mayor o igual Salta si es menor Salta si es negativo Salta si es mayor Salta si es mayor o igual (con signo) Salta si es menor (con signo) Salta si H est a uno Salta si H est a cero Salta si T est a uno Salta si T est a cero Salta si V esta a uno Salta si V est a cero Salta si I est a uno Salta si I est a cero

Instrucciones de Transferencia de Datos


Mnemnicos MOV MOVW LDI LDS LD LD LD LD LD LD LDD LD LD LD LDD STS Operandos Rd,Rr Rd,Rr Rd,K Rd,k Rd,X Rd,X+ Rd,-X Rd,Y Rd,Y+ Rd,-Y Rd,Y+q Rd,Z Rd,Z+ Rd,-Z Rd,Z+q k,Rr Descripcin Copia de registros Copia registros de palabra Carga de un inmediato Carga directa Carga indirecta Carga indirecta con Post-Incremento Carga indirecta con Pre-Decremento Carga indirecta Carga indirecta con Post-Incremento Carga indirecta con Pre-Decremento Carga indirecta con desplazamiento Carga indirecta con Carga indirecta con Post-Incremento Carga indirecta con Pre-Decremento Carga indirecta con desplazamiento Almacena directamente

ST ST ST ST ST ST ST ST ST ST ST LPM SPM IN OUT PUSH POP

X,Rr X+,Rr -X,Rr Y,Rr Y+,Rr -Y,Rr Y+q,Rr Z,Rr Z+,Rr -Z,Rr Z+q,Rr Ninguno Ninguno Rd,P P,Rr Rr Rd

Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente con desplazamiento Almacena indirectamente Almacena indirectamente con Post-Incremento Almacena indirectamente con Pre-Decremento Almacena indirectamente con desplazamiento Carga memoria de programa Almacena memoria de programa Cargar un registro con un I/O Cargar un I/O con un registro Cargar registro en la pila Sacar dato de la pila

Instrucciones de Bit y prueba de Bit


Mnemnicos LSL LSR ROL ROR ASR SWAP BSET BCLR SBI CBI BST BLD SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLN SEV CLV SET CLT SEH CLH NOP SLEEP WDR Operandos Rd Rd Rd Rd Rd Rd s s P,b P,b Rr,b Rd,b Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Ninguno Descripcin Desplazamiento a la izquierda Desplazamiento a la derecha Rotacin a la izquierda con acarreo Rotacin a la derecha con acarreo Desplazamiento aritmtico Intercambio de nibbles Poner a uno la bandera Poner a cero la bandera Poner a uno el bit de un registro I/O Poner a cero el bit de un registro I/O Guarda en T el bit de un registro Carga T en el bit de un registro Poner a uno la bandera C Poner a cero la bandera C Poner a uno la bandera N Poner a cero la bandera N Poner a uno la bandera Z Poner a cero la bandera Z Poner a uno la bandera I Poner a cero la bandera I Poner a uno la bandera S Poner a cero la bandera S Poner a uno la bandera V Poner a cero la bandera V Poner a uno la bandera T Poner a cero la bandera T Poner a uno la bandera H Poner a cero la bandera H No operacin Modo Sleep Reiniciar el Watchdog

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 ADD r28, r28 ; Suma r2 a r1 (r1=r1+r2) ; 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 LDI r16, 1 AND r2, r16 ; AND lgico entre r2 y r3, resultado en r2 ; Poner 0000 0001 en r16 ; Aislar el bit 0 en r2

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 ANDI r18, $10 ANDI r19, $AA ; Borrar el nibble alto de r17 ; Aislar el bit 4 en r18 ; 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 ASR r16 LDI r17, $FC ASR r17 ; Cargar 16 decimal en r16 ; r16 = r16 / 2 ; Cargar -4 en 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 BCLR 7 ; Borrar la bandera C ; 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 BLD r0, 4 ; Guardar el bit 2 de r1 en la bandera T ; Cargar T en el bit 4 de r0

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 BRBC 1, dife ... NOP ; Comparar r20 con el valor 5 ; Salta si la bandera Z es cero ; 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 ... NOP ; Destino de desvo (No hacer nada)

dife:

salto:

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 BRCC desvo ... NOP ; Suma r23 a r22 ; Desva si C est borrado ; 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 BRCS desvo ... NOP ; Comparar r26 con $56 ; Desva si C est a uno ; Destino de desvo

desvo:

desvo:

10

BREAK Pausa
Sintaxis: BREAK Operacin: Pausa en la depuracin Operandos: Ninguno

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: 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

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 BREQ igual ... NOP ; Comparar registros r1 y r0 ; Salta si Z=0 (los registros son iguales) ; Destino de desvo (No hacer nada)

igual:

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

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 ... NOP ; Desvo si la bandera H est a cero ; Destino de desvo

desvio: Ejemplo: CP r11, r12 BRGE desvo ... NOP ; Comparar los registros r11 y r12 ; Desva si r11 r12 (con signo) ; Destino de desvo

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 ... NOP ; Desvo si la bandera H est a uno ; 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 ... NOP ; Desva si la bandera I est a cero ; Destino de desvo

desvio:

desvio:

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 ... NOP ; Desva si la bandera I est a uno ; 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 BREQ igual ... NOP ; Comparar registros r1 y r0 ; Salta si Z=0 (los registros son iguales) ; Destino de desvo (No hacer nada)

desvio:

igual:

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) ... 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 BRMI desvo ... NOP ; Restar 4 de r18 ; Desva si la bandera N=1 ; Destino de desvo

desvo:

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: loop: EOR r27, r27 INC r27 ... CPI r27,5 BRNE loop NOP ; Borrar r27 ; Incrementar r27 ; Comparar r27 con 5 ; Desvo si r27 5 ; 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 BRPL desvo ... NOP ; Restar $50 de r26 ; Desva si r26 es positivo ; Destino de desvo

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:

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 BRTS desvio ... NOP ; cargar el bit 5 de r3 en la bandera T ; Desva si ese bit est a cero ; Destino de desvo

desvio: SUBI r19, 4 BRSH desvo ... NOP ; Restar 4 de r19 ; Desva si r19 4 (sin signo) ; Destino de desvo

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 BRTS desvio ... NOP ; cargar el bit 5 de r3 en la bandera T ; Desva si ese bit est a uno ; 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 BRVS desvio ... NOP ; Suma el registro r4 a r3 ; Desva si no hay desbordamiento ; Destino de desvo

desvio:

desvio:

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 BRVS desvio ... NOP ; Suma el registro r4 a r3 ; Desva si hay desbordamiento ; 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 BSET 7 ; Poner a uno la bandera T ; Interrupcin habilitada

desvio:

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 BLD r0, 4 ; Guardar el bit 2 de r1 en la bandera T ; 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 CALL check ... CPI r16, $42 ... BREQ error RET RJMP error ; Copiar r0 en r16 ; Llamado a subrutina ; Compara r16 con un valor ; especfico ; Salta si son iguales ; Retorno de subrutina ; Ciclo infinito

check:

error:

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

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:

Ejemplo: CBI $12, 7 ; Poner a cero el bit 7 de Port D 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 CBR r18, 1 ; Borra el nibble alto de r16 ; 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 CLC ; Sumar r0 a s mismo ; 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 IN r11, $16 SEI ; Interrupciones deshabilitadas ; Leer el Puerto B ; 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 CLN ; Sumar r3 a r2 ; 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:

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

V: Se pone a cero. N: Se pone a cero Z: Se pone a uno. Ejemplo: loop: CLR r18 ; Borrar r18 INC r18 ; Incrementar r18 ... CPI r18, $50 ; Comparar r18 con $50 BRNE loop

Ejemplo: ADD r2, r3 CLS ; Sumar r3 a r2 ; 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 CLV ; Sumar r3 a r2 ; 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 CLZ ; Suma r3 a r2 ; 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. ... NOP ; Destino de desvo (No hacer nada)

prueba:

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:

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: 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 BRNE noteq ... NOP ; Comparar r4 con r19 ; Desva si la bandera Z est activa. ; Destino de desvo (No hacer nada)

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 cero, de lo contrario se borrar. C 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: CP r2, r0 CPC r3, r1 BRNE noteq ... NOP ; Comparar r3:r2 con r1:r0 ; Compara el byte bajo ; Compara el byte alto ; Desva si la bandera Z est activa ; Destino de desvo( no hacer nada)

noteq:

noteq:

CPI Compara un registro con dato inmediato


Sintaxis: CPI Rd, K Operacin: Rd -K Operandos: 16 d 31, 0 K 255

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: 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:

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

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 BRNE error ... NOP ; Comparar r19 con 3 ; Desva si la bandera Z est activa ; Destino de desvo (No hacer nada)

Ejemplo: INC r4 CPSE r4, r0 NEG r4 NOP ; Incrementar r4 ; Comparar r4 con r0 ; Slo ejecutar si r4 r0 ; Continuar (No hacer nada)

error:

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: Loop: LDI r17, $10 ADD r1, r2 DEC r17 BRNE loop NOP ; Cargar constante en r17 ; Sumar r2 a r1 ; Decrementar r17 ; Desvo si r17 0 ; 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 EOR r0, r22 ; Borrar r4 ; 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)

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:

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 ICALL ; Poner offset a la tabla de llamada ; Rutina de llamada que apunta a r31:r30

MOV r30, r0 IJMP

; Poner offset a la tabla de salto ; 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 CPI r25,4 BREQ exit ... NOP ; Carga en r25 el ;dato ;contenido en Puerto B ; Comparar el valor de r25 con ; un dato inmediato ; Desva si r25 = 4 ; 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: loop: CLR r22 INC r22 ... CPI r22, $4F BRNE loop NOP ; Borrar r22 ; Incrementar r22 ; Comparar r22 con $4f ; Desvo si no son iguales ; Continuar (No hacer nada)

exit:

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

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:

Ejemplo: MOV r1, r0 JMP lejos nop ; Copia r0 en r1 ; Salto incondicional ; Destino de salto CLR r31 LDI r30, $F0 LPM ; Borra el byte alto de Z ; Pone el byte bajo de Z a $F0 ; Carga una constante de la memoria ; de programa apuntada por Z

lejos:

21

LD Carga indirecta usando X


Sintaxis: LD Rd, X LD Rd, X+ LD Rd, -X Operacin: Rd (X) Rd (X), X X+1 X X1, Rd (X) 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. X: Sin cambios X: Con post-incremento X: Con pre-decremento 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 LDI r26, $60 LD r0, X+ LD r1, X LDI r26, $63 LD r2, X LD r3, -X ; Borra el byte alto de X ; Pone el byte bajo de X a $60 ; Carga en r0 el dato de la localidad $60 ;(X post-incrementado) ; Carga en r1 el dato contenido en la ; localidad $61 ; Pone el byte bajo de X a $63 ; Carga en r2 el dato de la localidad $63 ; Cargar en r3 el dato de la localidad $62 ;(X pre-decremento)

LD (LDD) Carga indirecta usando Y


Sintaxis: LD Rd, Y LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q Operacin: Rd (Y) Rd (Y), Y Y+1 Y Y1, Rd (Y) Rd (Y+q) 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. Y: Sin cambios Y: Con post-incremento Y: Con pre-decremento Y: Sin cambios, q: Desplazamiento 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 LDI r28, $60 LD r0, Y+ LD r1, Y LDI r28, $63 LD r2, Y LD r3,-Y LDD r4, Y+2 ; Borra el byte alto de Y ; Pone el byte bajo de Y a $60 ; Carga en r0 el dato de la localidad $60 ; (Y post-incrementado) ; Carga en r1 el dato de la localidad $61 ; Pone el byte bajo de Y a $63 ; Carga en r0 el dato de la localidad $63 ; Carga en r0 el dato de la localidad $62 ; (Y pre-decrementado) ; 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) Rd (Z), Z Z+1 Z Z 1, Rd (Z) Rd (Z+q) 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. . Z: Sin cambios Z: Con post-incremento Z: Con pre-decremento Z: Sin cambios, q: Desplazamiento 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 LDI r30, $60 LD r0, Z+ LD r1, Z LDI r30, $63 LD r2, Z LD r3,-Z LDD r4, Z+2 ; Borra el byte alto de Z ; Pone el byte bajo de Z a $60 ; Carga en r0 el dato de la localidad $60 ; (Z post-incrementado) ; Carga en r1 el dato de la localidad $61 ; Pone el byte bajo de Z a $63 ; Carga en r0 el dato de la localidad $63 ; Carga en r0 el dato de la localidad $62 ; (Z pre-decrementado) ; 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 ADD r2, r1 STS $FF00, r2 ; Carga r2 con el contenido de la localidad ; $FF00 de la memoria de datos ; Sumar r1 a 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 LDI r30, $F0 LPM ; Borrar el byte alto de Z ; Poner a cero el byte bajo de Z ; 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 LSL r0 ; Sumar r4 a 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 LSR r0 ; Sumar r4 a 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

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

Ejemplo: MOV r16,r0 CALL check ... CPI r16,$11 ... RET ; Copiar r0 en r16 ; Llamada a subrutina ; Comparar r16 con $11 ; Retorno de subrutina check: MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16 CALL check ; Llamada a subrutina ... CPI r16, $11 ; Comparar r16 con $11 ... RET ; Retorno de subrutina Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:

check:

24

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 16bit 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.

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 16bit y se coloca la parte ms significativa del resultado en registro R1 y la menos significativa en R0.

Banderas afectadas: 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 MOVW r4, r0 ; Multiplica R5 con R4 ; Copia el resultado en R5: R4 MUL r21 r20 MOVW r20, r0 ; Multiplica R21 con R20 ; Copia el resultado en R21: R20 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:

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:

NOP No operacin
Sintaxis: NOP Operacin: Ninguna Operandos: Ninguno Descripcin: Consume un ciclo sin realizar operaciones. Banderas afectadas: Ninguna Ejemplo:

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 NOP ; Destino de desvo (No hacer nada)

CLR r16 SER r17 OUT $18, r16 NOP OUT $18, r17

; Borrar r16 ; Poner a uno r17 ; Escribir ceros en el Puerto B ; Esperar (No hacer nada) ; Escribir unos en el Puerto B

prueba:

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 BST r15, 6 BRTS ok ... ok: NOP ; Destino de desvo (No hacer nada) ; Hacer OR lgico entre registros ; Almacena el bit 6 de r15 en el flag T ; Desvo si el flag T est a uno

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 ORI r17, 1 ; Poner a uno el nibble alto de r16 ; 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 SER r17 OUT $18, r16 NOP OUT $18, r17 ; Borrar r16 ; Poner a unos r17 ; Escribir ceros en el Puerto B ; Esperar (No hacer nada) ; 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 ... PUSH r14 PUSH r13 ... POP r13 POP r14 RET ; Llamar a subrutina ; Guardar r14 en la pila ; Guardar r13 en la pila ; Restaurar r13 ; Restaurar r14 ; Retorno de subrutina

routine:

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 ... PUSH r14 PUSH r13 ... POP r13 POP r14 RET ; Llamar a 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 postdecremento. Banderas afectadas: Ninguna

routine:

; Guardar r14 en la pila ; Guardar r13 en la pila ; Restaurar r13 ; Restaurar r14 ; Retorno de subrutina

Ejemplo: RCALL routine ... PUSH r14 ... POP r14 RET ; Llamada a subrutina ; Guardar r14 en la pila ; Restaurar r14 ; Retorno de subrutina

routine:

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 ... PUSH r14 ... POP r14 RET ; Llamada a 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:

routine:

; Guardar r14 en la pila I: Se pone a uno. ; Restaurar r14 ; Retorno de subrutina 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 BRNE error RJMP ok ADD r16, r17 INC r16 NOP ; Compara r16 con $42 ; Desvo si r16 $42 ; Salto incondicional ; Suma r17 a r16 ; Incrementa r16 ; 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 ROL r19 BRCS oneenc ... oneenc: NOP ; Destino de desvo ; Multiplica r19:r18 por dos ; r19:r18 es un entero de dos ;bytes -con o sin signo; Desva si C est a uno

error: ok:

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 LSL r0 ; Sumar r4 a 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: SUB r2, r0 SBC r3, r1 ; Restar r1:r0 de r3:r2 ; Restar el byte bajo ; 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: SUBI r16, $23 SBCI r17, $4F ; Resta $4F23 de r17:r16 ; Restar el byte bajo ; 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 SBI $1C, 0 IN r1, $1D ; Escribir la direccin de EEPROM ; Poner a uno el bit 0 de EECR ; 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 RJMP espera NOP ; Saltar prxima instruccin si ; EEWE* est borrado ; Escritura de EEPROM no ; terminada ; Continuar (No hacer nada)

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 RJMP espera NOP ; Saltar la siguiente instruccin ; si el bit 0 en el Puerto D est a uno ; Bit 0 borrado ; 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.

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 SBIW r28, 63 ; Restar 1 de r25:r24 ; 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 SBR r17, $F0 ; Poner a uno los bits 0 y 1 de r16 ; 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 SBRC r0, 7 SUB r0, r1 NOP ; Restar r1 de r0 ; Saltar si el bit 7 en r0 est borrado ; Slo se ejecuta si el bit 7 en r0 es uno ; 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 SBRS r0, 7 SUB r0, r1 NOP ; Restar r1 de r0 ; Saltar si el bit 7 en r0 est a uno ; Slo se ejecuta si el bit 7 en r0 es cero ; 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 ADC r0, 1 ; Poner a uno la bandera de acarreo ; 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 SLEEP ; Interrupciones habilitadas ; 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 SEN ; Sumar r19 a r2 ; 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 SER r17 OUT $18, r16 NOP OUT PORTB, r17 ; Borrar r16 ; Poner a uno r17 ; Escribir ceros al Puerto B ; Retardo (No hacer nada) ; 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 SES ; Sumar r19 a r2 ; 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 SEV ; Sumar r19 a r2 ; Poner a uno la bandera V

32

SEZ Poner a uno la bandera Z


Sintaxis: SEZ Operacin: Z 1 Operandos: Ninguno

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 a uno la bandera de resultado cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone a uno Ejemplo: ADD r2, r19 SEZ ; Suma r19 a r2 ; Poner a uno la bandera Z

Descripcin: Pone en modo Sleep al microcontrolador Banderas afectadas: Ninguna Ejemplo: MOV r0, r11 LDI r16, (1<<SE) OUT MCUCR, r16 SLEEP ; Copiar r11 en r0 ; Modo sleep habilitado ; Poner el MCU en modo descanso

ST Almacenar indirectamente usando X


Sintaxis: LD X, Rr LD X+, Rr LD -X , Rr Operacin: (X) Rr (X) Rr, X X+1 X X1, (X) Rd Operandos: 0 r 31 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 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. X: Sin cambios X: Con post-incremento X: Con pre-decremento

El resultado de estas combinaciones es indefinido: LD X+, r26 LD X+, r27 LD X, r26 LD -X, r27 Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r27 LDI r26, $60 ST X+, r0 ST X, r1 LDI r26, $63 ST X, r2 ST X, r3 ; Borra el byte alto de X ; Pone el byte bajo de X a $60 ; Almacena r0 en la localidad $60 (X post; incrementado) ; Almacenar r1 en la localidad $61 ; Pone el byte bajo de X a $63 ; Almacena r2 en la localidad $63 ; Almacena r3 en la localidad $62 (X pre; decrementado)

33

ST (STD) Almacenar indirectamente usando Y


Sintaxis: LD Y, Rr LD Y+, Rr LD -Y, Rr STD Y+q, Rr Operacin: (Y) Rr (Y) Rr, Y Y+1 Y Y1, (Y) Rr (Y+q) Rr 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. Y: Sin cambios Y: Con post-incremento Y: Con pre-decremento Y: Sin cambios, q: Desplazamiento 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 LDI r28, $60 ST Y+, r0 ST Y, R1 LDI r28, $63 ST Y, r2 ST -Y, r3 STD Y+2, r4 ; Borra el byte alto de Y ; Pone el byte bajo de Y a $60 ; Almacena r0 en la localidad $60 ; (Y post-incrementado) ; Almacena r1 en la localidad $61 ; Pone el byte bajo de Y a $63 ; Almacena r0 en la localidad $63 ; Almacena r0 en la localidad $62 ; (Y pre-decrementado) ; 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) Rr, Z Z+1 Z Z1, (Z) Rr (Z+q) Rr 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. Z: Sin cambios Z: Con post-incremento Z: Con pre-decremento Z: Sin cambios, q: Desplazamiento 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 LDI r30, $60 ST Z+, r0 ST Z, r1 LDI r30, $63 ST Z, r2 ST Z, r3 STD Z+2, r4 ; Borra el byte alto de Z ; Pone el byte bajo de Z a $60 ; Almacena r0 en la localidad $60 ; (Z post-incrementado) ; Almacena r1 en la localidad $61 ; Pone el byte bajo de Z a $63 ; Almacena r0 en la localidad $63 ; Almacena r0 en la localidad $62 ; (Z pre-decrementado) ; 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 16bit. 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 ADD r2, r1 STS $FF00, r2 ; Carga r2 con el contenido de la localidad ; $FF00 de la memoria de datos ; Sumar r1 a 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 ADD r28, r28 ; Suma r2 a r1 (r1=r1+r2) ; 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 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 de K es mayor que el valor absoluto 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 nibbles


Sintaxis: 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 del Rd. Banderas afectadas: Ninguna Ejemplo: INC r1 SWAP r1 INC r1 SWAP r1 ; Incrementar r1 ; Intercambiar los nibbles alto y bajo de r1 ; Incrementar r1 ; Intercambiar otra vez

35

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 un AND lgico entre el registro y l mismo. El registro permanece sin cambios. Banderas afectadas:

WDR Reinicio del Watchdog


Sintaxis: WDR Operacin: Reinicio del temporizador Watchdog Operandos: Ninguno Descripcin: Hace un Reinicio del Temporizador Watchdog. La instruccin debe ejecutarse en un tiempo limitado por el prescaler del Watchdog. Consulta las especificaciones del Watchdog en el manual del dispositivo. Banderas afectadas: Ninguna

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: TST r0 ; Prueba r0 BREQ prueba ; Brinca si r0 = 0 ... prueba: NOP ; Destino de desvo (No hacer nada)

Ejemplo: WDR ; Reinicializa el temporizador del Watchdog

36

You might also like