Вы находитесь на странице: 1из 77

Tema 4: Ejemplo de un

computador real: ATmegaX8pa


8-bit
Microcontroller

ndice
Introduccin
Descripcin general
Arquitectura interna
Organizacin de memoria
Modos de direccionamiento
Juego de instrucciones
Directivas de ensamblador
2

ndice
Reset e interrupciones
Puertos de E/S
Timer 1
Herramientas de programacin y simulacin:
AVRStudio
AVRDragon
Arduino

I ntroduccin
El ATmegaX8PA es un microcontrolador (MCU o C) de la
marca Atmel.
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,..).
Su reducido coste y tamao lo hacen atractivo para un sin fin
de aplicaciones: control de mquinas de automocin,
dispositivos mdicos, controles remotos, electrodomsticos,
juguetes,...
El AtmegaX8PA pertenece a la familia AVR8 que comparten
una arquitectura comn para todos los modelos pero con
diferencias en cuanto a tipo de encapsulado, puertos y
memoria.
4

Descripcin general
Arquitectura Risc. 8 bits
Frecuencia de reloj de hasta 20 Mhz @ (4.5-5.5V)
Hasta 20 Mips (20Mhz)
Flash EEPROM X=4,8,16,32 Kb ATmegaX8pa
Data SRAM 512/1K/2K bytes
Data EEPROM 256/512 bytes

Descripcin general
Diversos perifricos
Encapsulado PDIP, TQFP, MLF
Versiones bajo consumo: 0-10 Mhz< @(2.7 -5.5V) 0-4 Mhz< @(1.8
-5.5V)

Comparacin entre procesadores


Procesador

Flash

SRAM

Data Eeprom

ATmega48pa
ATmega88pa
ATmega168pa
ATmega328pa

4Kb
8Kb
16Kb
32Kb

256b
512b
512b
1Kb

512b
1Kb
1Kb
2Kb

Tamao vector
interrpcin
1 instruccin
1 instruccin
2 instrucciones
2 instrucciones

Arquitectura interna
AVR-cpu
Memorias (Flash, Sram,..)
Generacin de reloj
Depuracin
Circuito de Reset
Puertos de E/S:
CAD, Analog Comp.
Ports B,C,D
USART, TWI, SPI
Timers
7

Arquitectura interna
Arquitectura Harvard
Pipeline de 1 nivel:
Execute y pre-fetch
simultneos
Bus de datos de 8 bits
Banco de registros
Arquitectura RISC
Load/Store
ALU con multiplicador

Arquitectura interna
Registros de propsito general
Ocupan las 32 primeras
posiciones de la memoria.
Instrucciones con datos de
tipo inmediato slo pueden
usar los 16 superiores.
Registros X, Y y Z de
16 bits para los modos de
direccionamiento indirectos.

Arquitectura interna
Registros X, Y, Z
Se comportan como registros de 16 bits cuando se usan.
Utilizados para los modos de direccionamiento indirectos.

10

Arquitectura interna
Registro de estado
Se encuentra en el rea de entrada/salida de la memoria
de datos.
Contiene los banderines (flags) que reflejan el resultado de
la ejecucin de algunas instrucciones (principalmente
aritmticas, lgicas, etc.)
- Bit C (Acarreo)
- Bit Z (Zero) . Se pone a 1 para resultado cero, 0 en otro
caso.
- Bit N (Negative). Bit 7 del resultado.

11

Arquitectura interna
Registro de estado (cont.)
- Bit V (Overflow en Ca2) Si A,B son operandos y R
resultado, este bit se calcula como:

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.

S=NV

12

Arquitectura interna
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.
- Bit I (Interrupcin). Permite la generacin de
interrupciones cuando es 1 y las enmascara cuando es
0.

13

Arquitectura interna
Puntero de Pila (SPH y SPL)
Se encuentra en la regin de memoria asignada a E/S.
Apunta al rea de pila (Valor inicIal RAMEND).
El SP se decrementa una unidad al meter un dato en pila
(PUSH) pila y se incrementa una unidad al sacarlo (POP). El SP
apunta a la direccin siguiente a la cima de la PILA.
Las llamadas a subrutinas o rutinas de interrupcin (RCALL, etc)
hacen que el SP se decremente en dos unidades y para los
retornos (RET, RETI), el puntero se incrementa en dos unidades.

14

Organizacin de la memoria
Memoria de programa (Flash)
Atmega48pa
Resto dos secciones:

- Arranque Boot
- Aplicacin
Cada rengln es
de tamao Word

15

Organizacin de la memoria
Memoria de datos
32 registros de propsito general (todos los modos de
direccionamiento)
Registros de E/S
- 64 I/O Registers (instrucciones IN, OUT, modo directo e
indirecto)
- 160 Ext Registers
(modos directo e indirecto)
SRAM (modos directo e indirecto)

16

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
Registro directo
Directo
Indirectos

Indirecto
Indirecto con predecremento
Indirecto con postincremento
Indirecto con desplazamiento

Inmediato

17

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont.)
Directo: la instruccin define el registro o registros cuyo
contenido se ver afectado por la propia instruccin.

- Ejemplos: COM R4

MOV R1,R2

18

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Registro E/S: la instruccin define el registro de E/S y el registro
del banco afectados (Slo instrucciones IN y OUT).

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

19

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Directo: La instruccin contiene la direccin de memoria (16bits)
del dato. Adems contiene un campo (Rd/Rr) que identifica el
registro destino o fuente. Instrucciones LDS, STS.
- Ejemplos:

LDS R23,$D0
STS $12,R1

20

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Indirecto: La instruccin referencia al registro X,Y o Z que
contiene la direccin del operando.

- Ejemplos:

LD R1,X
ST Z,R10

21

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Indirecto con postincremento: La instruccin referencia al
registro X,Y o Z que contiene la direccin del operando, que
despus se incrementa en una unidad.
Ejemplos:

- LD R0,X+
- ST Z+,R1

22

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Indirecto con predecremento: La instruccin referencia al registro
X,Y o Z que tras decrementarse en una unidad, contiene la
direccin del operando.
Ejemplos:

- LD R0,-X
- ST -Z,R1

23

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Indirecto con desplazamiento: La direccin del dato se obtiene
sumando el desplazamiento q (0<q<64) a la direccin contenida
en el registro Y o Z. El resultado no se actualiza en el registro.
Ejemplos:

- LDD R0,Y+10
- STD Z+9,R1

24

M odos de direccionamiento
Modos de direccionamiento para memoria de datos
(cont)
Inmediato. El dato est est codificado en la propia instruccin

- Ejemplos: LDI r16,255, ANDI r25,0x10

25

M odos de direccionamiento
Modos de direccionamiento para memoria de
programa
Constantes de programa (fuera del alcance de esta asignatura).

- Indirecto
- Indirecto con postincremento
Instrucciones

- Directo
- Indirecto
- Relativo

26

M odos de direccionamiento
Modos de direccionamiento para memoria de
programa
Instrucciones Directo.

- JMP y CALL
Instrucciones Indirecto

- IJMP e ICALL
Instrucciones Relativo

- (RJMP y RCALL)
- [-2048 , 2047]

27

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

28

Juego de instrucciones
Instrucciones sin operandos
Mnemnico

Instrucciones con un operando


Mnemnico opfuente/destino

Instrucciones con dos operandos


Mnemnico opdestino,opfuente

Para cada instruccin se presentar la siguiente


informacin
Mnemnico

Operandos Descripcin Rango

Operacin

Banderines Ciclos de reloj


29

Juego de instrucciones
Instrucciones de transferencia de datos
MOV
LDI

Rd,Rr
Rd,Rr
Rd,k

Copiar registro
Copiar registro W
Cargar dato inmediato

LDS

Rd,k

Cargar dato desde la


memoria
Carga el registro con un
dato indirecto

MOVW

LD

LDD

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

Carga el registro con un


dato indirecto con
desplazamiento

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

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

RdRr
Rd+1:RdRr+1:Rr
Rd k

Ninguno
Ninguno
Ninguno

Rd (k)

Ninguno

1
1
1
2

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

2
Ninguno
2

30

Juego de instrucciones
Instrucciones de transferencia de datos
STS

K, Rr

ST

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

STD

LPM

Rd,Z
Rd,Z+
SPM

Almacenar dato en
memoria
Almacenar registro en
memoria

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

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

r[0,31]

(K) Rr

Ninguno

(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

Ninguno

R0 (Z)
Rd (Z)
Rd (Z); ZZ+1
(Z) R1:R0

Ninguno

2
Ninguno
2
3
Ninguno

31

Juego de instrucciones
Instrucciones de transferencia de datos
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

Ninguno
1

P Rr
STACKRr
Rd STACK

Ninguno
Ninguno
Ninguno

1
2
2

32

Juego de instrucciones
Instrucciones de transferencia de datos
MOV R1,R2
IN R1,$10

32 registros
64 registros E/S

$00

OUT 12,R3

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

160 registros E/S

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

RAMEND

33

Juego de instrucciones
Instrucciones aritmtico-lgicas
ADD
ADC
ADIW

Rd,Rr
Rd,Rr
Rd,K

SUB
SUBI

Rd,Rr
Rd,K

SBC
SBCI

Rd,Rr
Rd,K

SBIW

Rd,K

AND
ANDI

Rd,Rr
Rd,K

OR
ORI

Rd,Rr
Rd,K

EOR
COM
NEG
INC
DEC

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

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

RdRd-Rr
RdRd-K

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

RdRd-Rr-C
RdRd-K-C

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

Rd+1:Rd Rd+1:Rd - K

Z,N,V,C

RdRdRr
RdRdK

Z,N,V
Z,N,V

RdRdRr
RdRdK

Z,N,V
Z,N,V

RdRdRr
Rd$FF-Rd
Rd$00-Rd
RdRd+1
RdRd-1

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

1
1
2
1
1
1
1
2
1
1
1
1
1
1
1
1
1

34

Juego de instrucciones
Instrucciones aritmtico-lgicas
CLR
SER
CP
CPC
CPI

Rd
Rd
Rd,Rr
Rd,Rr
Rd,K

Poner a cero
Poner todo a 1
Compara
Compara con carry
Compara inmediato

MUL
MULS
MULSU

Rd,Rr
Rd,Rr
Rd,Rr

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

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

R1:R0Rd x Rr
R1:R0Rd x Rr
R1:R0Rd x Rr
(Rd signed Rr unsigned)

Z,C
Z,C
Z,C

1
1
1
1
1
2
2
2

35

Juego de instrucciones
Instrucciones de salto.
RJMP
JMP (1)
IJMP
RCALL

Etiqueta
Etiqueta

CALL

Etiqueta

(1)

Etiqueta

ICALL
RET
RETI
CPSE

Rd,Rr

SBRC

Rr,b

SBRS

Rr,b

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

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

2
2
3
3

Ninguno
3
Ninguno
Ninguno
I
Ninguno

4
4
4
01/02/03

Ninguno
01/02/03
Ninguno
01/02/03

(1) Slo disponibles para ATMEGA168PA y ATMEGA328PA

36

Juego de instrucciones
Instrucciones de salto.
SBIC
SBIS
BREQ
BRNE
BRCS

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

BRCC

Etiqueta Salta si Cest a 0

BRSH

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

1o2o
3
1o2o
3
1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

+1
+1
+1
+1
+1

37

Juego de instrucciones
Instrucciones
de salto.
BRLO
Etiqueta Salta si menor
Etiqueta [-64,63]
BRMI

Etiqueta Salta si negativo

Etiqueta [-64,63]
Etiqueta [-64,63]

BRPL

Etiqueta Salta si positivo

BRHS

Etiqueta Salta si H est a 1

Etiqueta [-64,63]

BRHC

Etiqueta Salta si H est a 0

Etiqueta [-64,63]

BRTS

Etiqueta Salta si T est a 1

Etiqueta [-64,63]

BRTC

Etiqueta Salta si T est a 0

Etiqueta [-64,63]

BRVS
BRVC
BRIE
BRID

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]

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

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

Ninguno

1o2

+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1

38

Juego de instrucciones
Instrucciones de salto.
BRGE
BRLT

Etiqueta Salta si mayor o igual,


(signo)
Etiqueta Salta si menor (signo)

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

Etiqueta [-64,63]
Etiqueta [-64,63]

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

Si (NV=0)
PC PC+ Etiqueta +1
Si (NV=1)
PC PC+ Etiqueta +1

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

Ninguno

1o2

Ninguno

1o2

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

39

Juego de instrucciones
Instrucciones de bit y de bit-test.
LSL
LSR

Rd

ROL

Rd

Desplazamiento a la
izquierda
Desplazamiento a la
derecha
Rotacin a la izquierda

ROR

Rd

Rotacin a la derecha

ASR

Rd

Rd

Desplazamiento
aritmtico a la derecha

d[0,31]

d[0,31]

d[0,31]
d[0,31]

d[0,31]

Rn

LSR

Rn

LSL

Rn

ASR

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

Rn

Rn

ROR
ROL

40

Juego de instrucciones
Instrucciones de bit y de bit-test.
SWAP Rd
SBI
P,b

Intercambia nibbles
Poner a 1 el bit b del puerto IO

CBI

Poner a 0 el bit b del puerto IO

P,b

SEcc
1

CLcc
1

Poner a 1 el bit cc del


registro de estado
Poner a o el bit cc del registro
de estado

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

Ninguno
Ninguno

IO(P,b)0

Ninguno

1
2
2

cc
1
cc
1

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

41

Juego de instrucciones
Instrucciones de control
NOP
BREAK
WDR
SLEEP

Nada
Para depuracin
Reinica el temporizador del perro
guardin
Dormir

Ninguno
Ninguno
Ninguno

1
N/A
1

Ninguno

42

Directivas de ensamblador
Directivas de ensamblador
Son comandos al programa que genera el cdigo objeto y que
se encuentran mezclados en el fichero fuente con las
instrucciones del microcontrolador .
CSEG-Code Segment

- Sintaxis: .CSEG
DSEG-Date Segment

- Sintaxis: .DSEG

43

Directivas de ensamblador
Directivas de ensamblador(cont.)
BYTE Reserva bytes a una variable

Reserva en memoria de datos. Posible slo en DSEG


Sintaxis: label: .BYTE expresion
Var1: .BYTE 1
Tabla: .BYTE 10

44

Directivas de ensamblador
Directivas de ensamblador(cont.)
DEF Asigna un nombre simblico a un
registro.
- Sintaxis: .DEF symbol=register
- .DEF temp = r16
- .DEF ior= r0
EQU Smbolo igual a expresin

- Sintaxis: .EQU label = expression


- .EQU puertas = 2

45

Directivas de ensamblador
Directivas de ensamblador(cont.)
ORG Establece la direccin de memoria

Sintaxis: .ORG expression


.DSEG
.ORG 0X37
;Direccin $37 de la memoria de datos
;Si no se indica direccin, por defecto $60
Variable: .BYTE 1
.CSEG
.ORG 0x10
Mov r0,r1

46

Arquitectura interna
Reloj del sistema y opciones de reloj
Fuentes
- Externo
- Oscilador de cristal
- Oscilador RC calibrado
- Oscilador del
perro guardin.

Actan sobre:
- AVR clock control unit
mediante un Prescaler
- Circuito de Reset

47

Arquitectura interna
Reloj del sistema y opciones de reloj (cont.)
La fuente de reloj se configura mediante la programacin de
unos fusibles.
De fbrica RC a 8MHz con Prescaler de 8.
Secuencia de puesta en marcha del reloj (Clock startup
sequence)

- Esperar un voltaje adecuado de Vcc.

Circuito de RESET y un posterior Timeout llevado a cabo


por el Watchdog Timer.

- Un nmero previo de oscilaciones.

Fusibles

48

Arquitectura interna
Reloj del sistema y opciones de reloj(cont.)
Unidad de control y distribucin de reloj

- Permite apagar aquellos mdulos que no sean usados.


- Adapta el consumo al tipo de aplicacin.
- Modos bajo consumo (instruccin Sleep)

49

Arquitectura interna
Circuito de Reset
Provoca que el sistema pase a un estado inicial conocido.
Los registros de ES toman sus valores por defecto.
Se busca la instruccin en la posicin asociada al vector de
RESET.
Existen varias causas que generan un RESET:

Power on Reset
Reset externo
Perro guardin (Watchdog Reset)
Detector de apagones (Brown-out detectors)

50

I nterrupciones
Qu es una interrupcin?
Evento que requiere la suspensin (interrupcin) del programa
actual y la ejecucin de una rutina concreta (rutina de
interrupcin), al final de la cual se devuelve el control al
programa interrumpido.

Qu se necesita para procesar interrupciones?


Pila. Almacena la direccin de la instruccin del
programa interrumpido.
Rutina de interrupcin instalada debidamente segn
su vector de interrupcin.
Guardar la informacin de estado de la CPU.
51

I nterrupciones
El SP del AtmegaX8pa se inicia automticamente a la
posicin ms alta de la memoria de datos.
La instalacin de la rutina de interrupcin requiere situar
la instruccin jmp o rjmp en la posicin adecuada del
vector de interrupcin.
Modelos Atmega168pa y Atmega328pa requiere
instruccin JMP.
Modelos Atmega48pa y Atmega88pa requiere
instruccin RJMP.
La tabla de vectores de interrupcin depende del modelo.
52

I nterrupciones (Tabla vectores


ATmega168pa)

53

I nterrupciones
Para modelos con seccin de arranque, la tabla de
vectores o/y reset puede ubicarse o en la seccin de
aplicacin o arranque dependiendo de unos fusibles.

Ejemplo de inicializacin de tabla de vectores.

54

I nterrupciones
Para que se procesen las interrupciones, el

.CSEG

bit I del registro de estado debe estar a 1 lgico.

.ORG 0
JMP main

Durante la ejecucin de la interrupcin, el Bit I

JMP IRQ0_handler
JMP IRQ_handler
..

se pone a 0 lo que impide el anidamiento de

main:

interrupciones.

IRQ0_handler:

{Cdigo programa principal}


.......
IN r16,SREG
PUSH r16

La rutina de interrupcin debe terminar con

{Cdigo interrupcin IRQ0}


POP r16

la instruccin RETI que adems pone I=1.


En la rutina de interrupcin se debe salvar,

OUT SREG,r16
RETI
IRQ1_handler:

IN r16,SREG
PUSH r16

como mnimo, el registro de estado SREG.

{Cdigo interrupcin IRQ1}

Para ello se usar la propia PILA.

OUT SREG,r16

POP r16

RETI

Estructura de un programa con interrupciones

55

Entrada / Salida
Puertos de entrada/salida
PB7-o
PC7-0
PD7-0

Temporizadores
Timer 0
Timer 1

56

Entrada / Salida
Acceso a los puertos y al timer1
Puertos B, C y D
-

Zona baja de la ES

Permite SBI, CBI, IN, OUT,


SBIC,SBIS, modos directos e
indirectos.

Registos SREG y SPL


-

Zona alta de la ES

Permite IN, OUT y modos directos


e indirectos

$00
Registros R0-R31
$1F
$20

Registros asociados a los


puertos B,C,D

ES

Registros SREG y SPL

$5F
$60
Extensin ES

Registros del Timer1

$FF
$100

Timer1
-

Extensin ES

Slo modos directos e indirectos

SRAM

57

Puertos E/S
Son entradas / salidas digitales que permiten escribir
valores lgicos en cada uno de los pines.
Tpicamente: Uno=5V, Cero=0V
Existen tres puertos de 8 bits: Puerto B, Puerto C y
Puerto D
Los puertos tienen funciones alternativas:
Ejemplo PB0: Capturador de eventos del temporizador Salida
de reloj interno Interrupcin 0 ante cambio en el PIN
Activar la funcin alternativa de un PIN no afecta al resto del pines
del puerto
58

Puertos E/S
Configuracin
Resistencia Pull-up
Salida

Entrada

59

Puertos E/S
Los pines del puertos tienen resistencias de Pull-Up
que pueden activarse
Tienen un circuito de sincronizacin para leer los
valores lgicos.
Cada puerto tiene asociado 3 registros: (x={B,C,D})
DDRX7-0: Configura la direccin de cada PIN (entrada o salida)
PORTX7-0: Registro de datos del puerto para escribir en el puerto
PINX7-0: Permite leer directamente en el PIN independientemente
del valor DDRXi
60

Puertos E/S
Uso del puerto B

(C y D son similares)

Registro DDRB7-0 (R/W): El valor del bit DDBX indica si el pin PBX
es una entrada (0) o es salida (1)

PINB7-0 (R) Permite la la lectura de valores lgicos de los pines

61

Puertos E/S
Uso del puerto B
Registro PORTB (R/W):

Si en DDRBx est configurado como salida, el valor de


PORTBx se muestra en el PIN de salida PBx
Si en DDRBx est configurado como entrada, al escribir
un '1' en PORTBx activa la resistencia Pull-Up del PIN
PBx

62

Puertos E/S
Ejemplo 1: Establecer el puerto B como salida y activar el
PINB3 a '1' y el PINB6 a '0'
LDI
OUT
S BI
CBI

R16, 0xFF
DDRB, R16 Puer t o ent er o c omo s al i da
PORTB, 3 Es t abl ec er el bi t 3 a 1
PORTB, 6 Es t abl ec er el bi t 6 a 0

63

Puertos E/S
Ejemplo 2: Establecer el PINC4 del puerto C como
entrada y tomar una decisin en funcin del valor
ledo:
CBI
DDRC, 4
S BI S PI ND, 4
J MP
J MP

PI N4 c omo ent r ada DDRC4=0


Es qui v a una i ns t r uc c i n
s i PI ND4=1
PD4_ES _0 S al t o s i PI ND4=0
PD4_ES _1 S al t o s i PI ND4=1

Ejercicio: Escribir un cdigo equivalente con la


instruccin SBIC
64

Temporizadores
Hay 3 timers disponibles del que slo se estudiar el
Timer 1 de 16bit

Funcionalidad:
Generar eventos de forma peridica
Contador de eventos
Generador de seales
PWM (Pulse Width Modulartor)

Auto reinicio al alcanzar valores programados


Prescaler
Interrupciones
65

Temporizadores
Esquema general del temporizador 1 (16 bits)

Registro temporal necesario


al ser el BUS de 8 bits

66

Temporizadores
Pre-escalador:
Divisor de frecuencia previo al reloj del temporizador.
Permite disminuir la frecuencia de cuenta

Cuenta con pre-escalador

67

Temporizadores
De los modos de operacin posibles estudiaremos:
Normal: Cuenta ascendente de manera indefinida. Despus del
estado de cuenta $FFFF pasa al $0000
Puesta a cero al llegar a un valor: El contador se pone a cero
automticamente cuando se alcanza el valor establecido en
OCR1A

Registros involucrados
Configuracin: TCCR1A y TCCR1B
Estado de cuenta: TCNT1H y TCNT1L
Comparadores: OCR1AH ,OCR1AL, OCR1BH y OCR1BL
68

Temporizadores
Registro de configuracin:
Solo estudiaremos 4 bits el TCCR1B
El resto se pueden quedar sin inicializar, por defecto todos estn a
cero

69

Temporizadores
Frecuencia de funcionamiento del temporizador en
funcin de 3 bits (CS12,CS11,CS10)
CS12

CS11

CS10 Descripcin

Temporizador parado

Frecuencia clk/1

Frecuencia clk/8

Frecuencia clk/64

Frecuencia clk/256

Frecuencia clk/1024

Pin T1 en flanco de bajada

Pin T1 en flanco de subida

70

Temporizadores
Modos de funcionamiento:
Modo Normal:
El bit WGM12 debe configurarse a '0' (registro TCCR1B).
El contador cuenta desde 0x0000 a 0xFFFF y vuelta a 0x0000, a la
frecuencia de reloj configurada.
En cada paso por 0x0000 se activa un bit llamado TOV1
Modo CTC (Clear Timer on Compare Match):
El bit WGM12 debe configurarse a '1' (registro TCCR1B)
El contador cuenta desde 0x0000 hasta que su contenido es igual al
almacenado en OCR1A (16 bits). Tras esto se pone
automticamente a 0x0000.
Cuando esto ocurre se activa un bit llamado OCF1

71

Temporizadores
Registros de habilitacin de interrupciones

Registro de banderas de interrupciones

72

Temporizadores
Interrupciones:
Si

TOIE1=1 (registro TIMSK1) entonces se produce una


interrupcin cada vez que el temporizador pasa por 0x0000 y se
activa la bandera de interrupcin TOV1 (registro TIFR1)

Si OCIE1A=1 (registro TIMSK1) entonces se produce una


interrupcin cada vez que el temporizador alcanza el valor
almacenado en OCR1A se pone a 0x0000 y se activa la bandera
de interrupcin OCF1A (registro TIFR1)
Si OCIE1B=1 (registro TIMSK1) entonces se produce una
interrupcin cada vez que el temporizador alcanza el valor
almacenado en OCR1B se pone a 0x0000 y se activa la bandera
de interrupcin OCF1B (registro TIFR1)
73

Temporizadores
Importante: El contador es de 16bits y el bus de 8. La
escritura de registros de 16bits se debe hacer en 2
pasos y en un orden correcto:
1 Parte alta del registro. Por ejemplo OCR1AH
2 Parte baja del registro. Por ejemplo OCR1AL
LDI R16, 0x 10
S TS OCR1AH, R16 Es c r i t ur a de l a par t e al t a, r eal ment e no
s e es c r i be el r egi s t r o, s e queda en un
r egi s t r o t empor al
LDI R16, 0x 02
S TS OCR1AL, R16 S e di s par a es c r i t ur a s i mul t nea de 16
bi t s : 8 des de un r egi s t r o t empor al y 8
des de el bus del s i s t ema

74

Temporizadores
Ejemplo: Con un micro con reloj a 1Mhz conseguir que
el contador se reinicie 1 vez por segundo
1 Bajar la frecuencia del reloj con el preescalador:
1Mhz/64=15625Hz
2 Cargar en OCR1A el valor 15625 = $3D09
3 Activa el auto-clear cuando el contenido el temporizador sea
igual a OCR1A.
Cada vez que se cicle el contador ha pasado un segundo

75

Temporizadores
Solucin del ejemplo
LDI
S TS

R16, 0x 3D
OCR1AH, R16

LDI
S TS

R16, 0x 09
OCR1AL, R16

LDI

R16, 0b00001011

S TS

TCCR1B, R16

Car ga 0x 3D09 en OCR1A


Pr i mer o par t e al t a per o OCR1A
t odav a queda i nal t er ado. No s e
puede us ar OUT.
Tr as es c r i bi r l a par t e baj a s e
es c r i be el r egi s t r o c ompl et o de
16bi t s
Ac t i v a el modo CLC, bi t WGM12=1
Pr es cal er CLK/64
A par t i r de es t a i ns t r uc c i n el
t i mer es t f unc i onando

76

Bibliografa
Instruction Set datasheet.
Atmegax8pa datasheet.
Microcontroller projects with the atmel controller. Gadre,
Dhananjay.
Atmel AVR microcontroller primer: programming and
interfacing. Barlett and Pack
Embedded Systems Design with the Atmel AVR
Microcontroller. Steven Barret.

77