Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
AVR
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
PDIP
TQFP
MLF
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
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
www.cursomicros.com
22/05/12
Arquitectura interna
Memorias Generacin de reloj CPU
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
Bus de datos de 8 bits Banco de 32 Registros Arquitectura RISC Load/Store ALU con multiplicador
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
12
22/05/12
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.
S=NV
13
22/05/12
incrementan el SP en 2 unidades.
14
22/05/12
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
Seccin de Aplicacin
0x07FF
Seccin de Aplicacin
RAMEND
0x1FF/0x1FF/0x3FF 8 bits ATmega88PA, ATmega168PA, ATmega328PA 512bytes/512bytes/1Kbytes (4K/8K/16K x16 bits FLASH)
16
22/05/12
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
Inmediato
18
22/05/12
(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
19
22/05/12
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
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
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
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
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
Instrucciones
Directo Indirecto Relativo
Instrucciones:
23
22/05/12
Instrucciones:
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
Mnemnico opdestino,opfuente
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
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)
1 1 1 2
Ninguno
2 Ninguno 2
LDD
d[0,31] q[0,63]
26
22/05/12
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+
(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
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
Rd,P P,Rr Rr Rd
Entrada del puerto Salida hacia el puerto Empujar en pila Sacar de pila
27
22/05/12
OUT 12,R3
SRAM
RAMEND
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
Poner a cero Poner todo a 1 Compara Compara con carry Compara inmediato Multiplica sin signo Multiplica con signo Multiplica signo con sin signo
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)
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
farplc: nop
30
22/05/12
-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
;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
;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
; 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
; nosotros ponemos la etiqueta check y el ensamblador ; calcula la direccin check: cpi r16,$42 breq error ret . . . ;bluque infinito
34
22/05/12
La direccin de retorno se guarda en la pila PILA PC+1 SP SP-2 (2bytes) La subrutina debe terminar con una instruccin RET
; 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
RJMP JMP (1) IJMP RCALL CALL ICALL RET RETI CPSE SBRC SBRS
(1)
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
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)
2 2 3 3 3
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
36
22/05/12
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
0
C
7
Rn Rn
C 0
LSR LSL
Rn
ROR
Rn
ASR
Rn
ROL
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
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
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
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
.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
.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
.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
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