Está en la página 1de 43

22/05/12

Tema 5 Ejemplo de un computador real: ATmegaX8PA


8-bit Microcontroller

EdC-ISW-T5-AVR-2012-v2.0

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
2

22/05/12

ndice (ii)
8. Reloj del sistema 9. Circuito de Reset 10.Interrupciones 11. Puertos de E/S 12.Temporizadores 13.Herramientas de programacin y simulacin

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
4

22/05/12

Qu es un microcontrolador?

Es un chip (Circuito integrado C.I.) que contiene una CPU sencilla, unidad de reloj, memoria, y puertos de E/S (timers, I/ O ports, puertos de comunicaciones serie,..).

Arquitectura interna

La mayora de los microcontroladores comerciales tienen arquitectura Harvard (Memoria de programa y memoria de datos separadas)

22/05/12

Principales familias de controladores

PICmicro AVR Freescale


(franquicia de Motorola)

Aplicaciones controladores

22/05/12

Aplicaciones controladores

Aplicaciones controladores

22/05/12

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
11

Familia AVR ATmega


AVR ATmega es una familia de microcontroladores (MCU o
C) fabricado por Atmel

AVR

es una arquitectura de CPUs que integra ATMEL en algunos de sus microcontroladores

Un microcontrolador es una pequea computadora empotrada

en un C.I. que contiene: una CPU sencilla, unidad de reloj, memoria, y puertos de E/S (timers, IO ports, USARTs,..).

Estudiaremos el ATmegaX8PA

22/05/12

Familia AVR ATmega


Descripcin General

Diversos perifricos Encapsulados: PDIP, TQFP, MLF

Versiones bajo consumo:



0-10 Mhz< @(2.7 -5.5V) 0-4 Mhz< @(1.8 -5.5V)

PDIP

TQFP

MLF

Familia AVR ATmega


Dispositivos

ATmegaX8PA
Dispositivos Flash (Programa) 4K Bytes 8K Bytes 16K Bytes 32K Bytes SRAM (datos) 256 Bytes 512 Bytes 512 Bytes 1K Bytes EEPROM (datos) 512 Bytes 1K Bytes 1K Bytes 2K Bytes Tamao vector interrupcin 1 instruccin 1 instruccin 2 instrucciones 2 instrucciones

ATmega48PA ATmega88PA ATmega168PA ATmega328P

22/05/12

ATmegaX8PA
Carctersticas CPU AVR
Arquitectura RISC. 8 bits Frecuencia de reloj de hasta 20 Mhz @ (4.5-5.5V) Hasta 20 Millones de instrucciones por segundo (MIPS) (para frecuencia de operacin del reloj del sistema XTAL a 20Mhz) Memoria de Programas:
Flash EEPROM X=4,8,16,32 Kb ATmegaX8pa

Memoria de Datos:
Data SRAM 512/1K/2K bytes Data EEPROM 256/512 bytes

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
16

22/05/12

Diagrama de bloques simplificado del microcontrolador ATmega

www.cursomicros.com

Arquitectura interna ATmegaX8PA

22/05/12

Arquitectura interna
Memorias Generacin de reloj CPU

Depuracin Puertos E/S

Arquitectura interna
AVR-CPU Memorias (Flash, SRAM) Generacin de reloj Depuracin Circuito de Reset Puertos de E/S: Conv A/D, Analog Comp. Ports B,C,D USART, TWI, SPI Timers

10

22/05/12

Arquitectura interna CPU AVR


Arquitectura Harvard Pipeline de 1 nivel:
(Execute y pre-fetch simultneos)

Bus de datos de 8 bits Banco de 32 Registros Arquitectura RISC Load/Store ALU con multiplicador

Registros de propsito general (CPU AVR)


Ocupan las 32 primeras
posiciones de la memoria

Instrucciones con datos de X, Y, Z: registros de

direccionamiento inmediato slo pueden usar los 16 superiores (R16 a R31) 16 bits punteros para modos de direccionamiento indirecto

X Y Z

11

22/05/12

Registros X, Y, Z

Se comportan como registros de 16 bits cuando


se usan (direccionamientos indirectos)

Registro de estado (SR)


- - - - - - - - Bit C (Carry) Bit Z (Zero) . Bit N (Negative). Bit V (oVerflow en Ca2) Bit S (Signo: S = N V) Bit H (Half Carry) Bit T. Bit I (Interrupcin).

12

22/05/12

Registro de estado (cont.)


Ubicado en el rea de entrada/salida de la memoria de
datos.

Banderines (flags) que reflejan el resultado de la

ejecucin de algunas instrucciones (principalmente aritmticas, lgicas, etc.) - Bit C (Carry) - Bit Z (Zero) . Se pone a 1 para resultado cero, 0 en otro caso. - Bit N (Negative). Bit 7 del resultado.

Registro de estado (cont.)


- Bit V (oVerflow en Ca2) Si A,B son operandos y R resultado, este bit se calcula como:
l l

V = A7 B7 R7' + A7' B7' R7 en suma V = A7 B7' R7' + A7' B7 R7 en resta

- Bit S (Signo) Refleja el signo correcto del resultado en operaciones en Ca2.


l

S=NV

13

22/05/12

Registro de estado (cont.)


- Bit H (Half Carry) Bit de acarreo de la etapa 3 de la ALU (semiacarreo). - Bit T. Bit de propsito general, para instrucciones BLD y BST - Bit I (Interrupcin). Para permitir (I=1) o deshabilitar (I=0) interrupciones

Puntero de Pila (Stack Pointer)


Se encuentra en la regin de memoria asignada a E/S. Apunta al rea de pila (Valor inicial RAMEND, ltima direccin de la RAM).
SP apunta a la primera posicin libre de la pila Las instrucciones de llamada a subrutina o de interrupcin (RCALL, etc), almacenan la direccin de retorno en la pila, por lo que SP se decrementa en 2 unidades (la direcciones son de 16 bits) Las instrucciones de retorno de subrutina (RET) o de interrupcin (RETI), recuperan la direccin de 16 bits de la pila, por lo que

incrementan el SP en 2 unidades.

14

22/05/12

Puntero de Pila (Stack Pointer)


0

PUSH Ri
SP SP-1

POP Ri
Ri MEM(SP)

MEM(SP) Ri SP SP+1

RAM

SPH

SPL

STACK POINTER

PILA

LIFO
RAMEND

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
30

15

22/05/12

Organizacin de la memoria de Programa (Flash)


0x0000 0x0000

Seccin de Aplicacin
0x07FF

Seccin de Aplicacin

16 bits Atmega48PA 4Kbytes (2Kx16 bits FLASH)


Seccin de arranque (Boot Loader) 0x0FFF/0x1FFF/0x3FFF

16 bits Atmega88PA, ATmega168PA, ATmega328PA 8Kbytes/16Kbytes/32Kbytes (4K/8K/16K x16 bits FLASH)

Organizacin del mapa de memoria de Datos

RAMEND

0x1FF/0x1FF/0x3FF 8 bits ATmega88PA, ATmega168PA, ATmega328PA 512bytes/512bytes/1Kbytes (4K/8K/16K x16 bits FLASH)

16

22/05/12

Organizacin del mapa de memoria de Datos


32 Registros de propsito general con todos los Registros de E/S
- 64 I/O Registers (instrucciones IN, OUT, modo directo e indirecto) - 160 Ext Registers (modos directo e indirecto)

modos de direccionamiento (inmediato slo de R16 a R31, indexado slo X,Y,Z)

SRAM (modos directo e indirecto)

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento:
5.1 Direccionamiento de la memoria de datos 5.2 Direccionamiento de la memoria de programa

34

17

22/05/12

5.1 Modos de direccionamiento de la memoria de Datos


Registro directo Directo Indirectos
Indirecto Indirecto con predecremento Indirecto con postincremento Indirecto con desplazamiento

Inmediato

Direccionamiento de Registro Directo (memoria de Datos)

La instruccin define el registro o registros cuyo


- Ejemplos: COM R4

contenido se ver afectado por la propia instruccin.


MOV R1,R2

; Ej. Calcula el Ca1 de R4 COM R4 ;R4 $FF-R4

; Ej. Transfiere R2 a R1 MOV R1,R2 ;R1 R2

18

22/05/12

Direccionamiento de E/S Directo (memoria de Datos, zona E/S)

La instruccin define el Puerto de E/S


- Ejemplos: IN R1, 56 ; OUT 21, R10

(0 a 64) y el Registro de propsito general afectados (Slo instrucciones IN y OUT).

; Ejemplos: IN R1,56 ;R1 PORT 56 OUT 21,R10 ;PORT21 R10

Direccionamiento Directo (Straight) (memoria de Datos)

La instruccin contiene la direccin de memoria Instrucciones LDS, STS.


31 OP Rd o Rf
OP

(16bits) del operando , as como un campo de 5 bits (Rd/Rf) que identifica el registro destino o fuente.
Memoria de Datos 20 16 24

rrrr

0000

Direccin del Dato

; Ejemplos: LDS R23,$1D0 ; R23 ($1D0) STS $1D2,R1 ; ($1D2) R1

19

22/05/12

Direccionamiento Indirecto (memoria de Datos)

La instruccin referencia al registro X,Y o Z que


contiene la direccin del operando.
; Ejemplos: LD R1,X ;R1 MEMDAT(X) ST Z,R10 ;MEMDAT(Z) R10

OJO: en el CS2010 la sintaxis era LD R1,(X) ST (Z),R10 En CS2010 se poda usar cualquier registro Aqu solo X, Y Z

Los Registros X, Y Z actan como punteros al dato en memoria

Direccionamiento Indirecto con postincremento (memoria de Datos)

La instruccin referencia al registro X,Y o Z que


; Ejemplos: LD RO,X+ ; R0 MEMDAT(X), XX+1 ST Z+,R1 ; MEMDAT(Z) R1, ZZ+1

contiene la direccin del operando, que despus se incrementa en una unidad.

Es muy til para recorrer los datos de una tabla. Despus de direccionar un dato, el puntero (X, Y Z) apunta al Dato siguiente de la tabla

20

22/05/12

Direccionamiento Indirecto con predecremento (memoria de Datos)

La instruccin referencia al registro X,Y o Z que tras


decrementarse en una unidad, contiene la direccin del operando.
; Ejemplos: LD RO,-X ; XX-1, R0 MEMDAT(X), ST -Z,R1 ; ZZ-1, MEMDAT(Z)R1

Es muy til para recorrer los datos de una tabla en orden inverso. Antes de direccionar un dato, el puntero (X, Y Z) se decrementa

Direccionamiento Indirecto con desplazamiento (memoria de Datos)

La direccin del dato se obtiene sumando el

desplazamiento q (5 bits: 0<q<64) a la direccin contenida en el registro Y o Z. El resultado no se actualiza en el registro (Y o Z).
; Ejemplos: LDD R0,Y+10 STD Z+9,r1 ; R0 MEMDAT(Y+10) ; MEMDAT(Z+9)R1

21

22/05/12

Direccionamiento Inmediato (memoria de Datos)

El operando es suministrado en la propia instruccin

En modo inmediato slo pueden usarse

del R16 al R31


; Ejemplos: LDI R16,255 ; R16 255 ANDI R25,0X10 ; R25 R25 & 0x10

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento:
5.1 Direccionamiento de la memoria de datos 5.2. Direccionamiento de la memoria de programa

44

22

22/05/12

5.2 Modos de Direccionamiento para la memoria de programa

Constantes de programa (fuera del alcance de esta


asignatura).

Instrucciones
Directo Indirecto Relativo

Indirecto Indirecto con postincremento

Direccionamiento Directo de Instrucciones (memoria de programa)

El programa continua su ejecucin en la direccin de


memoria de programa indicada en la instruccin JMP y CALL
; Llamada a la subrutina ; almacenada en 0x500 ; retorna con un RET CALL 0x500

Instrucciones:

; Salto a la direccin 0x3F0: JMP 0x3F0 ; PC 0x3F0

23

22/05/12

Direccionamiento Indirecto de Instrucciones (memoria de programa)

El programa continua su ejecucin en la direccin de


memoria almacenada en el Registro Z IJMP y ICALL
; Llamada a la subrutina ; almacenada en Reg. Z ; retorna con un RET ICALL

Instrucciones:

; Salto a la direccin ; almacenada en Reg. Z IJMP ; PCZ

Direccionamiento Relativo de Instrucciones (memoria de programa)

El programa continua su ejecucin en la direccin de


memoria PC PC+K+1 (k [-2048, 2047] RJMP (Relative Jump) RCALL (Relative Call) BRXX (Branch if condition XX)

Instrucciones:

24

22/05/12

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
49

6. Juego de Instrucciones

Instrucciones de transferencia de datos Instrucciones aritmtico-lgicas Instrucciones de salto Instrucciones de manejo de bits Instrucciones de control del sistema

25

22/05/12

Juego de Instrucciones AVR

Instrucciones sin operandos Mnemnico Instrucciones con un operando Mnemnico opfuente/opdestino


Instrucciones con dos operandos

Mnemnico opdestino,opfuente

Para cada instruccin se presentar la siguiente


informacin
Mnemnico Operandos Descripcin Rango Operacin Banderines Ciclos de reloj

Instrucciones de Transferencia de Datos


MOV MOVW LDI LDS LD

Rd,Rr Rd,Rr Rd,k Rd,k Rd,X Rd,X+ Rd,-X Rd,Y Rd,Y+ Rd,-Y Rd,Z Rd,Z+ Rd,-Z Rd,Y+q Rd,Z+q

Copiar registro Copiar registro W Cargar dato inmediato Cargar dato desde la memoria Carga el registro con un dato indirecto

d,r[0,31] d,r[0,30] d[16,31] k[0,255] d[0,31] k<64K d[0,31]

RdRr Rd+1:Rd Rr+1:Rr Rd k Rd (k) Rd (X) Rd (X);XX+1 XX-1-,Rd (X) Rd (Y) Rd (Y);YY+1 YY-1;Rd (Y) Rd (Z) Rd (Z);ZZ+1 ZZ-1;Rd (Z) Rd (Y+q) Rd (Z+q)

Ninguno Ninguno Ninguno Ninguno

1 1 1 2

Ninguno

2 Ninguno 2

LDD

Carga el registro con un dato indirecto con desplazamiento

d[0,31] q[0,63]

26

22/05/12

Instrucciones de Transferencia de Datos (ii)


S TS ST

K, Rr X,Rr X+,Rr -X,Rr Y,Rr Y+,Rr -Y,Rr Z,Rr Z+,Rr -Z,Rr Y+q,Rr Z+q,Rr Rd,Z Rd,Z+

Almacenar dato en memoria Almacenar registro en memoria

r[0,31] K[0,64k] r[0,31]

(K) Rr (X) Rr (X) Rr;XX+1 XX-1-, (X)Rr (Y)Rr (Y) Rr;YY+1 YY-1; (Y) Rr (Z) Rr (Z)Rr;ZZ+1 ZZ-1; (Z) Rr (Y+q)Rr (Z+q) Rr R0 (Z) Rd (Z) Rd (Z); ZZ+1 (Z) R1:R0

Ninguno 2 Ninguno

2 Ninguno 2 Ninguno 3 Ninguno -

S TD

LPM

Almacenar registro en memoria con indirecto con desplazamiento Carga memoria de programa Almacenar en memoria de programa

r[0,31]

S PM

Instrucciones de Transferencia de Datos (iii)


IN OUT PUS H POP

Rd,P P,Rr Rr Rd

Entrada del puerto Salida hacia el puerto Empujar en pila Sacar de pila

d[0,31] P[0,63] r[0,31] P[0,63] r[0,31] d[0,31]

RdP P Rr STACKRr Rd STACK

Ninguno 1 Ninguno Ninguno Ninguno 1 2 2

27

22/05/12

Instrucciones de Transferencia de Datos


MOV R1,R2 IN R1,$10
32 registros (R0:R31) 64 registros E/S 160 registros E/S
$00

OUT 12,R3

LD R1,Z LDD R30,Y+2 LDS R23,$10

SRAM

ST Z,R1 STD Y+1,R30 STS $DE,R4

RAMEND

Instrucciones de Transferencia de Datos


Puerto E/S
IN Rd,P OUT P,Rf

OUT
Registro Rd
LD R1,X LDD R1,Y+2 LDS Rd,dir MOV Rd,Rf

IN MOVe
SRAM Registro Rf
ST X,Rf STD Y+d,Rf STS dir,Rf

LoaD

STore

28

22/05/12

Instrucciones Aritmtico-Lgicas
ADD ADC ADIW SUB SUBI SBC SBCI SBIW AND ANDI OR ORI EOR COM NEG INC DEC Rd,Rr Rd,Rr Rd,K Rd,Rr Rd,K Rd,Rr Rd,K Rd,K Rd,Rr Rd,K Rd,Rr Rd,K Rd,Rr Rd Rd Rd Rd Suma sin carry Suma con carry Suma inmediato con palabra Resta sin carry Resta inmediato Resta con carry Resta inmediato con carry Resta inmediato con palabra And lgica And lgica con dato inmediato Or lgica Or lgica con dato inmediato Exclusive or Complemento a 1 Complemento a 2 Incrementa Decrementa d,r[0,31] d,r[0,31] d[24,26,28,30] K[0,63] d,r[0,31] d[16,31] K[0,255] d,r[0,31] d[16,31] K[0,255] d[24,26,28,30] K[0,63] d,r[0,31] d[16,31] K[0,255] d,r[0,31] d[16,31] K[0,255] d,r[0,31] d,r[0,31] d,r[0,31] d,r[0,31] d,r[0,31] Rd Rd+Rr Rd Rd+Rr+C Rd+1:Rd Rd+1:Rd + K RdRd-Rr RdRd-K RdRd-Rr-C RdRd-K-C Rd+1:Rd Rd+1:Rd - K RdRdRr RdRdK RdRdRr RdRdK RdRdRr Rd$FF-Rd Rd$00-Rd RdRd+1 RdRd-1 Z,N,V,C,H Z,N,V,C,H Z,N,V,C Z,N,V,C,H Z,N,V,C,H Z,N,V,C,H Z,N,V,C,H Z,N,V,C Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V,C Z,N,V,C Z,N,V Z,N,V 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1

Instrucciones Aritmtico-Lgicas (ii)

CLR SER CP CPC CPI MUL MULS MULSU

Rd Rd Rd,Rr Rd,Rr Rd,K Rd,Rr Rd,Rr Rd,Rr

Poner a cero Poner todo a 1 Compara Compara con carry Compara inmediato Multiplica sin signo Multiplica con signo Multiplica signo con sin signo

d,r[0,31] d,r[0,31] d,r[0,31] d,r[0,31] d[16,31] K[0,255] d,r[0,31] d,r[0,31] d,r[0,31]

Rd0 Rd$FF Rd-Rr Rd-Rr-C Rd-K R1:R0 Rd x Rr R1:R0 Rd x Rr R1:R0 Rd x Rr (Rd signed Rr unsigned)

Z,N,V Z,N,V Z,N,V,C,H Z,N,V,C,H Z,N,V,C,H Z,C Z,C Z,C

1 1 1 1 1 2 2 2

29

22/05/12

Instrucciones de salto
Permiten saltara una instruccin en otra zona de memoria de cdigo (en lugar de ejecutar la siguiente instruccin) 4 tipos de instrucciones de salto JUMP: salto incondicional BRANCH : salto corto si se cumple una condicin SKIP : sltate (esquiva) la siguiente instruccin si se cumple la condicin CALL/RET: llamada/retorno de subrutina

Salto incondicional directo JMP dir


El programa sigue ejecutndose a partir de la direccin suministrada en la propia instruccin PC dir
;Ejemplo de salto incondicional directo ;ponemos una etiqueta y el ensamblador calcula ;la direccin del salto mov r1,r0 jmp farplc . . . . ;salto incondicional

farplc: nop

30

22/05/12

Salto incondicional relativo RJMP k


La direccin de salto se obtiene sumando una constante con signo (k) al PC PC PC+k+1

-63<k<64

;Ejemplo de salto incondicional relativo ;ponemos una etiqueta y el ensamblador calcula ;la constante k ;permite saltos cortos de +/- 2K ok: mov r1,r0 rjmp ok ;salto incondicional relativo . . . . nop

Salto incondicional indirecto IJMP


La direccin de salto est en el registro Z PC Z (esto es: PC r31:r30)

;Ejemplo de salto incondicional indirecto ; . . . . ldi r30,0 ldi r31,$8 ijmp . . . . ;parte baja de la dir. de salto ;parte alta de la dir. de salto ;salto a la direccin $800

31

22/05/12

Salto condicional relativo BRxx k


Si se cumple una condicin xx, la direccin de salto se obtiene sumando una constante con signo (k) al PC: PC PC+k+1 La condicin de salto xx comprueba el valor de determinados bits del STATUS REGISTER Ejemplos: BREQ: Branch if EQual (Z=1) BRNE: Branch if Not Equal (Z=0) BRCS: Branch if Carry Set (CY=1) BRCC: Branch if Carry Clear (CY=0) BRSH: Branch if Same or Higher (CY=0)

Ejemplo de salto condicional relativo BRNE Branch if Not Equal(Z=0)


Si Z = 0 entonces PC PC+k+1 en otro caso PC PC+1 -63<k<64

;Ejemplo de salto condicional relativo ;para realizar un bucle eor r27,r27 . . . inc r27 cpi r27,5 brne bucle nop ; incrementa r27 ; compara r27 con 5 ; salta si r27<>5 ; borra r27 con una exor buclue: . . .

32

22/05/12

SKIP condicional SBxx Rr,b


Esquiva la siguiente instruccin si el bit de un registro cumple una condicin Ejemplos: SBRC: Skip if Bit in Register is Clear SBRS: Skip if Bit in Register is Set SBIC: Skip if Bit in I/O Port is Clear SBIS: Skip if Bit in I/O Port is Set

Ejemplo SKIP condicional SBRC Rr,b


. . . sub r0,r1

; r0 r0-r1

sbrc r0,7 ;esquiva si el bit 7 de r0 est a 0 sub r0,r1 ;slo se ejecuta si el bit 7 de r0 est a 1 nop

33

22/05/12

Llamada a subrutina directo CALL dir (Long Call to Subrutine)


Llama a una subrutina almacenada en cualquier posicin de la memoria de programa. PC dir La direccin de retorno se guarda en la pila PILA PC+2 SP SP-2 (2bytes) La subrutina debe terminar con una instruccin RET

Ejemplo de llamada a subrutina directo CALL dir (Long Call to Subrutine)


. . . mov r16,r0 call check ; llamada a subrutina check nop . . . ; continua

; nosotros ponemos la etiqueta check y el ensamblador ; calcula la direccin check: cpi r16,$42 breq error ret . . . ;bluque infinito

Error: rjmp error

34

22/05/12

Llamada a subrutina relativo RCALL k (Relative Call to Subrutine)


Llamada a una subrutina ubicada en una posicin relativa a la direccin de esa instruccin PC PC+k+1
-2047 < k < +2048

La direccin de retorno se guarda en la pila PILA PC+1 SP SP-2 (2bytes) La subrutina debe terminar con una instruccin RET

Ejemplo de llamada a subrutina relativo RCALL k (Relative Call to Subrutine)


. . . rcall routine ; llamada a subrutina routine . . .

; nosotros ponemos la etiqueta routine y el ensamblador ; calcula la direccin routine: push r14 ;salva r14 en la pila ... pop r14 ret . . . ;restaura r14

35

22/05/12

Resumen de Instrucciones de salto

RJMP JMP (1) IJMP RCALL CALL ICALL RET RETI CPSE SBRC SBRS
(1)

Etiqueta Etiqueta Etiqueta Etiqueta

Salto relativo Salto Salto indirecto Llamada a subrutina relativa Llamada a subrutina Llamada a subrutina indirecta Regreso de subrutina Regreso de interrup. Compara, esquiva si iguales Esquiva si el bit est a cero Esquiva si el bit est a uno

-2k< Etiqueta <2k 0<Etiqueta<4M -2k< Etiqueta <2k 0<Etiqueta<4M

Rd,Rr Rr,b Rr,b

d,r[0,31] r[0,31] b[0,7] r[0,31] b[0,7]

PCPC+ Etiqueta +1 PC Etiqueta PC (Z) STACK PC PCPC+ Etiqueta +1 STACK PC PC Etiqueta STACK PC PC (Z) PC STACK PC STACK Si Rd=Rr PC PC+2 ( 3) Si (Rd(b)=0) PC PC+2 ( 3) Si (Rd(b)=1) PC PC+2 ( 3)

Ninguno Ninguno Ninguno Ninguno Ninguno

2 2 3 3 3

Ninguno Ninguno I Ninguno Ninguno 01/02/03 Ninguno 01/02/03 4 4 4 01/02/03

(1) Slo disponibles para ATMEGA168PA y ATMEGA328PA

Instrucciones de salto (ii)

SBIC SBIS BREQ BRNE BRCS BRCC BRSH

P,b

Esquiva si el bit del puerto est a 0 P,b Esquiva si el bit del puerto est a1 Etiqueta Salta si iguales Etiqueta Salta si distintos Etiqueta Salta si C est a 1 Etiqueta Salta si Cest a 0 Etiqueta Salta si igual o mayor

P[0,31] b[0,7] P[0,31] b[0,7] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63]

Si (I/o(P,b)=0) PC PC+2 ( 3) Si (I/O(P,b)=1) PC PC+2 ( 3) Si (Z=1) PC PC+ Etiqueta Si (Z=0) PC PC+ Etiqueta Si (C=1) PC PC+ Etiqueta Si (C=0) PC PC+ Etiqueta Si (C=1) PC PC+ Etiqueta

Ninguno Ninguno Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1

1o2o 3 1o2o 3 1o2 1o2 1o2 1o2 1o2

36

22/05/12

Instrucciones de salto (iii)


BRLO BRMI BRPL BRHS BRHC BRTS BRTC BRVS BRVC BRIE BRID Etiqueta Salta si menor Etiqueta Salta si negativo Etiqueta Salta si positivo Etiqueta Salta si H est a 1 Etiqueta Salta si H est a 0 Etiqueta Salta si T est a 1 Etiqueta Salta si T est a 0 Etiqueta Salta si V est a 1 Etiqueta Salta si V est a 0 Etiqueta Salta si I est a 1 Etiqueta Salta si I est a 0 Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Etiqueta [-64,63] Si (C=0) PC PC+ Etiqueta Si (N=1) PC PC+ Etiqueta Si (N=0) PC PC+ Etiqueta Si (H=1) PC PC+ Etiqueta Si (H=0) PC PC+ Etiqueta Si (T=1) PC PC+ Etiqueta Si (T=0) PC PC+ Etiqueta Si (V=1) PC PC+ Etiqueta Si (V=0) PC PC+ Etiqueta Si (I=1) PC PC+ Etiqueta Si (I=0) PC PC+ Etiqueta Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 Ninguno +1 1o2 1o2 1o2 1o2 1o2 1o2 1o2 1o2 1o2 1o2 1o2

Instrucciones de salto (iv)


BRGE BRLT Etiqueta Salta si mayor o igual, (signo) Etiqueta Salta si menor (signo) Etiqueta [-64,63] Etiqueta [-64,63] Si (NV=0) PC PC+ Etiqueta +1 Si (NV=1) PC PC+ Etiqueta +1 Ninguno Ninguno 1o2 1o2

Test (CP Rd,Rr) Rd Rr Rd < Rr Rd = Rr Rd Rr Rd Rr Rd < Rr Carry Sin carry Negativo Positivo Overflow Sin overflow Cero No cero

Booleana (N V) = 0 (N V) = 1 Z=1 Z= 0 C=0 C=1 C=1 C=0 N=1 N=0 V=1 V=0 Z=1 Z=0

Mnemonico BRGE BRLT BREQ BRNE BRCC/BRSH BRCS/BRLO BRCS BRCC BRMI BRPL BRVS BRVC BREQ BRNE

Comentario Signo Signo Signo/Sin signo Signo/Sin signo Sin signo Sin signo Simple Simple Simple Simple Simple Simple Simple Simple

37

22/05/12

Instrucciones de bit y bit-test


LSL LSR ROL ROR ASR Rd Rd Rd Rd Rd Desplazamiento a la izquierda Desplazamiento a la derecha Rotacin a la izquierda Rotacin a la derecha Desplazamiento aritmtico a la derecha d[0,31] d[0,31] d[0,31] d[0,31] d[0,31] Rd(n+1) Rd(n), Rd(0) 0, C Rd(7) Rd(n) Rd(n+1), Rd(7) 0, C Rd(0) Rd(n+1) Rd(n), Rd(0) C, C Rd(7) Rd(n) Rd(n+1), Rd(7) C, C Rd(0) Rd(n) Rd(n+1), Rd(7) Rd(7) , C Rd(0) Z,C,N,V,H 1 Z,C,N,V 1 Z,C,N,V,H 1 Z,C,N,V, 1 Z,C,N,V, 1

0
C
7

Rn Rn

C 0

LSR LSL

Rn

ROR

Rn

ASR

Rn

ROL

Instrucciones de bit y bit-test

SWAP Rd SBI P,b CBI SEcc


1

Intercambia nibbles Poner a 1 el bit b del puerto IO Poner a 0 el bit b del puerto IO Poner a 1 el bit cc del registro de estado Poner a o el bit cc del registro de estado

P,b

d[0,31] b[0,7] P[0,31] b[0,7] P[0,31]

Rd(3..0)Rd(7.4) IO(P,b)1 IO(P,b)0

Ninguno Ninguno Ninguno

1 2 2

cc 1 cc 1

CLcc
1

cc= C,N,T,Z,I,V,H,S

38

22/05/12

Instrucciones de control

NOP BREAK WDR SLEEP

Nada Para depuracin Reinica el temporizador del perro guardin Dormir

Ninguno Ninguno Ninguno Ninguno

1 N/A 1 1

ndice
1. Introduccin 2. Descripcin general 3. Arquitectura interna 4. Organizacin de memoria 5. Modos de direccionamiento 6. Juego de instrucciones 7. Directivas de ensamblador
78

39

22/05/12

AVR Studio

Es una herramienta de desarrollo que suministra el fabricante ATMEL para desarrollar aplicaciones con sus microcontroladores ATmega. Entre otras herramientas, incluye:

Ensamblador: para genera cdigo objeto (mquina) a partir de un programa fuente escrito en lenguaje ensamblador Simulador: permite simular la ejecucin del programa, para depurar su funcionamiento Programador AVR, para volcar el cdigo generado en la memoria de programa del microcontrolador

Estructura de un programa en ensamblador


CABECERA SEGMENTO DE CDIGO (FLASH) SEGMENTO DE DATOS (SRAM) SEGMENTO EEPROM

Comn a todo el programa

Generan cdigo especfico para cada uno de los tres tipos de memoria

Directivas: son comandos de control de la herramienta que genera el cdigo fuente (programa ensamblador) - No generan cdigo objeto (cdigo mquina) - pero s influyen en cmo se genera ese cdigo

40

22/05/12

;EJEMPLO de fichero fuente con directivas ;CABECERA .INCLUDE m328pdef.inc ;incluye un fichero externo y ensambla ;su contenido con el fichero fuente .DEF contador= r16 ;la variable contador ser el registro r16 .EQU numdatos=9 ;define un smbolo y establece su valor ;SEGMENTO DE CDIGO .CSEG ;comienza el segmento de cdigo (FLASH) .ORG 0x10 ;establece la direccin del CSEG donde se ensamblar ;el cdigo main: ldi contador,0 nop rjmp main ;SEGMENTO DE DATOS .DSEG ;comienza el segmento de DATOS (SRAM) .ORG 0x0100 ;establece la direccin inicial del DSEG donde se ;almacenarn las variables suma: .BYTE 2 ;reserva 2 bytes para la variable suma tabla: .BYTE 10 ;reserva 10 bytes para la variable tabla

Principales directivas de la cabecera

Afectan a todos los segmentos del cdigo generado


.INCLUDE incluye un fichero externo en el cdigo fuente
Ejemplo: .INCLUDE m328pdef.inc

.DEF Asigna un nombre simblico a un registro. Sintaxis: .DEF symbol=register .DEF temp = r16 .DEF ior= r0 .EQU Define un smbolo y establece su valor Sintaxis: .EQU label = expression .EQU puertas = 2

41

22/05/12

Principales directivas del segmento de cdigo


.CSEG indica que empieza el segmento de cdigo
.CSEG

.ORG indica la direccin del segmento de cdigo (FLASH) donde se ubicar el cdigo generado
.ORG 0x02B ;el cdigo generado comienza en $2B

.DB Inserta una o ms constantes de tamao byte en el segmento de cdigo tablafija: mensaje: .DB 13,5,9,4 ;tabla de 4 bytes .DB error ;tabla de 5 caracteres ASCII

.DW inserta una tabla de datos tamao word (2 bytes) en el segmento de cdigo datos: .DW 1930,25000,987,33879 ;tabla de 4 words

Principales directivas del segmento de datos


.DSEG indica que empieza el segmento de datos (SRAM)
.DSEG

.ORG indica la direccin del segmento datos (SRAM) donde se ubicar las variables declaradas
.ORG $0100 ;el cdigo generado comienza en $0100 ;si no se especifica, comienza en $60

.BYTE Reserva espacio en el segmento de datos para almacenar variables


variable1: .BYTE 1 temp: suma: .BYTE 1 .BYTE 2 ;reserva 1 byte para la variable variable1 ;reserva 1 byte para la variable temp ;reserva 2 bytes para la variable suma

42

22/05/12

;EJEMPLO de fichero fuente con directivas ;CABECERA .INCLUDE m328pdef.inc ;incluye un fichero externo y ensambla ;su contenido con el fichero fuente .DEF contador= r16 ;la variable contador ser el registro r16 .EQU numdatos=9 ;define un smbolo y establece su valor ;SEGMENTO DE CDIGO .CSEG ;comienza el segmento de cdigo (FLASH) .ORG 0x10 ;establece la direccin del CSEG donde se ensamblar ;el cdigo main: ldi contador,numdatos ;es lo mismo que ldi r16,9 lds r17,temp ;es lo mismo que lds r17,$0100 ldi yl,low(temp) ;es lo mismo que ldi r28,$00 ldi yh,high(temp) ;es lo mismo que ldi r29,$01 ld r18,y nop fin: rjmp fin ;SEGMENTO DE DATOS .DSEG ;comienza el segmento de DATOS (SRAM) .ORG 0x0100 ;establece la direccin inicial del DSEG donde se ;almacenarn las variables temp: .BYTE 1 ;reserva 1 byte para la variable temp

43

También podría gustarte