Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

15
__________________________________________________________________________ITSP Documento traducido de la hoja de datos del ATmega32 1 Modos de Direccionamiento e Instrucciones del AVR ATmega32. 3.1 INTRODUCCIÓN Todos los modelos de microcontroladores RISC de la familia AVR soportan los modos de direccionamiento para accesar a la memoria de programa (Flash) y a la memoria de datos (SRAM, Archivo de Registros, Memoria de I/O, y la Memoria Extendida de I/O). Para los siguientes modos de direccionamiento OP significa el Código de Operación de la Instrucción. Para generalizar, los términos RAMEND y FLASHEND se usan para representar la memoria más alta de la localidad en los datos y en el programa. 3.2 MODOS DE DIRECCIONAMIENTO. DIRECCIONAMIENTO DIRECTO DE UN SOLO REGISTRO El operando esta contenido en el registro d (Rd). Ejemplos: INC R16 CLR R22

description

Modos de Direccionamiento e Instrucciones del ATmega32 para la materia de Microcontroladores I

Transcript of Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

Page 1: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

1

Modos de Direccionamiento e Instrucciones del AVR ATmega32.

3.1 INTRODUCCIÓN Todos los modelos de microcontroladores RISC de la familia AVR soportan los modos de direccionamiento para accesar a la memoria de programa (Flash) y a la memoria de datos (SRAM, Archivo de Registros, Memoria de I/O, y la Memoria Extendida de I/O). Para los siguientes modos de direccionamiento OP significa el Código de Operación de la Instrucción. Para generalizar, los términos RAMEND y FLASHEND se usan para representar la memoria más alta de la localidad en los datos y en el programa.

3.2 MODOS DE DIRECCIONAMIENTO. DIRECCIONAMIENTO DIRECTO DE UN SOLO REGISTRO El operando esta contenido en el registro d (Rd).

Ejemplos: INC R16 CLR R22

Page 2: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

2

DIRECCIONAMIENTO DIRECTO DE DOS REGISTROS Los operandos están contenidos en el registro r (Rr) y d (Rd). El resultado se almacena en el Registro d (Rd).

Ejemplos: ADD R16,R17 CP R22,R5 MOV R0, R1

DIRECCIONAMIENTO DIRECTO DE I/O La dirección del operando esta contenida en 6 bits de la instrucción de la palabra. A es la dirección del registro destino o fuente.

Ejemplos: IN R16,PIND OUT PORTC,R16

Page 3: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

3

DIRECCIONAMIENTO DIRECTO DE DATOS Una dirección de datos de 16 bits esta contenida en los 16 bits menos significativos de la instrucción de dos bytes. Rd/Rr especifican el registro destino o fuente.

Ejemplos: STS 0x1000,R16

DIRECCIONAMIENTO INDIRECTO DE DATOS CON DESPLAZAMIENTO La dirección del operando es el resultado del contenido del registro Y o Z, sumada a la dirección contenida en 6 bits (q) de la instrucción de la palabra. Rd/Rr especifican el registro destino o fuente.

Ejemplos: LDD R16, Y+0x10 STD Z+0x20, R16

Page 4: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

4

DIRECCIONAMIENTO INDIRECTO DE DATOS La dirección del operando es el contenido del registro X, Y o Z.

Ejemplos: LD R16, Y ST Z, R16

DIRECCIONAMIENTO INDIRECTO DE DATOS CON PRE-DECREMENTO Los registros X, Y o Z se decrementan antes de la operación. La dirección del operando es el contenido decrementado del registro X–, Y– o Z–.

Ejemplos: LD R16, -Z ST -Z, R16

Page 5: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

5

DIRECCIONAMIENTO INDIRECTO DE DATOS CON POST-INCREMENTO Los registros X, Y o Z se incrementan después de la operación. La dirección del operando es el contenido del registro X–, Y– o Z– antes de incrementarse.

Ejemplos: LD R16, Z+ ST Z+, R16

DIRECCIONAMIENTO A MEMORIA DE PROGRAMA La dirección del byte se especifica por el contenido del registro Z. Los 15 bytes más significativos seleccionan la dirección de la palabra. Para LPM, si LSB = 0 se selecciona el byte bajo, de lo contrario si LSB = 1, se selecciona el byte alto.

Ejemplos: LPM

Page 6: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

6

DIRECCIONAMIENTO INDIRECTO A MEMORIA DE PROGRAMA, IJMP e ICALL La ejecución del programa continúa en la dirección contenida en el registro Z.

Ejemplos: IJMP ICALL

DIRECCIONAMIENTO RELATIVO A MEMORIA DE PROGRAMA El programa continua la ejecución en la dirección PC + k + 1. La dirección relativa de k varía de -2047 a 2048.

Ejemplos: RJMP RCALL

Page 7: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

7

3.3 TIPOS DE INSTRUCCIONES. El set de instrucciones del ATmega32 se puede dividir según las especialidades:

� Instrucciones Aritméticas y Lógicas. � Instrucciones de Salto. � Instrucciones de Transferencia de Datos. � Instrucciones Orientadas a Bits. � Instrucciones de Control del MCU.

Instrucciones Aritméticas y Lógicas. En la tabla 3.1, se muestra el menú de las instrucciones Aritméticas y Lógicas del ATmega32. Se indica en la tabla el mnemónico de cómo reconoce el MCU la instrucción, los operandos que utiliza cada instrucción, así como también la operación que realiza y las banderas afectadas en el registro de estado SREG ($3F), además de los ciclos de reloj en que el MCU tarda en ejecutar la instrucción.

Tabla 3.1.

La instrucción ADD, suma dos registros sin la bandera de acarreo y el resultado lo coloca en el registro destino (Rd).

Page 8: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

8

Ejemplo: add r1,r2 ;Suma r2 a r1 (r1=r1+r2)

add r28,r28 ;Se suma el r28 el mismo (r28=r28+r28)

La instrucción EOR, ejecuta la operación lógica X-OR al contenido del registro destino y el registro fuente colocando el resultado en el registro destino (Rd). Ejemplo:

eor r4,r4 ;Se limpia r4

eor r0,r22 ;Se realiza una OR exclusiva entre r0 y r22

La instrucción COM, realiza el complemento a 1 al registro destino (Rd). Mientras que la instrucción NEG, realiza el complemento a 2 al registro destino (Rd). Ejemplo:

sub r11,r0 ;Resta r0 de r11

brpl positivo ;Salta si el resultado es positivo

neg r11 ;Toma el complemento a 2 de r11 positivo: nop ;Destino del salto (no hace nada)

La instrucción CLR, limpia el registro. Mientras que la instrucción SER, coloca directamente $FF en el registro destino. La instrucción MUL, realiza la operación de multiplicación de dos registros de 8 bits sin signo, y el resultado de 16 bits lo coloca en el registro 1, el byte alto, y registro 0, el byte bajo. Ejemplo: mul r5,r4 ;multiplica r5 y r4 números sin signo

movw r4,r0 ;Copia el resultado de nuevo a r5:r4

La instrucción MULS, realiza la misma operación que la instrucción MUL solo que se toma en cuenta el bit de signo. Ejemplo: muls r21,r20 ;multiplica r21 y r20 números con signo

movw r20,r0 ;Copia el resultado de nuevo a r21:r20

Page 9: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

9

Instrucciones de Salto En la tabla 3.2, se muestra el menú de las instrucciones de Salto.

Tabla 3.2. Existen dos tipos de salto: los saltos condicionales, que son aquellos que antes de saltar requieren verificar una de las banderas del Registro de Estado (SREG), mientras que los saltos incondicionales no requieren verificar ninguna bandera, en cuanto el micro los encuentre este saltará a la nueva posición marcada con la etiqueta. La instrucción RJMP, es un salto incondicional. Salto relativo a una dirección ubicada en el rango de PC – 2K + 1 a PC + 2K. La instrucción IJMP, es un salto incondicional. Salto indirecto, ya que brincara a una dirección apuntada por el registro Z de 16 bits.

Page 10: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

10

La instrucción BRCS, es un salto condicional. Verifica la bandera de acarreo, C, y salta en un rango de PC – 63 ≤ destino ≤ PC + 64, si esta bandera está en 1. Este tipo de instrucciones siempre van colocadas después de CP, CPI, SUB o SUBI. La instrucción BRNE, es un salto condicional. Verifica la bandera cero, Z, y salta en un rango de PC – 63 ≤ destino ≤ PC + 64, si esta bandera está en 1. Este tipo de instrucciones siempre van colocadas después de CP, CPI, SUB o SUBI. Ejemplo:

cpi r16,$42 ;Compara r16 con el número 42h

brne error ;Salta si r16 es diferente a 42h

rjmp ok ;Salto incondicional error: add r16,r17 ;Suma r17 a r16

inc r16 ;Incrementa r16 ok: nop ;Destino para rjmp (no hace nada)

Page 11: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

11

Instrucciones de Transferencia de Datos En la tabla 3.3, se muestra el menú de las instrucciones de Transferencia de Datos.

Tabla 3.3 La instrucción MOV, hace una copia de un registro a otro. El registro fuente, Rr, no sufre ningún cambio, mientras que el registro destino, Rd, se carga con una copia de Rr. La instrucción MOVW, hace una copia de un par de registros a otro par de registros. El par de registros fuente, Rr+1:Rr, no sufren ningún cambio, mientras que el par de registros destino, Rd+1:Rd, se cargan con una copia de Rr+1:Rr. La instrucción LD, carga un byte indirecto con o sin desplazamiento de un espacio de memoria a un registro. El espacio de memoria es direccionado por los registros apuntadores de 16 bits X, Y o Z.

Page 12: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

12

La instrucción LDI, carga una constante de 8 bits directamente a los registros de r16 a r31. Ejemplo: clr r27 ;Limpia el byte alto de X ldi r26,$60 ;Coloca el byte bajo de X con el número $60 ld r0,X+ ;Se carga r0 con el valor de la localidad $60 y se increm ld r1,X ;Se carga r1 con el valor de la localidad $61 ldi r26,$63 ;Coloca el byte bajo de X con el número $63 ld r2,X ;Se carga r2 con el valor de la localidad $63 ld r3,-X ;Se decrem X y se carga r3 con el valor de la localidad $62

La instrucción ST, almacena un byte indirecto del registro a un espacio de memoria. El espacio de memoria es direccionado por los registros apuntadores de 16 bits X, Y o Z. La instrucción LPM, carga un byte del registro apuntado por Z a un registro destino. Ejemplo: ldi ZH,high(Tabla_1) ;Inicializa el apuntador Z ldi ZL,low(Tabla_1) lpm r16,Z ;Carga una constante de la memoria de programa

;apuntada por Z (r31:r30)

La instrucción IN, carga datos desde un espacio de I/O (Puertos, Timers, Registros de Configuración, etc.) al registro destino, Rd. Ejemplo: in r25,$16 ;Lee el puerto B cpi r25,4 ;Compara el valor leído con una constante breq exit ;Salta si r25=4

... exit: nop ;Salta al destino (no hace nada)

La instrucción OUT, envía los datos desde un registro fuente, Rr, a un espacio de I/O (Puertos, Timers, Registros de Configuración, etc.). Ejemplo: clr r16 ;Limpia el registro r16 ser r17 ;Coloca unos en r17 out $18,r16 ;Envía ceros al puerto B

nop ;Espera (no hace nada) out $18,r17 ;Envía unos al puerto B

Page 13: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

13

Instrucciones Orientadas a Bits En la tabla 3.4, se muestra el menú de las instrucciones Orientadas a Bits.

Tabla 3.4. La instrucción SBI, pone un uno en el bit del registro especificado. Ejemplo: out $1E,r0 ;Se escribe la dirección de la EEPROM sbi $1C,0 ;Pone a 1 el bit 0 del registro 1C (EECR) in r1,$1D ;Lee el dato de la EEPROM

La instrucción CBI, limpia un bit del registro especificado. Ejemplo: cbi $12,7 ;Limpia el bit 7 del puerto D

La instrucción LSL, recorre todos los bits a la izquierda en un bit. El Bit 0 se limpia. El Bit 7 se carga en la bandera de acarreo, C, del registro SREG. Esta instrucción efectúa multiplicaciones de números con signo y sin signo por 2. Ejemplo: add r0,r4 ;Suma r4 a r0 lsl r0 ;Multiplica r0 por 2

Page 14: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

14

La instrucción LSR, recorre todos los bits a la derecha en un bit. El Bit 7 se limpia. El Bit 0 se carga en la bandera de acarreo, C, del registro SREG. Esta instrucción efectúa divisiones de números sin signo entre 2. Ejemplo: add r0,r4 ;Suma r4 a r0 lsr r0 ;Divide r0 entre 2

La instrucción ROL, recorre todos los bits del registro destino a la izquierda. La bandera del acarreo se pasa al Bit 0 del registro. El Bit 7 se pasa a la bandera del acarreo, C. Esta instrucción combinada con LSL, efectúa multiplicaciones de varios bytes con valores con signo y sin signo por 2. La instrucción SWAP, intercambia los nibbles en un registro, el alto por el bajo y viceversa. La instrucción SEC, pone a uno el bit de la bandera de acarreo, C, en el registro SREG. Mientras que la instrucción CLC, limpia esta bandera.

Page 15: Capitulo3. Modos de Direccionamiento e Instrucciones del ATmega32 (español)

__________________________________________________________________________ITSP

Documento traducido de la hoja de datos del ATmega32

15

Instrucciones de Control del MCU En la tabla 3.5, se muestra el menú de las instrucciones de Control del MCU.

Tabla 3.5. La instrucción NOP, se ejecuta en un solo ciclo de instrucción, y no realiza nada. La instrucción SLEEP, coloca al circuito en modo “dormido” definido por el modo de control del MCU. La instrucción BREAK, se usa para un sistema de debug interno. Cuando se ejecuta esta instrucción el CPU del AVR se coloca en modo de “Stop”. Esto ayuda a accesar a los recursos internos del micro a través de software.