40
MICROCONTROLADORES DE LA SERIE ATMEGA Diagrama de Bloques simplificado

Instrucciones AVR

Embed Size (px)

Citation preview

Page 1: Instrucciones AVR

MICROCONTROLADORES DE LA SERIE ATMEGA Diagrama de Bloques simplificado

Page 2: Instrucciones AVR

Se tomará como referencia el ATMEGA32 Características Generales

- 131 Instrucciones - Reloj de hasta 16M - 32Kbytes de memoria de programa tipo Flash - 2 Kbytes de memoria SRAM - 32 registros de 8 bits de propósito general. - 64 Registros de propósito especifico - 21 fuentes de interrupción cada una con su respectivo vector de interrupciones - 4 puertos de E/S

Características Adicionales

- 1024 bytes de memoria de datos tipo EEPROM - Posibilidad de seleccionar entre diferentes fuentes para la señal de reloj. - Módulos Temporizadores y Contadores - Generador de PWM - Comunicación serial (USART, SPI, I2C). - 2 Comparadores análogos - 8 Entradas con conversión Análogo digital de 10 bits. - Programación on board.

DISTRIBUCIÓN DE MEMORIA Contiene 32 registros de 8 bits de acceso rápido permitiendo ejecutar operaciones en un ciclo de reloj. Ocupan las direcciones de la 00h a la 1Fh. 6 de los 32 registros se unen en pares y pueden emplearse para direccionamiento indirecto de 16 bits, estos son los registros X, Y y Z. La ALU opera directamente con los 32 registros de propósito general

Page 3: Instrucciones AVR

Estos registros son mapeados junto con la memoria de datos SRAM aunque no están implementados físicamente dentro de esta.

Page 4: Instrucciones AVR

Se tiene un espacio de 64 registros de propósito específico que en los AVR se les denomina registros I/O. Estos registros van implementados de 00h a 3Fh, pero se mapean en la memoria de datos de la posición 20h a 5Fh como se muestra en la figura. La memoria de datos SRAM comienza en la posición 60h (96) y finaliza en la posición 85Fh (2143).

Page 5: Instrucciones AVR

Instrucciones de acceso a la memoria de datos

MOV

Ej. MOV R5, R12 Copia el contenido del registro R12 en el registro R5 Ocupa 2 bytes 1 Ciclo de máquina.

MOVW

MOVW R9:R8, R15:R14 Copia la palabra (16 bits) contenida en los registros R15:R14 a la posición R8:R7 Los pares de registros deben ser 1:0, 3:2, 5,4 (La parte alta impar y la baja par). Ocupa 2 bytes 1 Ciclo de máquina.

Page 6: Instrucciones AVR

LDI (LOAD INMEDIATE)

Sólo permite acceder a los 16 últimos registros. LDI R25, $F0 Carga el valor F0h en el registro R25. Ocupa 2 bytes 1 Ciclo de máquina.

LDS (LOAD DIRECT FROM SRAM)

Ocupa 4 bytes 2 Ciclos de máquina. LDS R2, 0x212 Carga el contenido de la posición 212h en el registro R2

STS (STORE DIRECT TO SRAM)

Ocupa 4 bytes 2 Ciclos de máquina. STS 0x120, R5 Almacena el valor del registro R5 en la posición 120h

Page 7: Instrucciones AVR

DIRECCIONAMIENTO INDIRECTO

LD (LOAD INDIRECT)

X => 27:26 LDI R27,0x01 LDI R26,0x23 LD R10,X X = 0123H Almacena el contenido de la posición 123h en el registro R10 X no cambia Con post incremento LDI R27,0x01 LDI R26,0x23 LD R10,X+ X = 0123H Almacena el contenido de la posición 123h en el registro R10 X = 124H Con predecremento LDI R27,0x01 LDI R26,0x23 X = 0123H LD R10,-X X = 0122H Almacena el contenido de la posición 122h en el registro R10 X = 122H

Page 8: Instrucciones AVR

Las mismas operaciones pueden realizarse empleando los registros Y, Z X = 27:26 Y = 29:28 Z = 31:30 LD Rd, Y 2 BYTES, 1 CICLO LD Rd, Y+ 2 BYTES, 1 CICLO LD Rd, -Y 2 BYTES, 2 CICLOS LD Rd, Z LD Rd, Z+ LD Rd, -Z

LDD (Load Indirect with Displacement)

No se implementa con el registro X. LDI R18,0xB9 STS 0x123, R18 (123h) = B9h LDI R29,0x01 LDI R28,0x20 Y= 120h LDD R10, Y+3 R= (123h) Y=120h ALMACENAMIENTO INDIRECTO

Page 9: Instrucciones AVR

Almacena en la posición apuntada por X el dato almacenado en Rr. Idéntico para los registros Y, Z. Para estos dos últimos se tiene adicionalmente el almacenamiento con desplazamiento.

OPERACIONES ESPECIALES

IN - Load an I/O Location to Register

Carga el valor de un registro de propósito específico I/O (Puerto, timer, etc) en el registro de propósito general de destino. Ocupa 2 bytes 1 Ciclos de máquina.

OUT – Store Register to I/O Location

Carga el valor de un registro de propósito general en un registro de propósito específico I/O.

Page 10: Instrucciones AVR

PUSH – Push Register on Stack

Guarda el contenido del registro Rr en la pila Ocupa 2 bytes 2 Ciclos de máquina. POP – Pop Register from Stack

Carga el registro Rd con el byte de la cima de la pila. Los AVR emplean la memoria SRAM para la implementación de la PILA (STACK), ésta se decrementa en forma automática. Es necesario establecer el comienzo de la pila; suele utilizarse la última posición de la memoria SRAM.

ldi r16, 0x5F out 0x3D,r16 ;SPL ldi r16, 0x08 out 0x3E,r16 ;SPH

Page 11: Instrucciones AVR

INSTRUCCIONES ARITMETICAS

REGISTRO DE ESTADO

ADD

Ocupa 2 bytes 1 Ciclos de máquina.

Page 12: Instrucciones AVR

LDI R18,0b00001000 LDI R19,0b00001000 ADD R18,R19 R18= 16 H=1 LDI R18,52 00110100 LDI R19,-20 11101100 ADD R18,R19 1 00100000 R18 = 32 H=1, C=1

ADC (SUMA CON CARRY)

Page 13: Instrucciones AVR

ADIW (Add Immediate to Word)

Sólo es válido para los pares: 25:24, 27:26, 29:28, 31:30 LDI R27, 50 LDI R26, 80

ADIW R27:R26, 30 R27:R26 = 50:110

SUBI – Subtract Immediate

SBCI – Subtract Immediate with Carry

Page 14: Instrucciones AVR

SUB

Ocupa 2 bytes 1 Ciclos de máquina.

SBC

SBIW – Subtract Immediate from Word

MUL – Multiply Unsigned

Page 15: Instrucciones AVR

Rd y Rr contienen nùmeros sin signo. El carry C=1 si el bit 15 del resultado es 1. Ocupa 2 bytes 2 Ciclos de máquina. LDI R21,50 LDI R20,80 MUL R20,R21 R1:R0 = 0F:A0 (4000).

MULS – Multiply Signed

En este caso los registros deben seleccionarse entre los 16 más altos.

MULSU – Multiply Signed with Unsigned

Rd se considera un número signado y Rr no signado.

Page 16: Instrucciones AVR

Para los números fraccionales se emplea el formato 1.7. Los bits 0 a 6 expresan la fracción y el bit 7 la parte entera. Permite representar números entre 0 y 2 para números no signados, y -1 a 1 para signados. El número 1011 0010 Si se interpreta como un entero sin signo sería el 178 Si se interpreta como un entero con signo sería el -122 (178 – 256) Si se interpreta como una fracción sin signo sería 1 + 1/ 4 + 1/8 + 1/64 = 1.390625 Si se interpreta como una fracción con signo sería -0.609375 (1.390625 -2)

Page 17: Instrucciones AVR

LDI r20,0b11101000 1.8125 LDI r18,0b10110000 1.375 FMUL r18, r20 R1:R0 = 3F00 C=1 R1:R0 = 3F00 00111111 = ¼ +1/8 +1/16 +1/32 +1/64 + 1/128 = 0.49218 Se debe tener en cuenta el Carry

INC – Incremento

DEC – Decremento

NEG – Two’s Complement

Page 18: Instrucciones AVR

CLR – Clear Register

SER – Set all Bits in Register

OPERACIONES LÓGICAS

AND – Logical AND

ANDI – Logical AND with Immediate

Page 19: Instrucciones AVR

OR – Logical OR

ORI – Logical OR with Immediate

EOR – Exclusive OR

COM – One’s Complement

Page 20: Instrucciones AVR

INSTRUCCIONES ENFOCADAS A LA MANIPULACIÓN DE BYTES CLR – Clear Register

Coloca todos los bits en 0. En el registro de estado S=0, V=0, N=0, Z=1 SER – Set all Bits in Register

Coloca todos los bits en 1. - No altera el registro de estado. - Sólo se emplea con los últimos 16 registros.

LSL – Logical Shift Left

Page 21: Instrucciones AVR

LSR – Logical Shift Right

ROL – Rotate Left trough Carry

ROR – Rotate Right through Carry

Page 22: Instrucciones AVR

ASR – Arithmetic Shift Right

El bit 7 permanece constante, mientras los demás bits se desplazan a la derecha pasando por el carry. No hay instrucción ASL.

SWAP – Swap Nibbles

Intercambia la parte alta (4 bits) y la parte baja del byte entre sí.

TST – Test for Zero or Minus

Actualiza los bits N y Z del registro de estado sin alterar el valor del registro.

Page 23: Instrucciones AVR

INSTRUCCIONES ENFOCADAS A LA MANIPULACIÓN DE BITS

CBR – Clear Bits in Register

Realiza una ADN entre el contenido del registro R y el complemento de la máscara K. CBR R18, 4 Coloca el bit de la posición 2 (100) en 0 sin alterar los bits restantes. CBR R18, 3 Coloca los bits de la posición 0 y 1 (011) en 0 sin alterar los bits restantes.

SBR – Set Bits in Register

Realiza una OR con la máscara.

SBI – Set Bit in I/O Register

Establece el bit de la posición b del registro A. Esta instrucción sólo se puede emplear con los primeros 32 registros de propósito específico I/O. No se emplea con los registro de propósito general.

Page 24: Instrucciones AVR

BST – Bit Store from Bit in Register to T Flag in SREG

Almacena el bit de la posición b del registro Rd en la bandera T del registro de estado.

BLD – Bit Load from the T Flag in SREG to a Bit in Register

Copia el valor de la bandera T del registro de estado en la posición b del registro Rd.

BSET – Bit Set in SREG

Coloca en 1 el bit de la posición s en el registro de estado SREG.

BSET 5 Establece el flag H en 1

Page 25: Instrucciones AVR

BCLR – Bit Clear in SREG

CLC – Clear Carry Flag SEC – Set Carry Flag

CLZ – Clear Zero Flag SEZ – Set Zero Flag

Z = 1

CLN – Clear Negative Flag SEN – Set Negative Flag

N = 1

Page 26: Instrucciones AVR

CLV – Clear Overflow Flag SEV – Set Overflow Flag

V = 1

CLS – Clear Signed Flag SES – Set Signed Flag

S = 1

CLH – Clear Half Carry Flag SEH – Set Half Carry Flag

H = 1

CLT – Clear T Flag SET – Set T Flag

T = 1

Page 27: Instrucciones AVR

CLI – Clear Global Interrupt Flag SEI – Set Global Interrupt Flag

I = 1

INSTRUCCIONES DE SALTO

RJMP – Relative Jump

Permite hacer saltos con desplazamientos de 2k por encima o por debajo de la dirección actual. RJMP 0x700 Salta a la dirección 700h Ocupa 2 bytes 2 Ciclos de máquina.

JMP – Jump

Ocupa 4 bytes 3 Ciclos de máquina. Permite direccional hasta 4M de direcciones.

Page 28: Instrucciones AVR

IJMP – Indirect Jump

Salta a la dirección indicada por el registro de 16 bits Z. (64k posiciones). Ocupa 2 bytes 2 Ciclos de máquina.

CP – Compare

Se utiliza junto con instrucciones de salto Los registros no cambian

CPC – Compare with Carry

Page 29: Instrucciones AVR

CPI – Compare with Immediate

BREQ – Branch if Equal

Revisa el flan Z para determinar si los operandos son iguales después de alguna operación como CP o SUB. El salto es de máximo 63 posiciones. Ocupa 2 bytes 1 Ciclo de máquina si la condición es falsa 2 Ciclos de máquina si es verdadera.

BRNE – Branch if Not Equal

Page 30: Instrucciones AVR

BRSH – Branch if Same or Higher (Unsigned)

Ocupa 2 bytes 1 Ciclo de máquina si la condición es falsa 2 Ciclos de máquina si es verdadera.

BRGE – Branch if Greater or Equal (Signed)

Ocupa 2 bytes 1 Ciclo de máquina si la condición es falsa 2 Ciclos de máquina si es verdadera.

BRLO – Branch if Lower (Unsigned)

BRLT – Branch if Less Than (Signed)

Page 31: Instrucciones AVR

BRMI – Branch if Minus

Salta si el resultado es negativo.

BRPL – Branch if Plus

Salta si el resultado es positivo.

CPSE – Compare Skip if Equal

Si Rd=Rr salta la siguiente instrucción

SBRC – Skip if Bit in Register is Cleared

Si el bit b del registro Rr es 0 salta la siguiente instrucción.

Page 32: Instrucciones AVR

SBRS – Skip if Bit in Register is Set

Si el bit b del registro Rr es 1 salta la siguiente instrucción.

SBIC – Skip if Bit in I/O Register is Cleared

SBIS – Skip if Bit in I/O Register is Set

Igual que las instrucciones anteriores pero aplica sobre los primeros 32 registros I/O de propósito específico.

BRBC – Branch if Bit in SREG is Cleared

Si la bandera s del registro de estado es 0 salta a k.

Page 33: Instrucciones AVR

BRBS – Branch if Bit in SREG is Set

Si la bandera s del registro de estado es 1 salta a k.

BRCC – Branch if Carry Cleared

Salta si carry es 0 Ocupa 2 bytes 1 Ciclo de máquina si la condición es falsa 2 Ciclos de máquina si es verdadera.

BRCS – Branch if Carry Set

Page 34: Instrucciones AVR

BRHC – Branch if Half Carry Flag is Cleared

BRHS – Branch if Half Carry Flag is Set

BRTC – Branch if the T Flag is Cleared

BRTS – Branch if the T Flag is Set

Page 35: Instrucciones AVR

BRVC – Branch if Overflow Cleared

BRVS – Branch if Overflow Set

BRIE – Branch if Global Interrupt is Enabled

BRID – Branch if Global Interrupt is Disabled

Page 36: Instrucciones AVR

SUBRUTINAS

RCALL – Relative Call to Subroutine

La subrutina debe estar almacenada en una posición cercana al punto de invocación. Ocupa 2 bytes 3 Ciclos de máquina

CALL – Long Call to a Subroutine

Ocupa 4 bytes 4 Ciclos de máquina

ICALL – Indirect Call to Subroutine

Ocupa 2 bytes 3 Ciclos de máquina

Page 37: Instrucciones AVR

RET – Return from Subroutine

Ocupa 2 bytes 4 Ciclos de máquina

RETI – Return from Interrupt

Page 38: Instrucciones AVR

CONJUNTO DE INSTRUCCIONES

Page 39: Instrucciones AVR
Page 40: Instrucciones AVR