Professional Documents
Culture Documents
EdC-T4-AVR-v0
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
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
Qu es un microcontrolador?
Arquitectura interna
Principales familias de
controladores
PICmicro
AVR
Freescale
(franquicia de Motorola)
Aplicaciones controladores
Aplicaciones controladores
Aplicaciones controladores
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
Estudiaremos el
ATmegaX8PA
Diversos perifricos
Encapsulados: PDIP, TQFP, MLF
PDIP
TQFP
MLF
Versiones bajo consumo: 0-10 Mhz< @(2.7 5.5V) 0-4 Mhz< @(1.8 -5.5V)
ATmegaX8PA
Dispositivos
Flash
(Programa)
EEPROM
(datos)
SRAM
(datos)
Tamao
vector
interrupcin
ATmega48PA
4K Bytes
256 Bytes
512 Bytes
1 instruccin
ATmega88PA
8K Bytes
512 Bytes
1K Bytes
1 instruccin
ATmega168PA
16K Bytes
512 Bytes
1K Bytes
2 instrucciones
ATmega328P
32K Bytes
1K Bytes
2K Bytes
2 instrucciones
ATmegaX8PA
Caractersticas
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/1K/2K bytes
Data EEPROM 256/512/512/1K 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
Arquitectura interna
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:
CAD, Analog Comp.
Ports B,C,D
USART, TWI, SPI
Timers
Arquitectura Harvard
Pipeline de 1 nivel:
(Execute y pre-fetch simultneos)
X, Y, Z: registros de 16 bits
para modos de
direccionamiento indirecto
X
Y
Z
Registros X, Y, Z
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)
- Bit S (Signo)
Refleja el signo correcto del resultado en operaciones
en Ca2.
S=NV
PUSH Ri
POP Ri
SPH
RAM
Ri MEM(SP)
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
29
Organizacin de la
memoria de Programa (Flash)
Atmega48PA
- desde: 0x000
- hasta: 0x7FF
(2K x16 bits: 4K Bytes)
16 bits
Organizacin de la
memoria de Programa (Flash)
Atmega88PA
Atmega168PA
Atmega328PA
16 bits
Atmega48PA
16 bits
Seccin de arranque
0x2FF/0x4FF/0x4FF/0x8FF
Registros de E/S
- 64 I/O Registers (instrucciones IN, OUT, modo directo e
indirecto)
- 160 Ext Registers (modos directo e indirecto)
SRAM
(modos directoe 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
Inmediato
MOV R1,R2
; Ej. Transfiere R2 a R1
MOV R1,R2 ;R1 R2
(0 a 64) y el
Registro de propsito general afectados (Solo
instrucciones IN y OUT).
- Ejemplos: IN R1, 56 ;
; Ejemplos:
IN R1,56
;R1 PORT 56
OUT 21,R10 ;PORT21 R10
; Ejemplos:
LDS R23,$1D0 ; R23 ($1D0)
STS $1D2,R1 ; ($1D2) R1
Direccionamiento Indirecto
(memoria de Datos)
;R1 MEMDAT(X)
;MEMDAT(Z) R10
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
; R0 MEMDAT(Y+10)
; MEMDAT(Z+9)R1
Direccionamiento Inmediato
(memoria de Datos)
; 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
Indirecto
Indirecto con postincremento
Instrucciones
Directo
Indirecto
Relativo
; Llamada a la subrutina
; almacenada en 0x500
; retorna con un RET
CALL 0x500
; Salto a la direccin
; almacenada en Reg. Z
IJMP ; PCZ
; Llamada a la subrutina
; almacenada en Reg. Z
; retorna con un RET
ICALL
Instrucciones:
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
Mnemnico
Mnemnico opfuente/opdestino
Mnemnico opdestino,opfuente
Mnemnico
Operacin
LDD
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,2,..30]
d[16,31]
[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
1
1
1
Rd (k)
Ninguno
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
STD
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
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<64K
r[0,31]
r[0,31]
q[0,63]
(k) Rr
Ninguno
2
(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
2
Ninguno
2
R0 (Z)
Rd (Z)
Rd (Z); ZZ+1
(Z) R1:R0
Ninguno
3
Ninguno
IN
OUT
PUS H
POP
Rd,P
P,Rr
Rr
Rd
d[0,31]
P[0,63]
r[0,31]
P[0,63]
r[0,31]
d[0,31]
RdES(P)
Ninguno
1
ES(P) Rr
STACKRr
Rd STACK
Ninguno
Ninguno
Ninguno
1
2
2
32 registros
(R0:R31)
$00
OUT 12,R3
64 registros E/S
160 registros E/S
LD R1,Z
LDD R30,Y+2
LDS R23,$10
SRAM
ST Z,R1
STD Y+1,R30
STS $DE,R4
RAMEND
IN
OUT P,Rf
OUT
Registro Rd
LD R1,X
LDD R1,Y+2
LDS Rd,dir
LoaD
MOV Rd,Rf
MOVe
SRAM
Registro Rf
ST X,Rf
STD Y+d,Rf
STS dir,Rf
STore
Instrucciones Aritmtico-Lgicas
ADD
ADC
ADIW
SUB
SUBI
Rd,Rr
Rd,Rr
Rd,K
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
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
Z,N,V,C,H
Z,N,V,C,H
Z,N,V,C
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
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:R0Rd x Rr
R1:R0Rd x Rr
R1:R0Rd 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
Instrucciones de salto
Permiten saltar a una instruccin en otra zona de memoria
de cdigo
4 tipos de instrucciones de salto
JMP: salto incondicional (jump)
BRxx : salto corto si se cumple una condicin xx (branch)
SKxx : sltate (esquiva) la siguiente
instruccin si se cumple la condicin (skip)
CALL/RET: llamada/retorno de subrutina
r1,r0
jmp
farplc
. . . .
farplc:
nop
;salto incondicional
-63<k<64
r1,r0
rjmp ok
. . . .
ok:
nop
r30,0
ldi
r31,$8
ijmp
. . . .
-63<k<64
. . .
. . .
inc r27
; incrementa r27
cpi r27,5
brne bucle
; salta si r27<>5
nop
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
; r0 r0-r1
; continua
. . .
; nosotros ponemos la etiqueta check y el ensamblador
; calcula la direccin
check:
cpi r16,$42
breq error
ret
. . .
error:
rjmp error
;bucle infinito
. . .
; nosotros ponemos la etiqueta routine y el ensamblador
; calcula la direccin
routine: push r14
...
pop r14
ret
. . .
;restaura r14
(1)
Etiqueta
Etiqueta
Etiqueta
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< Etiq-PC-1<2K
0<Etiqueta<4M
-2K< Etiq-PC-1 <2K
0<Etiqueta<4M
d,r[0,31]
r[0,31]
b[0,7]
r[0,31]
b[0,7]
PC Etiqueta
PC Etiqueta
PC Z
STACK PC
PCEtiqueta
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
BREQ
P[0,31]
b[0,7]
P[0,31]
b[0,7]
-64 <Etiq-PC-1- <64
BRNE
BRCS
BRCC
BRSH
SBIC
SBIS
P,b
Si (E/S(P,b)=0)
PC PC+2 ( 3)
Si (E/S(P,b)=1)
PC PC+2 ( 3)
Si (Z=1)
PC Etiqueta
Si (Z=0)
PC Etiqueta
Si (C=1)
PCEtiqueta
Si (C=0)
PC Etiqueta
Si (C=1)
PC Etiqueta
Ninguno
Ninguno
1o2o
3
1o2o
3
1o2
Ninguno
1o2
Ninguno
1o2
Ninguno
1o2
Ninguno
1o2
Ninguno
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Etiqueta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
si menor
si negativo
si positivo
si H est a 1
si H est a 0
si T est a 1
si T est a 0
si V est a 1
si V est a 0
si I est a 1
si I est a 0
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
1o2
1o2
1o2
1o2
1o2
1o2
1o2
1o2
1o2
1o2
1o2
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
Etiqueta
Si (NV=1) PC Etiqueta
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
Rd
LSR
Rd
ROL
Rd
ROR
ASR
Desplazamiento a la
izquierda
Desplazamiento a la
derecha
Rotacin a la izquierda
Rd
Rotacin a la derecha
Rd
Desplazamiento
aritmtico a la derecha
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)
d[0,31]
d[0,31]
d[0,31]
d[0,31]
d[0,31]
Rn
LSR
Rn
LSL
Rn
ASR
Rn
Rn
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
ROR
ROL
SWAP Rd
SBI
P,b
Intercambia nibbles
Poner a 1 el bit b del puerto IO
P,b
CBI
SEcc
CLcc
1
cc= C,N,T,Z,I,V,H,S
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
Instrucciones de control
NOP
BREAK
WDR
SLEEP
Nada
Para depuracin
Reinica el temporizador del perro
guardin
Dormir
Ninguno
Ninguno
Ninguno
N/A
1
Ninguno
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
Directivas de ensamblador
1
10
Variable: .BYTE 1
.CSEG
.ORG 0x10
mov r0,r1
ndice (ii)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
82
RC calibrado
Watch-Dog
Actan sobre:
- AVR clock control unit
mediante un Prescaler
- Circuito de Reset
Fusibles
ndice (ii)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
87
Circuito de RESET
Provoca que el sistema pase a un estado inicial
conocido.
- Los registros de E/S toman sus valores por defecto.
- Se busca la instruccin en la posicin asociada al
vector de RESET.
ndice (ii)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de Entrada/Salida
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
89
Entrada/Salida
Puertos de entrada/salida
- PB7-0
- PC6-0
- PD7-0
Temporizadores
- Timer 0
- Timer 1
Resistencia
de pull-up
Eliminador de
rebotes
Resistencias
de pull-up
Puertos E/S
Son entradas/salidas digitales que permiten
leer/escribir valores lgicos en los pines.
Tpicamente:
1=5V, 0 =0V
Timer1
- Extensin E/S
- Slo modos directos e indirectos
Entrada
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: (S={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
DDRBi
Configuracin
PORTBi
PBi
Salida
PINBi
Entrada
PINB7-0 (R):
Permite la lectura de los valores lgicos de los pines
(tanto de entrada como de salida)
Puertos E/S
Puerto Registro
B
Direccin
PINB
0x03 (0x23)
DDRB
0x04 (0x24)
PORTB
0x05 (0x25)
PINC
0x06 (0x26)
DDRC
0x07 (0x27)
PORTC
0x08 (0x28)
PIND
0x09 (0x29)
DDRD
0x0a (0x2a)
PORTD
0x0b (0x2b)
100
1
PBi
PORTBi
Salida
PINBi
Entrada
Resistencia
Pull-up
activada
PBi
Configuracin
PORTBi
Salida
1
PINBi
Entrada
Puertos E/S
Ejemplo 1: Establecer el puerto B como salida y activar el
PINB3 a '1' y el PINB6 a '0'
LDI
OUT
SBI
CBI
R16,0xFF
DDRB,R16
PORTB,3
PORTB,6
Puertos E/S
Ejemplo 2: Establecer el PINC4 del puerto C como entrada
y tomar una decisin en funcin del valor ledo:
CBI
SBIS
JMP
JMP
DDRC,4
PIND,4
PD4_ES_0
PD4_ES_1
ndice (ii)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
105
Interrupciones
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.
Interrupciones
Labels Code
jmp RESET
jmp EXT-INT0
jmp EXT-INT1
jmp PCINT0
jmp PCINT1
jmp PCINT2
jmp WDT
jmp TIM2_COMPA
jmp TIM2_COMPB
jmp TIM2_OVF
Comments
; Reset Handler
; IRQ0 Handler
; IRQ1 Handler
; PCINT0 Handler
; PCINT1 Handler
; PCINT2 Handler
; watchdog timer Handler
; Timer2 Compare A Handler
; Timer2 Compare B Handler
; Timer2 Overflow Handler
Gestin de interrupciones
Para poder procesar interrupciones, el bit I = 1
I = 0 enmascara todas las interrupciones
Cuando I =1 y llega una interrupcin, el micro:
Termina de ejecutar la instruccin en curso
Salva en la PILA el PC y se ejecuta la rutina de
interrupcin correspondiente
La rutina de interrupcin termina con RETI (recupera
el PC de la PILA)
Durante la ejecucin de la interrupcin, I=0 para evitar
interrupciones anidadas
La rutina de interrupcin debe salvar en la pila, al menos,
el registro de estado
. . .
{Cdigo programa principal}
. . .
IRQ0_handler: IN r16,SREG
PUSH r16
{Cdigo interrupcin IRQ0}
POP r16
OUT SREG,r16
RETI
IRQ1_handler: IN r16,SREG
PUSH r16
{Cdigo interrupcin IRQ1}
POP r16
OUT SREG,r16
RETI
ndice (ii)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
112
Temporizadores
Hay 3 timers disponibles.
Estudiaremos el Timer 1 (16bits)
Funcionalidad:
- Generador eventos peridicos
- Contador de eventos
- Generador de seales
- PWM (Pulse Width Modulartor)
Temporizadores
Esquema general del temporizador 1 (16 bits)
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
Temporizadores
Registro de configuracin:
Solo estudiaremos 4 bits el TCCR1B
El resto se pueden quedar sin inicializar, por defecto todos estn a cero
Temporizadores
Frecuencia de funcionamiento del temporizador en
funcin de 3 bits (CS12,CS11,CS10)
CS12
CS11
CS10 Descripcin
0
0
0
0
0
1
Temporizador parado
Frecuencia clk/1
Frecuencia clk/8
Frecuencia clk/64
Frecuencia clk/256
Frecuencia clk/1024
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
Temporizadores
Registros de habilitacin de interrupciones
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)
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,0x10
STS OCR1AH,R16
LDI R16,0x02
STS OCR1AL,R16
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
Temporizadores
Solucin del ejemplo
LDI
STS
R16,0x3D
OCR1AH,R16
LDI
STS
R16,0x09
OCR1AL,R16
LDI
STS
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.
124