36
 MICROCONTROLADOR ES AVR ATMEL ha llevado la filosofía de diseño RISC (adaptada) a los microprocesadores de 8 BIT. Esta nueva arquitectura proporciona todos los beneficios habituales del RISC: tasa de reloj más rápida, mejor desempeño, y una optimización más 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 rápidamente en los últimos años. AVR es el primer diseño de CPU de ATMEL, una compañía más conocida por sus  productos de memoria "flash" y EEPROM. La firma también produce y vende varios subproductos de la popular familia 8051, con la diferencia que estos están basados en "flash". La tabla que se presenta a continuación resume las características más importantes de algunos modelos que pueden ser adquiridos en el mercado local: Los dispositivos se fabrican usando la tecnología de memoria no volátil de alta densidad de ATMEL. La Flash programable permite reprogramar la memoria de programa en el sistema a través de un interfaz serie SPI o por un programador de memoria no volátil convencional. Combinando una reforzada CPU RISC de 8-bit y la Flash programable en un chip monolítico, 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 propósito general. Los 32 registros se conectan directamente a la Unidad Aritmético- Lógica (ALU), permitiendo acceder a dos registros independientes con una instrucción ejecutada en un ciclo de reloj. La arquitectura resultante trabaja con un código más eficaz, logrando capacidades de procesamiento diez veces más rápidas que los microcontroladores CISC convencionales. 1

Microcontroladores Avr

Embed Size (px)

DESCRIPTION

MIcrocontroladores ATMEL

Citation preview

  • MICROCONTROLADORES AVR ATMEL ha llevado la filosofa de diseo RISC (adaptada) a los microprocesadores de 8 BIT. Esta nueva arquitectura proporciona todos los beneficios habituales del RISC: tasa de reloj ms rpida, mejor desempeo, y una optimizacin ms eficiente en el compilador. AVR compite con varias familias de microprocesadores bien establecidas en el mercado, tales como: 8051, 68HC05, 68HC11 y los PIC de Microchip que se han extendido rpidamente en los ltimos aos. AVR es el primer diseo de CPU de ATMEL, una compaa ms conocida por sus productos de memoria "flash" y EEPROM. La firma tambin produce y vende varios subproductos de la popular familia 8051, con la diferencia que estos estn basados en "flash". La tabla que se presenta a continuacin resume las caractersticas ms importantes de algunos modelos que pueden ser adquiridos en el mercado local:

    Los dispositivos se fabrican usando la tecnologa de memoria no voltil de alta densidad de ATMEL. La Flash programable permite reprogramar la memoria de programa en el sistema a travs de un interfaz serie SPI o por un programador de memoria no voltil convencional. Combinando una reforzada CPU RISC de 8-bit y la Flash programable en un chip monoltico, los microcontroladores de ATMEL serie AT90SXX proporcionan una gran flexibilidad y soluciones eficaces a muchas aplicaciones de control integradas. Los AVR cuentan con un amplio conjunto de instrucciones y con 32 registros de trabajo de propsito general. Los 32 registros se conectan directamente a la Unidad Aritmtico-Lgica (ALU), permitiendo acceder a dos registros independientes con una instruccin ejecutada en un ciclo de reloj. La arquitectura resultante trabaja con un cdigo ms eficaz, logrando capacidades de procesamiento diez veces ms rpidas que los microcontroladores CISC convencionales.

    1

  • Diagrama a bloques del AT90S8535

    Pueden usarse seis de los 32 registros como tres punteros de registro de direccin indirectos (de 16-bits) para el direccionamiento del espacio de datos (memoria de datos RAM), proporcionando clculos de direccin eficaces. Tambin se usa uno de los tres punteros de direccin para observar una tabla de constantes. Estos registros de funciones agregados son los registros: X, Y y Z.

    2

  • El espacio de memoria I/O contiene 64 direcciones para la configuracin de funciones perifricas de la CPU como los registros de control, Temporizadores / Contadores, convertidores A/D y otras funciones. Los registros de I/O deben ser accedidos con su direccin del espacio I/O no considerando su direccin absoluta-. A estos registros de propsito especfico ATMEL tambin los llama Puertos (Ports). El AVR utiliza el concepto de arquitectura Harvard, con buses y memorias de programa y datos por separado. La memoria de programa se ejecuta con un sistema de dos fases. Mientras una instruccin est ejecutndose, la siguiente instruccin se pre-extrae de la memoria de programa. Con las instrucciones de salto relativo (relative jump) y llamada a subrutina (call), se accede directamente a cualquier direccin de la memoria de programa. La mayora de las instrucciones de los AVR tiene el formato de palabra (word) de 16-bit. Cada direccin de memoria de programa contiene una instruccin de 16 o 32 bit. Durante las interrupciones y las llamadas a subrutinas, la direccin de retorno del contador de programa (PC) se guarda en la pila. La pila est de forma acertada situada en la SRAM de datos de propsito general, y por consiguiente, el tamao de la pila est slo limitado por el tamao total de la SRAM. Todos los programas del usuario deben inicializar el puntero de pila (SP) antes de la ejecucin de subrutinas o interrupciones, considerando que cada vez que se carga un valor en la pila la direccin del SP decrece. El SP de 16 bit es accesible para lectura y escritura mediante el espacio de memoria I/O. Las localidades de la memoria de datos (SRAM) pueden ser accedidos fcilmente a travs de los diferentes modos de direccionamiento soportados en la arquitectura AVR. El modo ocioso (idle) detiene la CPU, permitiendo que continen funcionando la SRAM, el puerto SPI, los Temporizadores / Contadores y el sistema de interrupciones. El modo hibernacin (power-down) guarda los contenidos de los registros pero congela el oscilador, deshabilitando todas las otras funciones del chip hasta la prxima interrupcin externa o Reset del hardware.

    3

  • CONJUNTO DE INSTRUCCIONES

    En este apartado se comentan las instrucciones de ensamblador que poseen los C AVR de 8-BIT. Se explica la funcin de cada una de ellas, su sintaxis, operandos utilizados y una descripcin con ejemplos.

    El conjunto de instrucciones para estos microcontroladores se puede dividir en el siguiente orden de grupos: Instrucciones Aritmticas y Lgicas Instrucciones de Desvo (salto) Instrucciones de Transferencia de Datos Instrucciones de Bit y prueba de Bit Una lnea tpica en lenguaje ensamblador est dada de la siguiente forma: [Mnemnico] operando1, operando2 Los Mnemnicos son las instrucciones en lenguaje ensamblador que puede reconocer el microprocesador. Dependiendo de la instruccin, puede haber uno o dos operandos, incluso pueden no existir; su contenido consiste en un nmero, una variable o una direccin; normalmente el resultado de una operacin lgica, aritmtica o de carga es almacenado en operando1. NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES

    Registros y operandos

    Rd Registro destino (y fuente) del bloque de registros de trabajo

    Rr Registro fuente del bloque de registros de trabajo

    R Resultado despus de que una instruccin es ejecutada

    K Dato inmediato (constante)

    k Direccin de memoria

    b Bit de un registro I/O (7-0)

    s Bit en el registro de estado (SREG)

    X,Y,Z Registros de direccionamiento indirecto o registros de palabra (X=R27:R26 Y=R29:R28 Z=R31:R30)

    P Registros del bloque I/O

    q Desplazamiento (6-bit) por direccionamiento directo

    4

  • Banderas del registros de estado (SREG)

    C: Bandera de acarreo S: NV para pruebas de signo

    Z: Bandera de resultado cero H: Bandera de medio acarreo

    N: Bandera de resultado negativo T: Bit transferido por la instruccin BLD o BST

    V: Indicador de complemento a dos desbordado

    I: Bandera de interrupciones globales

    RESUMEN DEL CONJUNTO DE INSTRUCCIONES

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

    Instrucciones de desvo (salto) Mnemnicos Operandos Descripcin RJMP k Salto relativo IJMP Ninguno Salto indirecto EIJMP Ninguno Salto indirecto extendido JMP k Salto RCALL k Llamada relativa a subrutina ICALL Ninguno Llamada indirecta a subrutina

    5

  • EICALL Ninguno Llamada indirecta a subrutina extendida CALL k Llamada a subrutina RET Ninguno Regreso de subrutina RETI Ninguno Regreso de interrupcin CPSE Rd,Rr Compare y salta si es igual CP Rd,Rr Compara CPC Rd,Rr Compara con acarreo CPI Rd,K Compara con inmediato SBRC Rr,b Salta si el bit del registro es cero SBRS Rr,b Salta si el bit del registro es uno SBIC P,b Salta si el bit del registro I/O es cero SBIS P,b Salta si el bit del registro I/O es uno BRBC s,k Salta si el bit de SREG es cero BRBS s,k Salta si el bit de SREG es uno BREQ k Salta si es igual BRNE k Salta si es diferente BRCS k Salta si C est a uno BRCC k Salta si C est a cero BRSH k Salta si es mayor o igual BRLO k Salta si es menor BRMI k Salta si es negativo BRPL k Salta si es mayor BRGE k Salta si es mayor o igual (con signo) BRLT k Salta si es menor (con signo) BRHS k Salta si H est a uno BRHC k Salta si H est a cero BRTS k Salta si T est a uno BRTC k Salta si T est a cero BRVS k Salta si V esta a uno BRVC k Salta si V est a cero BRIE k Salta si I est a uno BRID k Salta si I est a cero

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

    6

  • ST X,Rr Almacena indirectamente ST X+,Rr Almacena indirectamente con Post-Incremento ST -X,Rr Almacena indirectamente con Pre-Decremento ST Y,Rr Almacena indirectamente ST Y+,Rr Almacena indirectamente con Post-Incremento ST -Y,Rr Almacena indirectamente con Pre-Decremento ST Y+q,Rr Almacena indirectamente con desplazamiento ST Z,Rr Almacena indirectamente ST Z+,Rr Almacena indirectamente con Post-Incremento ST -Z,Rr Almacena indirectamente con Pre-Decremento ST Z+q,Rr Almacena indirectamente con desplazamiento LPM Ninguno Carga memoria de programa SPM Ninguno Almacena memoria de programa IN Rd,P Cargar un registro con un I/O OUT P,Rr Cargar un I/O con un registro PUSH Rr Cargar registro en la pila POP Rd Sacar dato de la pila

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

    7

  • ADC Suma de dos registros con acarreo Sintaxis: ADC Rd, Rr Operacin: Rd Rd + Rr + C Operandos: 0 d 31, 0 r 31 Descripcin: Suma dos registros y el contenido de la bandera C; deja el resultado en el registro destino Rd. Banderas afectadas: H: Se activa si hay un acarreo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si hay acarreo del bit MSB del resultado, de lo contrario se borrar. Ejemplo: ADC r1, r2 ; Suma r1, r2 y C

    ; el resultado lo pone en r1

    ADD Suma de dos registros sin acarreo Sintaxis: ADD Rd, Rr Operacin: Rd Rd + Rr Operandos: 0 d 31, 0 r 31 Descripcin: Suma dos registros sin considerar la bandera C y deja el resultado en el registro destino Rd. Banderas afectadas: H: Se activa si hay un acarreo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si hay acarreo del bit MSB del resultado, de lo contrario se borrar. Ejemplo: ADD r1, r2 ; Suma r2 a r1 (r1=r1+r2) ADD r28, r28 ; Suma r28 a s mismo (r28=r28+r28)

    ADIW Suma un dato inmediato a un registro de palabra Sintaxis: ADIW Rd+1:Rd,K Operacin: Rd +1: Rd Rd+1: Rd + K Operandos: Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL o slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar R27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo a R30. Tambin podemos usar el registro de 16 bits compuesto por R25:R24 al que tambin podemos indicar como R24. Operando2: 0 K 63 Descripcin: Agrega un valor K a un par de registros y deja el resultado en el par de registros Banderas afectadas: S: Se activa slo si una de las banderas V o N est a uno. V: Se activa si hay desbordamiento en el complemento a dos de la operacin. N: Se activa si el bit MSB est a uno. Z: Se activa si el resultado es 0x00. C: Se activa si hay acarreo del bit MSB. Ejemplo: ADIW R25:R24, 1 ; Suma 1 a R24 y en caso de que haya ; acarreo se lo suma a R25

    AND Funcin lgica AND entre registros Sintaxis: AND Rd, Rr Operacin: Rd Rd (AND) Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se realiza el AND lgico entre el contenido del registro Rd y del registro Rr; deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: AND r2, r3 ; AND lgico entre r2 y r3, resultado en r2 LDI r16, 1 ; Poner 0000 0001 en r16 AND r2, r16 ; Aislar el bit 0 en r2

    8

  • ANDI Funcin lgica AND entre un registro y un dato inmediato Sintaxis: AND Rd, K Operacin: Rd Rd (AND) K Operandos: 0 d 31, 0 K 255 Descripcin: Se realiza el AND lgico entre el contenido del registro Rd y el valor K; deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: ANDI r17, $0F ; Borrar el nibble alto de r17 ANDI r18, $10 ; Aislar el bit 4 en r18 ANDI r19, $AA ; Borrar los bits impares de r19

    ASR Desplazamiento aritmtico a la derecha Sintaxis: ASR Rd

    Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits de Rd una posicin hacia la derecha. El bit 7 se mantiene constante. El bit 0 se carga dentro de la bandera C. Esta operacin divide entre dos un valor con signo sin cambiar su signo. La bandera C puede usarse para redondear el resultado. Banderas afectadas: S: N C, para prueba de signo V: N C (para N y C despus del desplazamiento) N: Se pone a uno si el MSB de Rd esta a uno. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa antes del desplazamiento el LSB de Rd estaba a uno. Ejemplo: LDI r16, $10 ; Cargar 16 decimal en r16 ASR r16 ; r16 = r16 / 2 LDI r17, $FC ; Cargar -4 en r17 ASR r17 ; r17 = r17 / 2

    BCLR Poner a cero el bit de una bandera Sintaxis: BCLR s Operacin: SREG(s) 0 Operandos: 0 s 7 Descripcin: Pone a cero un bit especfico del registro de banderas SREG. Banderas afectadas: I: 0 si s = 7; de lo contrario sin cambio T: 0 si s = 6; de lo contrario sin cambio H: 0 si s = 5; de lo contrario sin cambio S: 0 si s = 4; de lo contrario sin cambio V: 0 si s = 3; de lo contrario sin cambio N: 0 si s = 2; de lo contrario sin cambio Z: 0 si s = 1; de lo contrario sin cambio C: 0 si s = 0; de lo contrario sin cambio Ejemplo: BCLR 0 ; Borrar la bandera C BCLR 7 ; Deshabilitar interrupciones

    BLD Carga en un registro la bandera T Sintaxis: BLD Rd, b Operacin: Rd(b) T Operandos: 0 d 31, 0 b 7 Descripcin: Carga la bandera T del registro SREG en el bit b del registro Rd. Banderas afectadas: Ninguna Ejemplo: BST r1, 2 ; Guardar el bit 2 de r1 en la bandera T BLD r0, 4 ; Cargar T en el bit 4 de r0

    9

  • BRBC Brinca si el bit de SREG es cero Sintaxis: BRBC s, k Operacin: Si SREG(s) = 0 entonces PC PC + k +1 Si SREG(s) = 1 entonces PC PC + 1 Operandos: 0 s 7, -64 k 63 Descripcin: Examina un bit del registro SREG y realiza un salto relativo en el PC (contador de programa) si el bit est a cero. La instruccin desva relativamente al PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. Banderas afectadas: Ninguna Ejemplo:

    CPI r20, 5 ; Comparar r20 con el valor 5 BRBC 1, dife ; Salta si la bandera Z es cero

    ... dife: NOP ; Destino de desvo (No hacer nada)

    BRBS Brinca si el bit de SREG est a set (uno) Sintaxis: BRBS s, k Operacin: Si SREG(s) = 1 entonces PC PC + k +1 Si SREG(s) = 0 entonces PC PC + 1 Operandos: 0 s 7, -64 k 63 Descripcin: Examina un bit del registro SREG y realiza un salto relativo en el PC (contador de programa) si el bit est a uno . La instruccin desva relativamente al PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. Banderas afectadas: Ninguna Ejemplo:

    BST r0, 3 ; Carga la bandera T con el bit 3 de r0 BRBS 6, salto ; Salta si el bit T est a uno

    ... salto: NOP ; Destino de desvo (No hacer nada)

    BRCC Salta si la bandera C es cero Sintaxis: BRCS k Operacin: Si C = 0 entonces PC PC + k + 1 Si C = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera C y si es cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 0, k). Banderas afectadas: Ninguna Ejemplo:

    ADD r22, r23 ; Suma r23 a r22 BRCC desvo ; Desva si C est borrado

    ... desvo: NOP ; Destino de desvo

    BRCS Salta si la bandera C est a set (uno) Sintaxis: BRCS k Operacin: Si C = 1 entonces PC PC + k + 1 Si C = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera C y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 0, k). Banderas afectadas: Ninguna Ejemplo:

    CPI r26, $56 ; Comparar r26 con $56 BRCS desvo ; Desva si C est a uno

    ... desvo: NOP ; Destino de desvo

    10

  • BREAK Pausa Sintaxis: BREAK Operacin: Pausa en la depuracin Operandos: Ninguno Descripcin: Se utiliza para la depuracin y normalmente no se utiliza en el programa de la aplicacin. Cuando la instruccin es ejecutada el CPU del AVR se pone en modo de inactividad. Esto le da al depurador acceso a los recursos internos. La instruccin no est disponible para todos los modelos de AVRs. Banderas afectadas: Ninguna

    BREQ Salta si es igual Sintaxis: BREQ k Operacin: Si Rd = Rr : Z = 1 entonces PC PC + k + 1 Si Rd Rr : Z = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera Z y ejecuta un salto relativo en PC (contador de programa) si Z est a uno. Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con o sin signo representado en Rd es igual al nmero binario con o sin signo representado en Rr. Esta instruccin desva relativamente a PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 1, k). Banderas afectadas: Ninguna Ejemplo:

    CP r1, r0 ; Comparar registros r1 y r0 BREQ igual ; Salta si Z=0 (los registros son iguales)

    ... igual: NOP ; Destino de desvo (No hacer nada)

    BRGE Salta si es mayor o igual (con signo) Sintaxis: BRGE k Operacin: Si Rd Rr : (N V = 0) entonces PC PC + k + 1 Si Rd < Rr entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera S y si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el nmero binario con o sin signo representado en Rd es mayor o igual al nmero binario con o sin signo representado en Rr. Banderas afectadas: Ninguna Ejemplo:

    CP r11, r12 ; Comparar los registros r11 y r12 BRGE desvo ; Desva si r11 r12 (con signo)

    ... desvo: NOP ; Destino de desvo

    BRHC Salta si la bandera H est a cero Sintaxis: BRHS k Operacin: Si H = 0 entonces PC PC + k + 1 Si H = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera H y si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:

    BRHC desvio ; Desvo si la bandera H est a cero ... desvio: NOP ; Destino de desvo

    11

  • BRHS Salta si la bandera H est a uno Sintaxis: BRHS k Operacin: Si H = 1 entonces PC PC + k + 1 Si H = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera H y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:

    BRHS desvio ; Desvo si la bandera H est a uno ... desvio: NOP ; Destino de desvo

    BRID Salta si la bandera I est a cero Sintaxis: BRID k Operacin: Si T = 0 entonces PC PC + k + 1 Si T = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera I; si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 7, k). Banderas afectadas: Ninguna Ejemplo:

    BRIE desvio ; Desva si la bandera I est a cero ...

    desvio: NOP ; Destino de desvo

    BRIE Salta si la bandera I est a uno Sintaxis: BRIE k Operacin: Si I = 1 entonces PC PC + k + 1 Si I = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera I; si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 7, k). Banderas afectadas: Ninguna Ejemplo:

    BRIE desvio ; Desva si la bandera I est a uno ...

    desvio: NOP ; Destino de desvo

    BRLO Salta si es menor Sintaxis: BREQ k Operacin: Si Rd < Rr : C = 1 entonces PC PC + k + 1 Si Rd Rr : C = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera C y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el nmero binario con o sin signo representado en Rd es mayor o igual al nmero binario con o sin signo representado en Rr. Banderas afectadas: Ninguna Ejemplo:

    CP r1, r0 ; Comparar registros r1 y r0 BREQ igual ; Salta si Z=0 (los registros son iguales)

    ... igual: NOP ; Destino de desvo (No hacer nada)

    12

  • BRLT Salta si es menor (con signo) Sintaxis: BRLT k Operacin: Si Rd Rr : (N V = 1) entonces PC PC + k + 1 Si Rd < Rr entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera S y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el nmero binario con o sin signo representado en Rd es mayor o igual al nmero binario con o sin signo representado en Rr. Banderas afectadas: Ninguna Ejemplo:

    CP r16, r1 ; Comparar los registros r16 con r1 BRLT desvo ; Desva si r16 < r1 (con signo)

    ... desvo: NOP ; Destino de desvo (No hacer nada)

    BRMI Salta si es negativo Sintaxis: BRMI k Operacin: Si N = 1 entonces PC PC + k + 1 Si N = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera N y si est a uno se desva relativamente al PC (contador de programa en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 2, k). Banderas afectadas: Ninguna Ejemplo:

    SUBI r18, 4 ; Restar 4 de r18 BRMI desvo ; Desva si la bandera N=1

    ... desvo: NOP ; Destino de desvo

    BRNE Salta si es diferente Sintaxis: BRNE k Operacin: Si Rd = Rr : Z = 0 entonces PC PC + k + 1 Si Rd Rr : Z = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera Z y ejecuta un salto relativo en PC (contador de programa) si Z est a cero. Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con o sin signo representado en Rd es diferente al nmero binario con o sin signo representado en Rr. Esta instruccin desva relativamente a PC en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 1, k). Banderas afectadas: Ninguna Ejemplo:

    EOR r27, r27 ; Borrar r27 loop: INC r27 ; Incrementar r27 ...

    CPI r27,5 ; Comparar r27 con 5 BRNE loop ; Desvo si r27 5 NOP ; Salida de Loop

    BRPL Salta si es positivo Sintaxis: BRPL k Operacin: Si N = 0 entonces PC PC + k + 1 Si N = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera N y si est a cero se desva relativamente al PC (contador de programa en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 2, k). Banderas afectadas: Ninguna Ejemplo:

    SUBI r26, $50 ; Restar $50 de r26 BRPL desvo ; Desva si r26 es positivo

    ... desvo: NOP ; Destino de desvo

    13

  • BRSH Salta si es mayor o igual (sin signo) Sintaxis: BRSH k Operacin: Si Rd Rr : C = 0 entonces PC PC + k + 1 Si Rd < Rr : C = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera C y si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBC 0, k). Si la instruccin se ejecuta inmediatamente despus de alguna de las instrucciones CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el nmero binario con o sin signo representado en Rd es mayor o igual al nmero binario con o sin signo representado en Rr. Banderas afectadas: Ninguna Ejemplo:

    SUBI r19, 4 ; Restar 4 de r19 BRSH desvo ; Desva si r19 4 (sin signo)

    ... desvo: NOP ; Destino de desvo

    BRTC Salta si la bandera T est a cero Sintaxis: BRTC k Operacin: Si T = 0 entonces PC PC + k + 1 Si T = 1 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera T y si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 5, k). Banderas afectadas: Ninguna Ejemplo:

    BST r3, 5 ; cargar el bit 5 de r3 en la bandera T BRTS desvio ; Desva si ese bit est a cero

    ... desvio: NOP ; Destino de desvo

    BRTS Salta si la bandera T est a uno Sintaxis: BRTS k Operacin: Si T = 1 entonces PC PC + k + 1 Si T = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera T y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:

    BST r3, 5 ; cargar el bit 5 de r3 en la bandera T BRTS desvio ; Desva si ese bit est a uno

    ... desvio: NOP ; Destino de desvo

    BRVC Salta si la bandera V est a cero Sintaxis: BRTC k Operacin: Si V = 1 entonces PC PC + k + 1 Si V = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera V y si est a cero desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:

    ADD r3, r4 ; Suma el registro r4 a r3 BRVS desvio ; Desva si no hay desbordamiento ...

    desvio: NOP ; Destino de desvo

    14

  • BRVS Salta si la bandera V est a uno Sintaxis: BRVS k Operacin: Si V = 1 entonces PC PC + k + 1 Si V = 0 entonces PC PC + 1 Operandos: -64 k 63 Descripcin: Examina la bandera V y si est a uno desva relativamente al PC (contador de programa) en cualquier direccin (PC - 63 destino PC + 64). El parmetro k es el offset de PC y es representado en forma de complemento a dos. (Equivalente a la instruccin BRBS 6, k). Banderas afectadas: Ninguna Ejemplo:

    ADD r3, r4 ; Suma el registro r4 a r3 BRVS desvio ; Desva si hay desbordamiento ...

    desvio: NOP ; Destino de desvo

    BSET Poner a uno el bit de una bandera Sintaxis: BSET s Operacin: SREG(s) 1 Operandos: 0 s 7 Descripcin: Pone a uno un bit especfico del registro de banderas SREG. Banderas afectadas: I: 1 si s = 7; de lo contrario sin cambio T: 1 si s = 6; de lo contrario sin cambio H: 1 si s = 5; de lo contrario sin cambio S: 1 si s = 4; de lo contrario sin cambio V: 1 si s = 3; de lo contrario sin cambio N: 1 si s = 2; de lo contrario sin cambio Z: 1 si s = 1; de lo contrario sin cambio C: 1 si s = 0; de lo contrario sin cambio Ejemplo: BSET 6 ; Poner a uno la bandera T BSET 7 ; Interrupcin habilitada

    BST Guarda en T el bit de un registro Sintaxis: BST Rd, b Operacin: T Rd(b) Operandos: 0 d 31, 0 b 7 Descripcin: Guarda el bit b del registro Rd en la bandera T del registro de SREG. Banderas afectadas: T: Se pone a uno si el bit b del registro Rd est a uno, de lo contrario se pone a cero. Ejemplo: BST r1, 2 ; Guardar el bit 2 de r1 en la bandera T BLD r0, 4 ; Cargar T en el bit 4 de r0

    CALL llamada larga a subrutina Sintaxis: CALL k Operacin: PC k Dispositivos con PC de 16 bits PC k Dispositivos con PC de 22 bits Operandos: 0 k 64K 0 k 4M Pila: Stack PC + 2 : SP SP -2 (2 Bytes) Stack PC + 2 : SP SP -3 (3 Bytes) Descripcin: Llama a una subrutina en cualquier lugar de la memoria de programa. La direccin de retorno se almacena en la pila. El puntero de pila SP es post-decrementado durante la instruccin CALL. Banderas afectadas: Ninguna Ejemplo:

    MOV r16, r0 ; Copiar r0 en r16 CALL check ; Llamado a subrutina

    ... check: CPI r16, $42 ; Compara r16 con un valor ; especfico ...

    BREQ error ; Salta si son iguales RET ; Retorno de subrutina

    error: RJMP error ; Ciclo infinito

    15

  • CBI Poner a cero un bit del registro I/O Sintaxis: CBI P, b Operacin: (P, b) 1 Operandos: 0 P 31, 0 b 7 Descripcin: Pone a cero un bit especfico en un registro de I/O. Esta operacin funciona en los 32 registros de I/O ms bajos, y en los registros de trabajo de 0 a 31. Banderas afectadas: Ninguna Ejemplo: CBI $12, 7 ; Poner a cero el bit 7 de Port D

    CBR Pone a cero los bits del registro Sintaxis: CBR Rd, K Operacin: Rd Rd AND ($FF K) Operandos: 16 d 31, 0 K 255 Descripcin: Pone a uno los bits del registro Rd indicados. Realiza la operacin ORI lgica entre el contenido del registro Rd y una constante K, y deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: CBR r16, $F0 ; Borra el nibble alto de r16 CBR r18, 1 ; Borra el bit 0 de r18

    CLC Poner a cero la bandera C Sintaxis: CLC Operacin: C 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de acarreo C del registro de estado SREG. Banderas afectadas: C: Se pone a cero Ejemplo: ADD r0, r0 ; Sumar r0 a s mismo CLC ; Borrar la bandera de acarreo

    CLH Poner a cero la bandera H Sintaxis: CLH Operacin: H 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de medio acarreo H del registro de estado SREG. Banderas afectadas: H: Se pone a cero Ejemplo: CLH ; Borrar la bandera H

    16

  • CLI Deshabilitar las interrupciones globales Sintaxis: CLI Operacin: N 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de habilitacin de interrupciones globales I del registro de estado SREG. Banderas afectadas: I: Se pone a cero Ejemplo: CLI ; Interrupciones deshabilitadas IN r11, $16 ; Leer el Puerto B SEI ; Interrupciones habilitadas

    CLN Poner a cero la bandera N Sintaxis: CLN Operacin: N 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de resultado negativo N del registro de estado SREG. Banderas afectadas: C: Se pone a cero Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLN ; Borrar la bandera N

    CLR Borra un registro Sintaxis: CLR Rd Operacin: Rd Rd (XOR) Rd Operandos: 0 d 31 Descripcin: Borra un registro. Esta instruccin realiza una OR exclusiva entre un registro y en s mismo. Borrar todos los bits del registro. Banderas afectadas: V: Se pone a cero. N: Se pone a cero Z: Se pone a uno. Ejemplo:

    CLR r18 ; Borrar r18 loop: INC r18 ; Incrementar r18 ...

    CPI r18, $50 ; Comparar r18 con $50 BRNE loop

    CLS Poner a cero la bandera S Sintaxis: CLS Operacin: S 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de signo S del registro de estado SREG. Banderas afectadas: S: Se pone a cero Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLS ; Borrar la bandera S

    17

  • CLT Poner a cero la bandera T Sintaxis: CLT Operacin: T 0 Operandos: Ninguno Descripcin: Pone a cero la bandera T del registro de estado SREG. Banderas afectadas: T: Se pone a cero Ejemplo: CLT ; Borrar la bandera T

    CLV Poner a cero la bandera V Sintaxis: CLV Operacin: V 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de desbordamiento V del registro de estado SREG. Banderas afectadas: V: Se pone a cero Ejemplo: ADD r2, r3 ; Sumar r3 a r2 CLV ; Borrar la bandera V

    CLZ Poner a cero la bandera Z Sintaxis: CLZ Operacin: Z 0 Operandos: Ninguno Descripcin: Pone a cero la bandera de resultado cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone a cero Ejemplo: ADD r2, r3 ; Suma r3 a r2 CLZ ; Borra la bandera Z

    COM Complemento a uno Sintaxis: COM Rd Operacin: Rd $FF - Rd Operandos: 0 d 31 Descripcin: Realiza el complemento a uno del registro Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: se pone a uno. Ejemplo:

    COM r4 ; Realiza el complemento a uno de r4 BREQ prueba ; brinca si la bandera Z est en uno. ... prueba: NOP ; Destino de desvo (No hacer nada)

    18

  • CP Compara Sintaxis: CP Rd, Rr Operacin: Rd -Rr Operandos: 0 d 31, 0 r 31 Descripcin: Efecta una comparacin entre dos registros Rd y Rr. Ninguno de los registros es cambiado. Todos los desvos condicionales pueden usarse despus de esta instruccin. Banderas afectadas: H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo:

    CP r4, r19 ; Comparar r4 con r19 BRNE noteq ; Desva si la bandera Z est activa.

    ... noteq: NOP ; Destino de desvo (No hacer nada)

    CPC Compara con acarreo Sintaxis: CPC Rd, Rr Operacin: Rd Rr -C Operandos: 0 d 31, 0 r 31 Descripcin: Realiza una comparacin entre dos registros Rd y Rr y tambin se toma en cuenta el estado de la bandera C previo. Ninguno de los registros es cambiado. Todos los desvos condicionales pueden usarse despus de esta instruccin Banderas afectadas: H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: El valor previo permanece sin cambio cuando el resultado es ce o, de lo contrario se borrar. rC Estar a uno si el valor absoluto del contenido de Rr + C, es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo:

    ; Comparar r3:r2 con r1:r0 CP r2, r0 ; Compara el byte bajo CPC r3, r1 ; Compara el byte alto BRNE noteq ; Desva si la bandera Z est activa

    ... noteq: NOP ; Destino de desvo( no hacer nada)

    CPI Compara un registro con dato inmediato Sintaxis: CPI Rd, K Operacin: Rd -K Operandos: 16 d 31, 0 K 255 Descripcin: Efecta una comparacin entre el registro Rd y un dato inmediato. El registro no es cambiado. Todos los desvos condicionales pueden usarse despus de esta instruccin. Banderas afectadas: H: Se activa si hay un acarreo negativo del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de K es mayor que el contenido de Rd, de lo contrario se borrar. Ejemplo:

    CPI r19,3 ; Comparar r19 con 3 BRNE error ; Desva si la bandera Z est activa

    ... error: NOP ; Destino de desvo (No hacer nada)

    CPSE Compara y saltar si es igual Sintaxis: CPSE Rd, Rr Operacin: Si Rd = Rr entonces PC PC + 2 ( o 3) Si Rd Rr entonces PC PC + 1 Operandos: 0 d 31, 0 r 31 Descripcin: Ejecuta una comparacin entre dos registros Rd y Rr, y si Rd Rr entonces la siguiente instruccin se ejecuta de lo contrario la siguiente instruccin es brincada. Banderas afectadas: Ninguna Ejemplo: INC r4 ; Incrementar r4 CPSE r4, r0 ; Comparar r4 con r0 NEG r4 ; Slo ejecutar si r4 r0 NOP ; Continuar (No hacer nada)

    19

  • DEC Decrementar el registro Sintaxis: DEC Rd Operacin: Rd Rd -1 Operandos: 0 d 31 Descripcin Se decrementa en uno al contenido del registro Rd y deja el resultado en Rd. La bandera C de SREG no es afectada por la operacin. Al funcionar con nmeros sin signo, slo se puede esperar que funcionen de forma consistente las instrucciones BREQ y BRNE. Al operar con valores en complemento a dos todas las instrucciones de desvo estn disponibles. Banderas afectadas: V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. Un desbordamiento del complemento a dos ocurrir si y slo si Rd era $80 antes de la operacin. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: LDI r17, $10 ; Cargar constante en r17 Loop: ADD r1, r2 ; Sumar r2 a r1 DEC r17 ; Decrementar r17 BRNE loop ; Desvo si r17 0 NOP ; Continuar (No hacer nada)

    EOR Funcin lgica OR-exclusiva () entre registros Sintaxis: EOR Rd, Rr Operacin: Rd Rd Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se realiza el XOR lgico entre el contenido del registro Rd y del registro Rr; deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: EOR r4, r4 ; Borrar r4 EOR r0, r22 ; OR exclusiva entre r0 y r22

    ICALL llamada indirecta a subrutina Sintaxis: ICALL Operacin: PC (15:0) Z (15:0) Operandos: Ninguno Pila: Stack PC + 1 : SP SP -2 (2 Bytes) Descripcin: Realiza una llamada indirecta a una subrutina apuntada por el registro puntero Z. El registro puntero Z es de 16 bit y permite la llamada a subrutina dentro de los 64K words (128K bytes) ms bajos de la seccin de espacio de memoria de programa. El SP (puntero de pila) utiliza durante el ICALL un esquema de post-decremento. Banderas afectadas: Ninguna Ejemplo:

    MOV r30, r0 ; Poner offset a la tabla de llamada ICALL ; Rutina de llamada que apunta a r31:r30

    IJMP Salto indirecto Sintaxis: IJMP Operacin: PC Z(15:0) Operandos: Ninguno Descripcin: Efecta un salto indirecto a una direccin apuntada por el registro puntero Z. El registro puntero Z es de 16 bits y permite saltos hacia los 64K words (128K bytes) ms bajos de la seccin de memoria de programa. La instruccin no est disponible para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: MOV r30, r0 ; Poner offset a la tabla de salto IJMP ; Saltar a la rutina apuntada por r31:r30

    20

  • IN Cargar un registro de trabajo con I/O Sintaxis: IN Rd, P Operacin: Rd P Operandos: 0 d 31, 0 P 63 Descripcin: Carga un dato proveniente del bloque de registros I/O (Puertos, Timers, registros de configuracin, etc.) en el registro de trabajo Rd. Banderas afectadas: Ninguna Ejemplo:

    IN r25, $16 ; Carga en r25 el ;dato ;contenido en Puerto B

    CPI r25,4 ; Comparar el valor de r25 con ; un dato inmediato

    BREQ exit ; Desva si r25 = 4 ... exit: NOP ; Destino de desvo

    INC Incrementar el registro Sintaxis: INC Rd Operacin: Rd Rd +1 Operandos: 0 d 31 Descripcin Se incrementa en uno al contenido del registro Rd y deja el resultado en el registro Rd. La bandera C de SREG no es afectada por la operacin. Al funcionar con nmeros sin signo, slo se puede esperar que funcionen de forma consistente las instrucciones BREQ y BRNE. Al operar con valores en complemento a dos todas las instrucciones de desvo estn disponibles. Banderas afectadas: V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. Un desbordamiento del complemento a dos ocurrir si y slo si Rd era $7F antes de la operacin. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: CLR r22 ; Borrar r22 loop: INC r22 ; Incrementar r22 ... CPI r22, $4F ; Comparar r22 con $4f BRNE loop ; Desvo si no son iguales NOP ; Continuar (No hacer nada)

    JMP Salto Sintaxis: JMP k Operacin: PC k Operandos: 0 k 4M Descripcin: Ejecuta un salto a cualquier posicin de la memoria de programa. La instruccin no es disponible para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo:

    MOV r1, r0 ; Copia r0 en r1 JMP lejos ; Salto incondicional

    lejos: nop ; Destino de salto

    LDI Carga de un dato inmediato Sintaxis: LDI Rd, K Operacin: Rd K Operandos: 16 Rd 31, 0 K 255 Descripcin: Carga un dato inmediato de 8-bits en cualquiera de los registros de trabajo a partir de R16 hasta R31. Banderas afectadas: Ninguna Ejemplo: CLR r31 ; Borra el byte alto de Z LDI r30, $F0 ; Pone el byte bajo de Z a $F0 LPM ; Carga una constante de la memoria

    ; de programa apuntada por Z

    21

  • El resultado de estas combinaciones es indefinido: LD r26, X+ LD r27, X+ LD r26, -X LD r27, -X Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r27 ; Borra el byte alto de X LDI r26, $60 ; Pone el byte bajo de X a $60 LD r0, X+ ; Carga en r0 el dato de la localidad $60

    ;(X post-incrementado) LD r1, X ; Carga en r1 el dato contenido en la

    ; localidad $61 LDI r26, $63 ; Pone el byte bajo de X a $63 LD r2, X ; Carga en r2 el dato de la localidad $63 LD r3, -X ; Cargar en r3 el dato de la localidad $62

    ;(X pre-decremento)

    LD Carga indirecta usando X Sintaxis: LD Rd, X

    LD Rd, X+ LD Rd, -X

    Operacin: Rd (X) X: Sin cambios Rd (X), X X+1 X: Con post-incremento X X1, Rd (X) X: Con pre-decremento Operandos: 0 d 31 Descripcin Se carga un byte de manera indirecta procedente del rea de datos hacia un registro de trabajo. Para los dispositivos con SRAM, el rea de datos se compone de los registros de: trabajo, I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone slo por los registros de trabajo. La EEPROM tiene un espacio de direccin separado. La direccin de los datos es apuntado por el registro puntero X (16 bits). Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPX tiene que ser correctamente configurado. El registro puntero X puede permanecer sin cambios por la operacin, puede post-incrementarse o pre-decrementarse. Estas caractersticas son apropiadas para acceder a matrices, tablas y uso del puntero de pila con el registro puntero X. Slo el byte bajo del puntero X se ocupa para dispositivos sin ms de 256 bytes de espacio de datos. Para tales dispositivos, el byte alto del puntero no es usado por esta instruccin y puede usarse para otros propsitos.

    LD (LDD) Carga indirecta usando Y Sintaxis: LD Rd, Y

    LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q

    Operacin: Rd (Y) Y: Sin cambios Rd (Y), Y Y+1 Y: Con post-incremento Y Y1, Rd (Y) Y: Con pre-decremento

    Rd (Y+q) Y: Sin cambios, q: Desplazamiento

    Operandos: 0 d 31, 0 q 63 Descripcin Se carga un byte de manera indirecta procedente del rea de datos hacia un registro de trabajo. Para los dispositivos con SRAM, el rea de datos se compone de los registros de: trabajo, I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone slo por los registros de trabajo. La EEPROM tiene un espacio de direccin separado. La direccin de los datos es apuntado por el registro puntero Y (16 bits). Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPY tiene que ser correctamente configurado. El registro puntero Y puede permanecer sin cambios por la operacin, puede post-incrementarse o pre-decrementarse. Estas caractersticas son apropiadas para acceder a matrices, tablas y uso del puntero de pila con el registro puntero Y. Slo el byte bajo del puntero Y se ocupa para dispositivos sin ms de 256 bytes de espacio de datos. Para tales dispositivos, el byte alto del puntero no es usado por esta instruccin y puede usarse para otros propsitos.

    El resultado de estas combinaciones es indefinido: LD r28, Y+ LD r29, Y+ LD r28, -Y LD r29, -Y Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r29 ; Borra el byte alto de Y LDI r28, $60 ; Pone el byte bajo de Y a $60 LD r0, Y+ ; Carga en r0 el dato de la localidad $60

    ; (Y post-incrementado) LD r1, Y ; Carga en r1 el dato de la localidad $61 LDI r28, $63 ; Pone el byte bajo de Y a $63 LD r2, Y ; Carga en r0 el dato de la localidad $63 LD r3,-Y ; Carga en r0 el dato de la localidad $62

    ; (Y pre-decrementado) LDD r4, Y+2 ; Carga en r4 el dato de la localidad $64

    22

  • LD (LDD) Carga indirecta usando Z Sintaxis: LD Rd, Z

    LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q

    Operacin: Rd (Z) Z: Sin cambios Rd (Z), Z Z+1 Z: Con post-incremento Z Z 1, Rd (Z) Z: Con pre-decremento

    Rd (Z+q) Z: Sin cambios, q: Desplazamiento

    Operandos: 0 d 31, 0 q 63 Descripcin Se carga un byte de manera indirecta procedente del rea de datos hacia un registro de trabajo. Para los dispositivos con SRAM, el rea de datos se compone de los registros de: trabajo, I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone slo por los registros de trabajo. La EEPROM tiene un espacio de direccin separado. La direccin de los datos es apuntado por el registro puntero Z (16 bits). Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPX tiene que ser correctamente configurado. El registro puntero Z puede permanecer sin cambios por la operacin, puede post-incrementarse o pre-decrementarse. Estas caractersticas son apropiadas para acceder a matrices, tablas y uso del puntero de pila; Sin embargo, debido a que este puntero puede usarse para las llamadas indirectas a subrutinas y los saltos indirectos, es mejor usar a los punteros X o Y para direccionar al puntero de pila. .

    Slo el byte bajo del puntero Z se ocupa para dispositivos sin ms de 256 bytes de espacio de datos. Para tales dispositivos, el byte alto del puntero no es usado por esta instruccin y puede usarse para otros propsitos. El resultado de estas combinaciones es indefinido: LD r30, Z+ LD r31, Z+ LD r30, -Z LD r31, -Z Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r31 ; Borra el byte alto de Z LDI r30, $60 ; Pone el byte bajo de Z a $60 LD r0, Z+ ; Carga en r0 el dato de la localidad $60

    ; (Z post-incrementado) LD r1, Z ; Carga en r1 el dato de la localidad $61 LDI r30, $63 ; Pone el byte bajo de Z a $63 LD r2, Z ; Carga en r0 el dato de la localidad $63 LD r3,-Z ; Carga en r0 el dato de la localidad $62

    ; (Z pre-decrementado) LDD r4, Z+2 ; Carga en r4 el dato de la localidad $64

    LDS Carga directa desde SRAM Sintaxis: LDS Rd, k Operacin: Rd (k) Operandos: 0 d 31, 0 k 65535 Descripcin: Carga un byte del espacio de memoria de datos a un registro de trabajo. Para los dispositivos con SRAM, el espacio de datos est compuesto por los registros de trabajo, memoria de I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos est compuesto slo por los registros de trabajo. La EEPROM tiene un espacio de direcciones separado. Debe proporcionarse una direccin de 16-bit. Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPD tiene que ser correctamente configurado. Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo: LDS r2, $FF00 ; Carga r2 con el contenido de la localidad

    ; $FF00 de la memoria de datos ADD r2, r1 ; Sumar r1 a r2 STS $FF00, r2 ; Escribir en SRAM el contenido de r2

    LPM Carga memoria de programa Sintaxis: LPM LPM Rd, Z LPM Rd, Z+ Operacin: R0 (Z) Z: Sin cambio, R0 implcito Rd (Z) Z: Sin cambio Rd (Z), Z Z + 1 Z: Post-incrementado Operandos: 0 d 31 Descripcin: Se carga un byte apuntado por el registro Z en el registro R0. La memoria de programa est organizada en palabra (word) de 16-bits; el bit menos significativo del puntero Z selecciona el byte bajo (0) o el byte alto (1). Esta instruccin puede dirigirse a los primeros 64K bytes (32K words) de memoria de programa. El registro puntero Z queda inalterado por el funcionamiento. Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:

    CLR r31 ; Borrar el byte alto de Z LDI r30, $F0 ; Poner a cero el byte bajo de Z LPM ; Cargar la constante de la

    ;memoria de programa ;apuntada por Z (r31:r30)

    23

  • LSL Desplazamiento a la izquierda Sintaxis: LSL Rd

    Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits de Rd una posicin hacia la izquierda. El bit 7 se carga en la bandera C de SREG. Prcticamente esta operacin multiplica por dos al contenido de Rd. Banderas afectadas: H: Se activa si hay un acarreo del bit 3, de lo contrario se borrar. S: N C, para prueba de signo V: N C (para N y C despus del desplazamiento) N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si antes del desplazamiento el MSB del Rd est a uno, de lo contrario se borrar. Ejemplo: ADD r0, r4 ; Sumar r4 a r0 LSL r0 ; Multiplicar r0 por 2

    LSR Desplazamiento a la derecha Sintaxis: LSR Rd

    Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits de Rd una posicin hacia la derecha. En el bit 7 se carga un cero, en la bandera C se carga el LSB de Rd. Prcticamente esta operacin divide entre dos al contenido de Rd. Banderas afectadas: S: N C, para prueba de signo V: N C (para N y C despus del desplazamiento) N: Se pone a cero Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el LSB de Rd antes del desplazamiento estaba a uno. Ejemplo: ADD r0, r4 ; Sumar r4 a r0 LSR r0 ; Dividir a r0 entre 2

    MOV Copia de registros Sintaxis: MOV Rd, Rr Operacin: Rd Rr Operandos: 0 d 31, 0 r 31 Descripcin: Efecta una copia de un registro en otro registro. El registro fuente Rr permanece sin cambiar, mientras el registro destino Rd es cargado con una copia de Rr. Banderas afectadas: Ninguna Ejemplo:

    MOV r16,r0 ; Copiar r0 en r16 CALL check ; Llamada a subrutina

    ... check: CPI r16,$11 ; Comparar r16 con $11 ...

    RET ; Retorno de subrutina

    MOVW Copia de registros de palabra Sintaxis: MOVW Rd + 1: Rd, Rr + 1: Rr Operacin: Rd + 1: Rd Rr + 1: Rr Operandos: d {0,2,,30} r {0,2,,30} Descripcin: Efecta una copia de un par de registros en otro par de registros. Los registros fuente Rr permanecen sin cambiar, mientras los registros destino Rd son cargados con una copia de Rr. Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:

    MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16 CALL check ; Llamada a subrutina

    ... check: CPI r16, $11 ; Comparar r16 con $11 ...

    RET ; Retorno de subrutina

    24

  • NEG Complemento a dos Sintaxis: NEG Rd Operacin: Rd $00 - Rd Operandos: 0 d 31 Descripcin: Cambia el contenido del registro Rd con su complemento a dos; el valor $80 se deja sin cambiar. Banderas afectadas: H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa si ocurre un desbordamiento del complemento a dos de la resta implcita de cero, de lo contrario se borrar. Un desbordamiento del complemento a dos ocurrir si y slo si el contenido del registro despus de la operacin es $80. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si hay un acarreo negativo (borrow) en la resta implcita de cero, de lo contrario se borrar. La bandera C se activa en todos los casos excepto cuando el contenido del registro despus de la operacin es $00. Ejemplo:

    SUB r11, r0 ; Restar r0 de r11 BRPL prueba ; Desvo si la bandera N est a cero. NEG r11 ; Realizar el complemento a dos de r11 prueba: NOP ; Destino de desvo (No hacer nada)

    NOP No operacin Sintaxis: NOP Operacin: Ninguna Operandos: Ninguno Descripcin: Consume un ciclo sin realizar operaciones. Banderas afectadas: Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ; Poner a uno r17 OUT $18, r16 ; Escribir ceros en el Puerto B NOP ; Esperar (No hacer nada) OUT $18, r17 ; Escribir unos en el Puerto B

    MULS Multiplicacin con signo Sintaxis: MULS Rd, Rr Operacin: R1:R0 Rd x Rr Operandos: 16 d 31, 0 r 16 Descripcin: El multiplicando Rd y el multiplicador Rr son registros con nmeros signados. El resultado con signo es de 16-bit y se coloca la parte ms significativa del resultado en registro R1 y la menos significativa en R0.

    Banderas afectadas: C: Se pone a uno si el bit 15 del resultado est a uno. Z: Se pone a uno si el resultado es cero. Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo: MUL r21 r20 ; Multiplica R21 con R20 MOVW r20, r0 ; Copia el resultado en R21: R20

    MUL Multiplicacin sin signo Sintaxis: MUL Rd, Rr Operacin: R1:R0 Rd x Rr Operandos: 0 d 31, 0 r 31 Descripcin: El multiplicando Rd y el multiplicador Rr son registros con nmeros sin signo. El resultado sin signo es de 16-bit y se coloca la parte ms significativa del resultado en registro R1 y la menos significativa en R0. Si el multiplicando y el multiplicador son R1 y R0 el resultado se sobrescribir en ellos.

    Banderas afectadas: C: Se pone a uno si el bit 15 del resultado est a uno. Z: Se pone a uno si el resultado es cero. Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo: MUL r5, r4 ; Multiplica R5 con R4 MOVW r4, r0 ; Copia el resultado en R5: R4

    25

  • OR Funcin lgica OR entre registros Sintaxis: OR Rd, Rr Operacin: Rd Rd (OR) Rr Operandos: 0 d 31, 0 r 31 Descripcin: Se realiza el OR lgico entre el contenido del registro Rd y del registro Rr; deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: OR r15, r16 ; Hacer OR lgico entre registros

    BST r15, 6 ; Almacena el bit 6 de r15 en el flag T BRTS ok ; Desvo si el flag T est a uno ... ok: NOP ; Destino de desvo (No hacer nada)

    ORI Funcin lgica OR entre un registro y un dato inmediato Sintaxis: ORI Rd, K Operacin: Rd Rd (OR) K Operandos: 0 d 31, 0 K 255 Descripcin: Se realiza el OR lgico entre el contenido del registro Rd y el valor K; deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: ORI r16, $F0 ; Poner a uno el nibble alto de r16 ORI r17, 1 ; Poner a uno el bit 0 de r17

    OUT Cargar en I/O un registro de trabajo Sintaxis: OUT P, Rr Operacin: P Rr Operandos: 0 r 31, 0 P 63 Descripcin: Carga en un registro del bloque I/O el contenido de un registro trabajo. Banderas afectadas: Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ; Poner a unos r17 OUT $18, r16 ; Escribir ceros en el Puerto B NOP ; Esperar (No hacer nada) OUT $18, r17 ; Escribir unos en el Puerto B

    POP Sacar registro de la pila Sintaxis: POP Rr Operacin: Rr STACK Operandos: 0 r 31 Descripcin: Carga el registro Rd con un byte de la pila. El puntero de pila es incrementado en uno antes del POP Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:

    CALL routine ; Llamar a subrutina ... routine: PUSH r14 ; Guardar r14 en la pila

    PUSH r13 ; Guardar r13 en la pila ...

    POP r13 ; Restaurar r13 POP r14 ; Restaurar r14 RET ; Retorno de subrutina

    26

  • PUSH Guardar registro en la pila Sintaxis: PUSH Rr Operacin: STACK Rr Operandos: 0 r 31 Descripcin: Guarda el contenido del registro Rr en la pila. El puntero de pila es post-decrementado en uno despus del PUSH Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo:

    CALL routine ; Llamar a subrutina ... routine: PUSH r14 ; Guardar r14 en la pila

    PUSH r13 ; Guardar r13 en la pila ...

    POP r13 ; Restaurar r13 POP r14 ; Restaurar r14 RET ; Retorno de subrutina

    RCALL llamada relativa a subrutina Sintaxis: RCALL k Operacin: PC PC + k + 1 Operandos: -2K k 2K Pila: Stack PC + 1 : SP SP -2 (2 Bytes) Descripcin: Realiza una llamada relativa a una direccin que se encuentra dentro de PC - 2K + 1 y PC +2K (words, palabra). En ensamblador, se usan etiquetas en lugar de operadores relativos. Para los microcontroladores AVR con memoria de programa que no excede 4K words (8K bytes) esta instruccin puede direccionar a toda la memoria desde cualquier posicin. El SP (puntero de pila) utiliza durante el RCALL un esquema de post-decremento. Banderas afectadas: Ninguna Ejemplo:

    RCALL routine ; Llamada a subrutina

    ... routine: PUSH r14 ; Guardar r14 en la pila ...

    POP r14 ; Restaurar r14 RET ; Retorno de subrutina

    RET Retorno de subrutina Sintaxis: RET Operacin: PC Stack Operandos: Ninguno Pila: SP SP + 2 (bytes) Descripcin: Efecta un retorno de subrutina. La direccin de retorno es cargada de la pila. El SP (puntero de pila) utiliza durante el RET un esquema de post-incremento. Banderas afectadas: Ninguna Ejemplo:

    CALL routine ; Llamada a subrutina

    ... routine: PUSH r14 ; Guardar r14 en la pila

    ... POP r14 ; Restaurar r14 RET ; Retorno de subrutina

    RETI Retorno de interrupcin Sintaxis: RETI Operacin: PC Stack Operandos: Ninguno Pila: SP SP + 2 (bytes) Descripcin: Realiza un retorno de una interrupcin. La direccin de retorno es cargada desde la pila; la bandera I de SREG (interrupcin global) se pone a uno. El registro de estado no se guarda automticamente al entrar en una rutina de interrupcin, y no se restaura al volver de la rutina interrupcin. De ser necesario el programa debe incluir una rutina para manejar adecuadamente esta situacin. El puntero de pila usa un esquema de pre-incremento durante el RETI. Banderas afectadas: I: Se pone a uno. Ejemplo: ... extint: PUSH r0 ; Guardar r0 en la pila ... POP r0 ; Restaurar r0 RETI ; Retorno y habilitacin de interrupciones

    27

  • RJMP Salto relativo Sintaxis: RJMP k Operacin: PC PC + k + 1 Operandos: -2K k 2K Descripcin: Ejecuta un salto relativo a una direccin que se encuentra dentro de PC - 2K + 1 y PC +2K. En ensamblador, se usan etiquetas en lugar de operadores relativos. Para los microcontroladores AVR con memoria de programa que no excede 4K words (8K bytes) esta instruccin puede dirigirse a toda la memoria desde cualquier posicin de direccin. Banderas afectadas: Ninguna Ejemplo:

    CPI r16, $42 ; Compara r16 con $42 BRNE error ; Desvo si r16 $42 RJMP ok ; Salto incondicional

    error: ADD r16, r17 ; Suma r17 a r16 INC r16 ; Incrementa r16

    ok: NOP ; Destino de RJMP

    ROL Desplazamiento a la izquierdo con acarreo Sintaxis: ROL Rd

    Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits de Rd una posicin hacia la izquierda. La bandera C se desplaza al bit 0 de Rd. El bit 7 se desplaza hacia la bandera C. Esta operacin combinada con LSL, multiplica por dos a valores multi-byte con o sin signo. Banderas afectadas: H: Se activa si hay un acarreo del bit 3, de lo contrario se borrar. S: N C, para prueba de signo V: N C (para N y C despus del desplazamiento) N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si antes del desplazamiento el MSB del Rd est a uno, de lo contrario se borrar. Ejemplo:

    LSL r18 ; Multiplica r19:r18 por dos ROL r19 ; r19:r18 es un entero de dos

    ;bytes -con o sin signo- BRCS oneenc ; Desva si C est a uno

    ... oneenc: NOP ; Destino de desvo

    ROR Desplazamiento a la derecha con acarreo Sintaxis: ROR Rd

    Operacin: Operandos: 0 d 31 Descripcin: Desplaza todos los bits de Rd una posicin hacia la derecha. La bandera C se desplaza al bit 7 de Rd. El bit 0 se desplaza hacia la bandera C. Esta operacin combinada con LSR divide entre dos a valores multi-byte con o sin signo. Banderas afectadas: S: N C, para prueba de signo V: N C (para N y C despus del desplazamiento) N: Se pone a uno si el MSB de Rd esta a uno. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa antes del desplazamiento el LSB de Rd estaba a uno. Ejemplo: ADD r0, r4 ; Sumar r4 a r0 LSL r0 ; Multiplicar r0 por 2

    SBC Resta de dos registros con acarreo Sintaxis: SBC Rd, Rr Operacin: Rd Rd Rr - C Operandos: 0 d 31, 0 r 31 Descripcin: Resta dos registros y resta la bandera C; deja el resultado en el registro Rd. Banderas afectadas: H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: El estado anterior permanece sin cambio cuando el resultado es cero, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr + el acarreo previo es mayor que el valor absoluto de Rd, de lo contrario se borrar. Ejemplo:

    ; Restar r1:r0 de r3:r2 SUB r2, r0 ; Restar el byte bajo SBC r3, r1 ; Restar con acarreo el byte alto

    28

  • SBCI Resta a un registro una constante y el acarreo Sintaxis: ADD Rd, Rr Operacin: Rd Rd K - C Operandos: 16 d 31, 0 K 255 Descripcin: Resta una constante con un registro y con la bandera C; deja el resultado en el registro destino Rd. . Banderas afectadas: H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: El estado anterior permanece sin cambio cuando el resultado es cero, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr + el acarreo previo es mayor que el valor absoluto de Rd, de lo contrario se borrar. Ejemplo:

    ; Resta $4F23 de r17:r16 SUBI r16, $23 ; Restar el byte bajo SBCI r17, $4F ; Restar con acarreo el byte alto

    SBI Poner a uno un bit del registro I/O Sintaxis: SBI P, b Operacin: (P, b) 1 Operandos: 0 P 31, 0 b 7 Descripcin: Pone a uno un bit especfico de un registro del bloque I/O. Esta operacin funciona en los 32 registros de I/O ms bajos. Direcciones de $00 a $1F. Banderas afectadas: Ninguna Ejemplo: OUT $1E, r0 ; Escribir la direccin de EEPROM SBI $1C, 0 ; Poner a uno el bit 0 de EECR IN r1, $1D ; Leer datos de EEPROM

    SBIC Salta si el bit del registro I/O es cero Sintaxis: SBCI P, b Operacin: Si I/O(P,b) = 0 entonces PC PC + 2 ( o 3) Si I/O(P,b) 0 entonces PC PC + 1 Operandos: 0 P 31, 0 b 7 Descripcin: Examina un bit del registro de I/O seleccionado y salta la siguiente instruccin si el bit est en cero. Est operacin funciona en los 32 registros de I/O ms bajos, direcciones 0-31). Banderas afectadas: Ninguna Ejemplo: espera: SBIC $1C, 1 ; Saltar prxima instruccin si

    ; EEWE* est borrado RJMP espera ; Escritura de EEPROM no

    ; terminada NOP ; Continuar (No hacer nada) * EEWE es el bit 1 del registro EECR (Registro de Control de la memoria EEprom) mapaeado en la localidad $1C de la memoria RAM.

    SBIS Salta si el bit del registro I/O es uno Sintaxis: SBIS P, b Operacin: Si I/O(P,b) = 1 entonces PC PC + 2 ( o 3) Si I/O(P,b) 1 entonces PC PC + 1 Operandos: 0 P 31, 0 b 7 Descripcin: Examina un bit del registro de I/O seleccionado y salta la siguiente instruccin si el bit est en uno. Est operacin funciona en los 32 registros de I/O ms bajos, direcciones 0-31). Banderas afectadas: Ninguna Ejemplo: espera: SBIS $10, 0 ; Saltar la siguiente instruccin ; si el bit 0 en el Puerto D est a uno RJMP espera ; Bit 0 borrado NOP ; Continuar (No hacer nada)

    29

  • SBIW Resta un dato inmediato a un registro de palabra Sintaxis: SBIW Rd+1:Rd,K Operacin: Rd +1: Rd Rd+1 : Rd - K Operandos: Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL o slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar R27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo a R30. Tambin podemos usar el registro de 16 bits compuesto por R25:R24 al que tambin podemos indicar como R24. Operando2: 0 K 63 Descripcin: SBIW resta un valor K a un par de registros y deja el resultado en el par de registros Banderas afectadas: S: Se activa slo si una de las banderas V o N est a uno. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $0000, de lo contrario se borrar. C: Se activa si el valor absoluto de K es mayor que el valor absoluto de Rd, de lo contrario se borrar. Ejemplo: SBIW r24, 1 ; Restar 1 de r25:r24 SBIW r28, 63 ; Restar 63 del puntero Y (r29:r28)

    SBR Pone a uno los bits del registro Sintaxis: SBR Rd, K Operacin: Rd Rd v K Operandos: 16 d 31, 0 K 255 Descripcin: Pone a uno los bits del registro Rd indicados. Realiza la operacin ORI lgica entre el contenido del registro Rd y una constante K, y deja el resultado en el registro destino Rd. Banderas afectadas: V: Se pone a cero. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. Ejemplo: SBR r16, 3 ; Poner a uno los bits 0 y 1 de r16 SBR r17, $F0 ; Poner a uno los 4 MSB en r17

    SBRC Salta si el bit del registro es cero Sintaxis: SBRC Rr, b Operacin: Si Rr(b) = 0 entonces PC PC + 2 ( o 3) Si Rr(b) 0 entonces PC PC + 1 Operandos: 0 r 31, 0 b 7 Descripcin: Examina un bit del registro seleccionado y salta la siguiente instruccin si el bit est borrado (cero). Banderas afectadas: Ninguna Ejemplo: SUB r0, r1 ; Restar r1 de r0 SBRC r0, 7 ; Saltar si el bit 7 en r0 est borrado SUB r0, r1 ; Slo se ejecuta si el bit 7 en r0 es uno NOP ; Continuar (No hacer nada)

    SBRS Salta si el bit del registro es uno Sintaxis: SBRC Rr, b Operacin: Si Rr(b) = 1 entonces PC PC + 2 ( o 3) Si Rr(b) 1 entonces PC PC + 1 Operandos: 0 r 31, 0 b 7 Descripcin: Examina un bit del registro seleccionado y salta la siguiente instruccin si el bit est a uno. Banderas afectadas: Ninguna Ejemplo: SUB r0, r1 ; Restar r1 de r0 SBRS r0, 7 ; Saltar si el bit 7 en r0 est a uno SUB r0, r1 ; Slo se ejecuta si el bit 7 en r0 es cero NOP ; Continuar (No hacer nada)

    30

  • SEC Poner a uno la bandera C Sintaxis: SEC Operacin: C 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de acarreo C del registro de estado SREG. Banderas afectadas: C: Se pone a uno Ejemplo: SEC ; Poner a uno la bandera de acarreo ADC r0, 1 ; r0 = r0 + r1 + 1

    SEH Pone a uno la bandera H Sintaxis: SEH Operacin: H 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de medio acarreo H del registro de estado SREG. Banderas afectadas: H: Se pone a uno Ejemplo: SEH ; Poner a uno la bandera H

    SEI Habilitar las interrupciones globales Sintaxis: SEI Operacin: I 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de habilitacin de interrupciones globales I del registro de estado SREG. Banderas afectadas: I: Se pone a uno Ejemplo: SEI ; Interrupciones habilitadas SLEEP ; Activacin de modo SLEEP, esperando ; alguna interrupcin

    SEN Poner a uno la bandera N Sintaxis: SEN Operacin: N 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de resultado negativo N del registro de estado SREG. Banderas afectadas: N: Se pone a uno Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SEN ; Poner a uno la bandera N

    31

  • SER Carga todos los bits de un registro Sintaxis: SER Rd Operacin: Rd $FF Operandos: 16 d 31 Descripcin: SER Carga directamente $FF al registro seleccionado. Banderas afectadas: Ninguna Ejemplo: CLR r16 ; Borrar r16 SER r17 ; Poner a uno r17 OUT $18, r16 ; Escribir ceros al Puerto B NOP ; Retardo (No hacer nada) OUT PORTB, r17 ; Escribir unos en el Puerto B

    SES Pone a uno la bandera S Sintaxis: SES Operacin: S 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de signo S del registro de estado SREG. Banderas afectadas: S: Se pone a uno Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SES ; Poner a uno la bandera S

    SET Pone a uno la bandera T Sintaxis: SET Operacin: T 1 Operandos: Ninguno Descripcin: Pone a uno la bandera T del registro de estado SREG. Banderas afectadas: T: Se pone a uno Ejemplo: SET ; Poner a uno la bandera T

    SEV Pone a uno la bandera V Sintaxis: SEV Operacin: V 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de desbordamiento V del registro de estado SREG. Banderas afectadas: V: Se pone a uno Ejemplo: ADD r2, r19 ; Sumar r19 a r2 SEV ; Poner a uno la bandera V

    32

  • SEZ Poner a uno la bandera Z Sintaxis: SEZ Operacin: Z 1 Operandos: Ninguno Descripcin: Pone a uno la bandera de resultado cero Z del registro de estado SREG. Banderas afectadas: Z: Se pone a uno Ejemplo: ADD r2, r19 ; Suma r19 a r2 SEZ ; Poner a uno la bandera Z

    SLEEP Activar modo sleep Sintaxis: SLEEP Operacin: Consulta el manual del dispositivo para obtener una informacin detalla acerca de este modo de operacin. Operandos: Ninguno Descripcin: Pone en modo Sleep al microcontrolador Banderas afectadas: Ninguna Ejemplo: MOV r0, r11 ; Copiar r11 en r0 LDI r16, (1

  • ST (STD) Almacenar indirectamente usando Y Sintaxis: LD Y, Rr

    LD Y+, Rr LD -Y, Rr STD Y+q, Rr

    Operacin: (Y) Rr Y: Sin cambios (Y) Rr, Y Y+1 Y: Con post-incremento Y Y1, (Y) Rr Y: Con pre-decremento

    (Y+q) Rr Y: Sin cambios, q: Desplazamiento

    Operandos: 0 r 31, 0 q 63 Descripcin Se almacena un byte de manera indirecta procedente de un registro de trabajo hacia el rea de datos. Para los dispositivos con SRAM, el rea de datos se compone de los registros de: trabajo, I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone slo por los registros de trabajo. La EEPROM tiene un espacio de direccin separado. La direccin de los datos es apuntado por el registro puntero Y (16 bits). Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPY tiene que ser correctamente configurado. El registro puntero Y puede permanecer sin cambios por la operacin, puede post-incrementarse o pre-decrementarse. Estas caractersticas son apropiadas para acceder a matrices, tablas y uso del puntero de pila con el registro puntero Y. Slo el byte bajo del puntero Y se ocupa para dispositivos sin ms de 256 bytes de espacio de datos. Para tales dispositivos, el byte alto del puntero no es usado por esta instruccin y puede usarse para otros propsitos.

    El resultado de estas combinaciones es indefinido: ST Y+, r28 ST Y+, r29 ST -Y, r28 ST -Y, r29 Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r29 ; Borra el byte alto de Y LDI r28, $60 ; Pone el byte bajo de Y a $60 ST Y+, r0 ; Almacena r0 en la localidad $60

    ; (Y post-incrementado) ST Y, R1 ; Almacena r1 en la localidad $61 LDI r28, $63 ; Pone el byte bajo de Y a $63 ST Y, r2 ; Almacena r0 en la localidad $63 ST -Y, r3 ; Almacena r0 en la localidad $62

    ; (Y pre-decrementado) STD Y+2, r4 ; Almacena r4 en la localidad $64

    ST (STD) Almacenar indirectamente usando Z Sintaxis: LD Z, Rr

    LD Z+, Rr LD -Z, Rr STD Z+q, Rr

    Operacin: (Z) Rr Z: Sin cambios (Z) Rr, Z Z+1 Z: Con post-incremento Z Z1, (Z) Rr Z: Con pre-decremento

    (Z+q) Rr Z: Sin cambios, q: Desplazamiento

    Operandos: 0 r 31, 0 q 63 Descripcin Se almacena un byte de manera indirecta procedente de un registro de trabajo hacia el rea de datos. Para los dispositivos con SRAM, el rea de datos se compone de los registros de: trabajo, I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos se compone slo por los registros de trabajo. La EEPROM tiene un espacio de direccin separado. La direccin de los datos es apuntado por el registro puntero Z (16 bits). Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPZ tiene que ser correctamente configurado. El registro puntero Z puede permanecer sin cambios por la operacin, puede post-incrementarse o pre-decrementarse. Estas caractersticas son apropiadas para acceder a matrices, tablas y uso del puntero de pila; Sin embargo, debido a que este puntero puede usarse para las llamadas indirectas a subrutinas y los saltos indirectos, es mejor usar a los punteros X o Y para direccionar al puntero de pila.

    Slo el byte bajo del puntero Z se ocupa para dispositivos sin ms de 256 bytes de espacio de datos. Para tales dispositivos, el byte alto del puntero no es usado por esta instruccin y puede usarse para otros propsitos. El resultado de estas combinaciones es indefinido: ST Z+, r30 ST Z+, r31 ST -Z, r30 ST -Z, r31 Algunas variantes de esta instruccin no son disponibles para todos los modelos de AVRs. Banderas afectadas: Ninguna Ejemplo: CLR r31 ; Borra el byte alto de Z LDI r30, $60 ; Pone el byte bajo de Z a $60 ST Z+, r0 ; Almacena r0 en la localidad $60

    ; (Z post-incrementado) ST Z, r1 ; Almacena r1 en la localidad $61 LDI r30, $63 ; Pone el byte bajo de Z a $63 ST Z, r2 ; Almacena r0 en la localidad $63 ST Z, r3 ; Almacena r0 en la localidad $62

    ; (Z pre-decrementado) STD Z+2, r4 ; Almacena r4 en la localidad $64

    34

  • STS Almacena directamente en SRAM Sintaxis: STS (k), Rr Operacin: (k) Rd Operandos: 0 r 31, 0 k 65535 Descripcin: Almacena un byte de un registro de trabajo en la memoria de datos. Para los dispositivos con SRAM, el espacio de datos est compuesto por los registros de trabajo, memoria de I/O y SRAM interna (y SRAM externa si es aplicable). Para los dispositivos sin SRAM, el espacio de datos est compuesto slo por los registros de trabajo. La EEPROM tiene un espacio de direcciones separado. Debe proporcionarse una direccin de 16-bit. Se limita el acceso de memoria al segmento de datos de 64K bytes. Para acceder a otro segmento de datos en dispositivos con ms de 64K bytes de datos de espacio, el registro I/O RAMPD tiene que ser correctamente configurado. Banderas afectadas: Ninguna Esta instruccin no es disponible para todos los modelos de AVRs. Ejemplo: LDS r2, $FF00 ; Carga r2 con el contenido de la localidad

    ; $FF00 de la memoria de datos ADD r2, r1 ; Sumar r1 a r2 STS $FF00, r2 ; Escribir en SRAM el contenido de r2

    SUB Resta de dos registros sin acarreo Sintaxis: SUB Rd, Rr Operacin: Rd Rd - Rr Operandos: 0 d 31, 0 r 31 Descripcin: Resta dos registros sin considerar la bandera C y deja el resultado en el registro destino Rd. Banderas afectadas: H: Se activa si hay un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar. V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultado est a uno, de lo contrario se borrar. Z: Se activa si el resultado es $00, de lo contrario se borrar. C: Se activa si el valor absoluto del contenido de Rr es mayor que el valor absoluto de Rd, de lo contrario se borrar. Ejemplo: ADD r1, r2 ; Suma r2 a r1 (r1=r1+r2) ADD r28, r28 ; Suma r28 a s mismo (r28=r28+r28)

    SUBI Resta un dato inmediato a un registro Sintaxis: SUBI Rd,Rr Operacin: Rd Rd - K Operandos: 16 d 31, 0 K 255 Descripcin: Resta un registro con una constante y deja el resultado en el registro Rd. Esta instruccin trabaja con los registros R16 a R31 y es ideal para utilizarla con los punteros X, Y y Z. Banderas afectadas: H: Se activa si hay un acarreo negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Se activa si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Se activa si el bit MSB del resultad