0% encontró este documento útil (0 votos)
447 vistas124 páginas

Set Instrucciones Atmega

Este documento describe la arquitectura del microcontrolador ATmegaX8PA de 8 bits. Explica que contiene una CPU, memoria flash para almacenar el programa, SRAM para datos y periféricos como puertos de E/S. Describe la organización de la memoria, los registros internos como el registro de estado y el puntero de pila, y los diferentes modos de direccionamiento para acceder a la memoria y registros.

Cargado por

gusti072
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
447 vistas124 páginas

Set Instrucciones Atmega

Este documento describe la arquitectura del microcontrolador ATmegaX8PA de 8 bits. Explica que contiene una CPU, memoria flash para almacenar el programa, SRAM para datos y periféricos como puertos de E/S. Describe la organización de la memoria, los registros internos como el registro de estado y el puntero de pila, y los diferentes modos de direccionamiento para acceder a la memoria y registros.

Cargado por

gusti072
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tema 4: Ejemplo de un

computador real: ATmegaX8PA


8-bit
Microcontroller
1
EdC-T4-AVR-v0
ndice
1. Introduccin
2. Descripcin general
3. Arquitectura interna
4. Organizacin de memoria
2
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
8. Reloj del sistema
9. Circuito de Reset
10. Interrupciones
11. Puertos de E/S
ndice (ii)
3
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
4
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
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)
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
11
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
Familia AVR ATmega
AVR ATmega es una familia de microcontroladores (MCU o
C) fabricado por 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,..).
Estudiaremos el ATmegaX8PA
Diversos perifricos
Encapsulados: PDIP, TQFP, MLF
Familia AVR ATmega
Descripcin General
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)
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
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
ATmegaX8PA
Caractersticas
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
16
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
Arquitectura interna
Arquitectura interna
CPU
Memorias
Generacin de
reloj
Puertos E/S
Depuracin
AVR-CPU
Memorias (Flash, SRAM)
Generacin de reloj
Depuracin
Arquitectura interna
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)
Bus de datos de 8 bits

Arquitectura interna CPU AVR


Banco de registros
Arquitectura RISC
Load/Store
ALU con multiplicador
Ocupan las 32 primeras
posiciones de la memoria
Registros de propsito general
(CPU AVR)
Instrucciones con datos de
direccionamiento inmediato
slo pueden usar los 16
superiores (R16 a R31)
X, Y, Z: registros de 16 bits
para modos de
direccionamiento indirecto
X
Y
Z
Se comportan como registros de 16 bits cuando
se usan (direccionamientos indirectos)
Registros X, Y, Z
- Bit C (Carry)
- Bit Z (Zero)
- Bit N (Negative)
- Bit V (oVerflow en Ca2)
- Bit S (Signo: S = N V)
Registro de estado (SR)
- Bit S (Signo: S = N V)
- Bit H (Half Carry)
- Bit T
- Bit I (Interrupcin)
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.)
Registro de estado (cont.)
- 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:
V = A7 B7 R7' + A7' B7' R7 en suma
V = A7 B7' R7' + A7' B7 R7 en resta
- Bit S (Signo) - Bit S (Signo)
Refleja el signo correcto del resultado en operaciones
en Ca2.
S = N V
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). - Bit I (Interrupcin).
Para permitir (I=1) o deshabilitar (I=0) interrupciones
Se encuentra en la regin de memoria asignada a
E/S.
Apunta al rea de pila (Valor inicial RAMEND).
El SP se decrementa (post) una unidad al meter un dato en pila
(PUSH) pila y se incrementa (pre) una unidad al sacarlo (POP).
Puntero de Pila (Stack Pointer)
(PUSH) pila y se incrementa (pre) 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 (post) en dos unidades y para
los retornos (RET, RETI), el puntero se incrementa (pre) en dos
unidades.
Puntero de Pila (PUSH)
RAM
0
PUSH Ri POP Ri
MEM(SP) Ri SPSP+1
SP SP-1 Ri MEM(SP)
RAMEND
PILA
SPH SPL
STACK POINTER
LIFO
ndice
1. Introduccin
2. Descripcin general
3. Arquitectura interna
4. Organizacin de memoria
29
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
Organizacin de la
memoria de Programa (Flash)
Atmega48PA
- desde: 0x000 - desde: 0x000
- hasta: 0x7FF
(2K x16 bits: 4K Bytes)
16 bits
Organizacin de la
memoria de Programa (Flash)
Atmega88PA
Atmega168PA
Atmega48PA
16 bits
16 bits
Atmega168PA
Atmega328PA
Seccin de arranque
Organizacin del mapa de
memoria de Datos
0x2FF/0x4FF/0x4FF/0x8FF
32 Registros de propsito general con todos los
modos de direccionamiento (inmediato solo de R16
a R31, indirecto solo X,Y,Z)
Registros de E/S
- 64 I/O Registers (instrucciones IN, OUT, modo directo e
Organizacin del mapa de
memoria de Datos
- 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
34
4. Organizacin de memoria
5. Modos de direccionamiento:
5.1 Direccionamiento de la memoria de datos
5.2 Direccionamiento de la memoria de programa
Registro directo
Entrada/Salida directo
Directo
Indirectos
5.1 Modos de direccionamiento de la
memoria de Datos
Indirecto
Indirecto con predecremento
Indirecto con postincremento
Indirecto con desplazamiento
Inmediato
La instruccin define el registro o registros cuyo
contenido se ver afectado por la propia instruccin.
- Ejemplos: COM R4 MOV R1,R2
Direccionamiento de Registro Directo
(memoria de Datos, zona de registros pr. g.)
; Ej. Calcula el Ca1 de R4
COM R4 ;R4 $FF-R4
; Ej. Transfiere R2 a R1
MOV R1,R2 ;R1 R2
La instruccin define el puerto de E/S (0 a 64) y el
Registro de propsito general afectados (Solo
instrucciones IN y OUT).
- Ejemplos: IN R1, 56 ; OUT 21, R10
Direccionamiento de E/S Directo
(memoria de Datos, zona E/S)
; Ejemplos:
IN R1,56 ;R1 PORT 56
OUT 21,R10 ;PORT21 R10
La instruccin contiene la direccin de memoria
(16bits) del operando , as como un campo de 5 bits
(Rr/Rf) que identifica el registro destino o fuente.
Instrucciones LDS, STS.
Direccionamiento Directo (Straight)
(memoria de Datos)
; Ejemplos:
LDS R23,$1D0 ; R23 ($1D0)
STS $1D2,R1 ; ($1D2) R1
La instruccin referencia al registro X,Y o Z que
contiene la direccin del operando.
Direccionamiento Indirecto
(memoria de Datos)
; Ejemplos:
LD R1,X ;R1 MEMDAT(X)
ST Z,R10 ;MEMDAT(Z) R10
Los Registros X, Y Z actan como punteros al dato en memoria
La instruccin referencia al registro X,Y o Z que
contiene la direccin del operando, que despus se
incrementa en una unidad.
Direccionamiento Indirecto con
postincremento (memoria de Datos)
; Ejemplos:
LD RO,X+ ; R0 MEMDAT(X), XX+1
ST Z+,R1 ; MEMDAT(Z) R1, ZZ+1
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
ST Z+,R1 ; MEMDAT(Z) R1, ZZ+1
La instruccin referencia al registro X,Y o Z que tras
decrementarse en una unidad, contiene la direccin
del operando.
Direccionamiento Indirecto con
predecremento (memoria de Datos)
; 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
ST -Z,R1 ; ZZ-1, MEMDAT(Z)R1
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 (Y o Z).
Direccionamiento Indirecto con
desplazamiento (memoria de Datos)
; Ejemplos:
LDD R0,Y+10 ; R0 MEMDAT(Y+10) LDD R0,Y+10 ; R0 MEMDAT(Y+10)
STD Z+9,r1 ; MEMDAT(Z+9)R1
El operando es suministrado en la propia instruccin
En modo inmediato solo pueden usarse
como destino los reg. del R16 al R31
Direccionamiento Inmediato
(memoria de Datos)
; Ejemplos: ; 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
44
4. Organizacin de memoria
5. Modos de direccionamiento:
5.1 Direccionamiento de la memoria de datos
5.2. Direccionamiento de la memoria de programa
Constantes de programa (fuera del alcance de esta
asignatura).
Indirecto
Indirecto con postincremento
Instrucciones
5.2 Modos de Direccionamiento para la
memoria de programa
Instrucciones
Directo
Indirecto
Relativo
Direccionamiento Directo de Instrucciones
(memoria de programa)
El programa continua su ejecucin en la direccin de
memoria de programa indicada en la instruccin
Instrucciones: JMP y CALL
; Salto a la direccin 0x3F0:
JMP 0x3F0 ; PC 0x3F0
; Llamada a la subrutina
; almacenada en 0x500
; retorna con un RET
CALL 0x500
Direccionamiento Indirecto de Instrucciones
(memoria de programa)
El programa continua su ejecucin en la direccin de
memoria almacenada en el Registro Z
Instrucciones: IJMP y ICALL
; Salto a la direccin
; almacenada en Reg. Z
IJMP ; PCZ
; Llamada a la subrutina
; almacenada en Reg. Z
; retorna con un RET
ICALL
Direccionamiento Relativo de Instrucciones
(memoria de programa)
El programa continua su ejecucin en la direccin de
memoria PC PC+K+1 (k [-2048, 2047]
Instrucciones: RJMP (Relative Jump)
RCALL (Relative Call)
BRXX (Branch if condition XX)
ndice
1. Introduccin
2. Descripcin general
3. Arquitectura interna
4. Organizacin de memoria
49
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. Directivas de ensamblador
Instrucciones de transferencia de datos
Instrucciones aritmtico-lgicas
Instrucciones de salto

6. Juego de Instrucciones
Instrucciones de manejo de bits
Instrucciones de control del sistema
Instrucciones sin operandos
Mnemnico
Instrucciones con un operando
Mnemnico opfuente/opdestino
Juego de Instrucciones AVR
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
Rd,Rr Copiar registro d,r[0,31] RdRr Ninguno
1
MOVW
Rd,Rr Copiar registro W d,r[0,2,..30] Rd+1:RdRr+1:Rr Ninguno 1
LDI
Rd,K Cargar dato inmediato d[16,31]
[0,255]
Rd K Ninguno
1
LDS
Rd,k Cargar dato desde la
memoria
d[0,31]
k<64K
Rd (k) Ninguno
2
LD
Rd,X
Rd,X+
Rd,-X
Rd,Y
Carga el registro con un
dato indirecto
d[0,31] Rd (X)
Rd (X); XX+1
XX-1; Rd (X)
Rd (Y)
Ninguno
Rd,Y
Rd,Y+
Rd,-Y
Rd,Z
Rd,Z+
Rd,-Z
Rd (Y)
Rd (Y); YY+1
YY-1; Rd (Y)
Rd (Z)
Rd (Z); ZZ+1
ZZ-1; Rd (Z) 2
LDD
Rd,Y+q
Rd,Z+q
Carga el registro con un
dato indirecto con
desplazamiento
d[0,31]
q[0,63]
Rd (Y+q)
Rd (Z+q)
Ninguno
2
Instrucciones de Transferencia de Datos
(ii)
STS
k, Rr Almacenar dato en
memoria
r[0,31]
k<64K
(k) Rr Ninguno
2
ST
X,Rr
X+,Rr
-X,Rr
Y,Rr
Y+,Rr
-Y,Rr
Z,Rr
Z+,Rr
Almacenar registro en
memoria
r[0,31]
(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
Ninguno
Z+,Rr
-Z,Rr
(Z)Rr; ZZ+1
ZZ-1; (Z)Rr 2
STD
Y+q,Rr
Z+q,Rr
Almacenar registro en
memoria con indirecto
con desplazamiento
r[0,31]
q[0,63]
(Y+q)Rr
(Z+q) Rr
Ninguno
2
LPM
Rd,Z
Rd,Z+
Carga memoria de
programa
R0 (Z)
Rd (Z)
Rd (Z); ZZ+1
Ninguno
3
SPM
Almacenar en memoria
de programa
(Z) R1:R0 Ninguno -
Instrucciones de Transferencia de Datos
(iii)
IN
Rd,P Entrada del puerto d[0,31]
P[0,63]
RdES(P) Ninguno
1
OUT
P,Rr Salida hacia el puerto r[0,31]
P[0,63]
ES(P) Rr Ninguno
1 P[0,63] 1
PUSH
Rr Empujar en pila r[0,31] STACKRr Ninguno 2
POP
Rd Sacar de pila d[0,31] Rd STACK Ninguno
2
32 registros
(R0:R31)
64 registros E/S
MOV R1,R2
$00
IN R1,$10
OUT 12,R3
160 registros E/S
Instrucciones de Transferencia de Datos
SRAM
RAMEND
ST Z,R1
STD Y+1,R30
STS $DE,R4
LD R1,Z
LDD R30,Y+2
LDS R23,$10
Registro Rd Registro Rf
MOV Rd,Rf
Instrucciones de Transferencia de Datos
Puerto E/S
OUT P,Rf
OUT
IN Rd,P
IN
SRAM
Registro Rd Registro Rf
MOV Rd,Rf
MOVe
ST X,Rf
STD Y+d,Rf
STS dir,Rf
STore
LD R1,X
LDD R1,Y+2
LDS Rd,dir
LoaD
Instrucciones Aritmtico-Lgicas
ADD Rd,Rr Suma sin carry d,r[0,31] Rd Rd+Rr Z,N,V,C,H 1
ADC Rd,Rr Suma con carry d,r[0,31] Rd Rd+Rr+C Z,N,V,C,H 1
ADIW Rd,K Suma inmediato con
palabra
d[24,26,28,30]
K[0,63]
Rd+1:Rd Rd+1:Rd + K Z,N,V,C
2
SUB Rd,Rr Resta sin carry d,r[0,31] RdRd-Rr Z,N,V,C,H 1
SUBI Rd,K Resta inmediato d[16,31]
K[0,255]
RdRd-K Z,N,V,C,H
1
SBC Rd,Rr Resta con carry d,r[0,31] RdRd-Rr-C Z,N,V,C,H 1
SBCI Rd,K Resta inmediato con
carry
d[16,31]
K[0,255]
RdRd-K-C Z,N,V,C,H
1
SBIW Rd,K Resta inmediato con
palabra
d[24,26,28,30]
K[0,63]
Rd+1:Rd Rd+1:Rd - K Z,N,V,C
2
palabra
K[0,63] 2
AND Rd,Rr And lgica d,r[0,31] RdRdRr Z,N,V 1
ANDI Rd,K And lgica con dato
inmediato
d[16,31]
K[0,255]
RdRdK Z,N,V
1
OR Rd,Rr Or lgica d,r[0,31] RdRdRr Z,N,V 1
ORI Rd,K Or lgica con dato
inmediato
d[16,31]
K[0,255]
RdRdK Z,N,V
1
EOR Rd,Rr Exclusive or d,r[0,31] RdRdRr Z,N,V 1
COM Rd Complemento a 1 d,r[0,31] Rd$FF-Rd Z,N,V,C 1
NEG Rd Complemento a 2 d,r[0,31] Rd$00-Rd Z,N,V,C 1
INC Rd Incrementa d,r[0,31] RdRd+1 Z,N,V 1
DEC Rd Decrementa d,r[0,31] RdRd-1 Z,N,V 1
Instrucciones Aritmtico-Lgicas (ii)
CLR Rd Poner a cero d,r[0,31] Rd0 Z,N,V 1
SER Rd Poner todo a 1 d,r[0,31] Rd$FF Z,N,V 1
CP Rd,Rr Compara d,r[0,31] Rd-Rr Z,N,V,C,H 1
CPC Rd,Rr Compara con carry d,r[0,31] Rd-Rr-C Z,N,V,C,H 1
CPI Rd,K Compara inmediato d[16,31]
K[0,255]
Rd-K Z,N,V,C,H
1
MUL Rd,Rr Multiplica sin signo d,r[0,31] R1:R0Rd x Rr Z,C 2 MUL Rd,Rr Multiplica sin signo d,r[0,31] R1:R0Rd x Rr Z,C 2
MULS Rd,Rr Multiplica con signo d,r[0,31] R1:R0Rd x Rr Z,C 2
MULSU Rd,Rr Multiplica signo con
sin signo
d,r[0,31] R1:R0Rd x Rr
(Rd signed Rr unsigned)
Z,C
2
Permiten saltar a una instruccin en otra zona de memoria
de cdigo
4 tipos de instrucciones de salto
JMP: salto incondicional (jump)
Instrucciones de salto
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
El programa sigue ejecutndose a partir de la
direccin suministrada en la propia instruccin
PC dir
Salto incondicional directo
JMP dir
;Ejemplo de salto incondicional directo
;ponemos una etiqueta y el ensamblador calcula ;ponemos una etiqueta y el ensamblador calcula
;la direccin del salto
mov r1,r0
jmp farplc ;salto incondicional
. . . .
farplc: nop
La direccin de salto se obtiene sumando una
constante con signo (k) al PC
PC PC+k+1 -63<k<64
Salto incondicional relativo
RJMP k
;Ejemplo de salto incondicional relativo
;ponemos una etiqueta y el ensamblador calcula ;ponemos una etiqueta y el ensamblador calcula
;la constante k
; permite saltos cortos de +/- 2K
mov r1,r0
rjmp ok ;salto incondicional relativo
. . . .
ok: nop
La direccin de salto est en el registro Z
PC Z (esto es: PC r31:r30)
Salto incondicional indirecto
IJMP
;Ejemplo de salto incondicional indirecto
;;
. . . .
ldi r30,0 ;parte baja de la dir. de salto
ldi r31,$8 ;parte alta de la dir. de salto
ijmp ;salto a la direccin $800
. . . .
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)
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
Ejemplo de salto condicional relativo
BRNE Branch if Not Equal(Z=0)
;para realizar un bucle
eor r27,r27 ; borra r27 con una exor
bucle: . . .
. . .
inc r27 ; incrementa r27
cpi r27,5 ; compara r27 con 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 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
. . .
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
Ejemplo SKIP condicional
SBRC Rr,b
nop
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
Llamada a subrutina directo
CALL dir (Long Call to Subrutine)
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
. . .
error: rjmp error ;bucle infinito
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
Llamada a subrutina relativo
RCALL k (Relative Call to Subrutine)
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 ; calcula la direccin
routine: push r14 ;salva r14 en la pila
...
pop r14 ;restaura r14
ret
. . .
Resumen de Instrucciones de salto
RJMP Etiqueta Salto relativo -2K< Etiq-PC-1<2K PC Etiqueta Ninguno 2
JMP (1) Etiqueta Salto 0<Etiqueta<4M PC Etiqueta Ninguno 2
IJMP Salto indirecto PC Z Ninguno 3
RCALL Etiqueta Llamada a subrutina
relativa
-2K< Etiq-PC-1 <2K STACK PC
PCEtiqueta
Ninguno
3
CALL (1) Etiqueta Llamada a subrutina 0<Etiqueta<4M STACK PC
PC Etiqueta
Ninguno
3
ICALL Llamada a subrutina
indirecta
STACK PC
PC Z
Ninguno
4
RET Regreso de subrutina PC STACK Ninguno 4
(1) Slo disponibles para ATMEGA168PA y ATMEGA328PA
RET Regreso de subrutina PC STACK Ninguno 4
RETI Regreso de interrup. PC STACK I 4
CPSE Rd,Rr Compara, esquiva si
iguales
d,r[0,31] Si Rd=Rr PC PC+2
( 3)
Ninguno
01/02/03
SBRC Rr,b Esquiva si el bit est a
cero
r[0,31]
b[0,7]
Si (Rd(b)=0)
PC PC+2 ( 3)
Ninguno
01/02/03
SBRS Rr,b Esquiva si el bit est a uno r[0,31]
b[0,7]
Si (Rd(b)=1)
PC PC+2 ( 3)
Ninguno
01/02/03
Instrucciones de salto (ii)
SBIC P,b Esquiva si el bit del
puerto est a 0
P[0,31]
b[0,7]
Si (E/S(P,b)=0)
PC PC+2 ( 3)
Ninguno 1 o 2 o
3
SBIS P,b Esquiva si el bit del
puerto est a1
P[0,31]
b[0,7]
Si (E/S(P,b)=1)
PC PC+2 ( 3)
Ninguno 1 o 2 o
3
BREQ Etiqueta Salta si iguales -64 <Etiq-PC-1- <64 Si (Z=1)
PC Etiqueta
Ninguno 1 o 2
BRNE Etiqueta Salta si distintos -64 <Etiq-PC-1- <64 Si (Z=0)
PC Etiqueta
Ninguno 1 o 2
BRCS Etiqueta Salta si C est a 1 -64 <Etiq-PC-1- <64 Si (C=1)
PCEtiqueta
Ninguno 1 o 2
PCEtiqueta
BRCC Etiqueta Salta si Cest a 0 -64 <Etiq-PC-1- <64 Si (C=0)
PC Etiqueta
Ninguno 1 o 2
BRSH Etiqueta Salta si igual o mayor -64 <Etiq-PC-1- <64 Si (C=1)
PC Etiqueta
Ninguno 1 o 2
Instrucciones de salto (iii)
BRLO Etiqueta Salta si menor -64 <Etiq-PC-1- <64 Si (C=0) PC Etiqueta Ninguno 1 o 2
BRMI Etiqueta Salta si negativo -64 <Etiq-PC-1- <64 Si (N=1) PC Etiqueta Ninguno 1 o 2
BRPL Etiqueta Salta si positivo -64 <Etiq-PC-1- <64 Si (N=0) PC Etiqueta Ninguno 1 o 2
BRHS Etiqueta Salta si H est a 1 -64 <Etiq-PC-1- <64 Si (H=1) PC Etiqueta Ninguno 1 o 2
BRHC Etiqueta Salta si H est a 0 -64 <Etiq-PC-1- <64 Si (H=0) PC Etiqueta Ninguno 1 o 2
BRTS Etiqueta Salta si T est a 1 -64 <Etiq-PC-1- <64 Si (T=1) PC Etiqueta Ninguno 1 o 2
BRTC Etiqueta Salta si T est a 0 -64 <Etiq-PC-1- <64 Si (T=0) PC Etiqueta Ninguno 1 o 2
BRVS Etiqueta Salta si V est a 1 -64 <Etiq-PC-1- <64 Si (V=1) PC Etiqueta Ninguno 1 o 2
BRVC Etiqueta Salta si V est a 0 -64 <Etiq-PC-1- <64 Si (V=0) PC Etiqueta Ninguno 1 o 2 BRVC Etiqueta Salta si V est a 0 -64 <Etiq-PC-1- <64 Si (V=0) PC Etiqueta Ninguno 1 o 2
BRIE Etiqueta Salta si I est a 1 -64 <Etiq-PC-1- <64 Si (I=1) PC Etiqueta Ninguno 1 o 2
BRID Etiqueta Salta si I est a 0 -64 <Etiq-PC-1- <64 Si (I=0) PC Etiqueta Ninguno 1 o 2
Test (CP Rd,Rr) Booleana Mnemonico Comentario
Rd Rr (N V) = 0
BRGE Signo
Rd < Rr
(N V) = 1
BRLT Signo
Instrucciones de salto (iv)
BRGE Etiqueta Salta si mayor o
igual, (signo)
-64 <Etiq-PC-1- <64 Si (NV=0) PC
Etiqueta
Ninguno 1 o 2
BRLT Etiqueta Salta si menor (signo) -64 <Etiq-PC-1- <64 Si (NV=1) PC Etiqueta Ninguno 1 o 2
Rd < Rr
(N V) = 1
BRLT Signo
Rd = Rr Z = 1 BREQ Signo/Sin signo
Rd Rr
Z = 0 BRNE Signo/Sin signo
Rd Rr
C = 0 BRCC/ BRSH Sin signo
Rd < Rr C = 1 BRCS/BRLO Sin signo
Carry C=1 BRCS Simple
Sin carry C=0 BRCC Simple
Negativo N=1 BRMI Simple
Positivo N=0 BRPL Simple
Overflow V=1 BRVS Simple
Sin overflow V=0 BRVC Simple
Cero Z=1 BREQ Simple
No cero Z=0 BRNE Simple
LSL Rd Desplazamiento a la
izquierda
d[0,31] Rd(n+1) Rd(n),
Rd(0) 0, C Rd(7)
Z,C,N,V,H
1
LSR Rd Desplazamiento a la
derecha
d[0,31]
Rd(n) Rd(n+1),
Rd(7) 0, C Rd(0)
Z,C,N,V
1
ROL Rd Rotacin a la izquierda d[0,31] Rd(n+1) Rd(n),
Rd(0) C, C Rd(7)
Z,C,N,V,H
1
ROR Rd Rotacin a la derecha d[0,31] Rd(n) Rd(n+1),
Rd(7) C, C Rd(0)
Z,C,N,V,
1
ASR Rd Desplazamiento
aritmtico a la derecha
d[0,31] Rd(n) Rd(n+1),
Rd(7) Rd(7), C Rd(0)
Z,C,N,V,
1
Instrucciones de bit y bit-test
Rn C
0
Rn C 0
Rn C
7
Rn
C
Rn C
LSL
LSR
ASR
ROR
ROL
SWAP Rd Intercambia nibbles d[0,31] Rd(3..0)Rd(7.4) Ninguno 1
SBI P,b Poner a 1 el bit b del puerto IO b[0,7]
P[0,31]
IO(P,b)1 Ninguno
2
CBI P,b Poner a 0 el bit b del puerto IO b[0,7]
P[0,31]
IO(P,b)0 Ninguno
2
SEcc Poner a 1 el bit cc del cc
Instrucciones de bit y bit-test
SEcc
1
Poner a 1 el bit cc del
registro de estado
cc
1
CLcc
1
Poner a o el bit cc del registro
de estado
cc
1
cc= C,N,T,Z,I,V,H,S
NOP Nada Ninguno 1
BREAK Para depuracin Ninguno N/A
WDR Reinica el temporizador del perro
guardin
Ninguno 1
SLEEP Dormir Ninguno 1
Instrucciones de control
ndice
1. Introduccin
2. Descripcin general
3. Arquitectura interna
4. Organizacin de memoria
78
4. Organizacin de memoria
5. Modos de direccionamiento
6. Juego de instrucciones
7. 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
Directivas de ensamblador
Sintaxis: .CSEG
DSEG-Data Segment
Sintaxis: .DSEG
BYTE - Reserva bytes a una variable en memoria
Reserva en memoria de datos. Posible slo en DSEG
Sintaxis: label: .BYTE expresin
Var1: .BYTE 1
Tabla: .BYTE 10
Son comandos al programa que genera el cdigo objeto y
que se encuentran mezclados en el fichero fuente con las
instrucciones del microcontrolador.
DEF Asigna un nombre simblico a un registro.
Sintaxis: .DEF symbol=register
Directivas de ensamblador (ii)
Sintaxis: .DEF symbol=register
.DEF temp = r16
.DEF ior= r0
EQU Smbolo igual a expresin
Sintaxis: .EQU label = expression
.EQU puertas = 2
ORG Establece la direccin inicial de memoria
Sintaxis: .ORG expression
Directivas de ensamblador (iii)
.DSEG ;comienza el segmento de datos
.ORG 0X37 ;Direccin $37 de la memoria de datos
;Si no se indica direccin, por defecto $60 ;Si no se indica direccin, por defecto $60
Variable: .BYTE 1
.CSEG ;comienza el segmento de cdigo
.ORG 0x10 ;direccin $10 de la memoria de programa
mov r0,r1
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
ndice (ii)
82
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
Reloj de sistema y opciones de reloj (i)
Fuentes
- Externo
- Oscilador de Cristal
RC calibrado
Reloj de sistema y opciones de reloj (ii)
RC calibrado
Watch-Dog
Actan sobre:
- AVR clock control unit
mediante un Prescaler
- Circuito de Reset
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
Reloj de sistema y opciones de reloj (iii)
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
Unidad de control y distribucin de reloj
- Adapta el consumo al tipo de aplicacin Permite
apagar aquellos mdulos que no sean usados
- Adapta el consumo al tipo de aplicacin.
- Modos bajo consumo (instruccin Sleep)
Reloj de sistema y opciones de reloj (iv)
- Modos bajo consumo (instruccin Sleep)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
ndice (ii)
87
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
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.
Circuito de RESET
vector de RESET.
Causas que generan un RESET:
- Power on RESET (Reset de encendido del dispositivo)
- RESET externo
- Reloj Perro guardin (Watchdog Reset)
- Detector de apagones (Brown-out detectors)
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de Entrada/Salida
ndice (ii)
89
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
Puertos de entrada/salida
- PB
7-0
- PC
6-0
- PD
Entrada/Salida
- PD
7-0
Temporizadores
- Timer 0
- Timer 1
Ejemplos de dispositivos de Entrada
Resistencia
de pull-up
Eliminador de
rebotes
Ejemplos de dispositivos de Entrada
Resistencias
de pull-up
Teclado matricial: Con 8 lneas de entrada leemos 16 pulsadores
Son entradas/salidas digitales que permiten
leer/escribir valores lgicos en los pines.
Tpicamente: 1=5V, 0 =0V
3 puertos de 8 bits: Puerto B, Puerto C y Puerto D
Puertos E/S
3 puertos de 8 bits: Puerto B, Puerto C y Puerto D
Los puertos tienen funciones alternativas. Ej.
PB0: Capturador de eventos del temporizador o Salida de
reloj interno o Interrupcin 0 ante cambio en el PIN
Activar la funcin alternativa de un PIN no afecta al
resto del pines del puerto
Puertos B, C y D
- Zona baja de E/S
- Permite SBI, CBI, IN, OUT,
SBIC,SBIS,
- modos directos e indirectos
Acceso a Puertos y Timer1
- modos directos e indirectos
Registros SREG y SPL
- Zona alta de la ES
- Permite IN, OUT
- modos directos e indirectos
Timer1
- Extensin E/S
- Slo modos directos e indirectos
Resistencia Pull-up
Salida
Configuracin
Esquema general de un PIN de un
Puerto E/S
Entrada
Los pines del puertos tienen resistencias de Pull-Up
que pueden activarse
Tienen un circuito de sincronizacin para leer los
valores lgicos.
Puertos E/S
valores lgicos.
Cada puerto tiene asociado 3 registros: (S={B,C,D})
DDRX
7-0
: Configura la direccin de cada PIN (entrada o salida)
PORTX
7-0
: Registro de datos del puerto para escribir en el puerto
PINX
7-0
: Permite leer directamente en el PIN independientemente del
valor DDRX
i
Resistencia
Pull-up
Salida
Configuracin
Esquema general del pin i del Puerto B
PBi
DDRBi
PORTBi
Entrada
PINBi
DDRB
7-0
(R/W): Data Direction Register B
El valor del bit DDBi indica la direccin del pin PBi (0
para entrada, 1 para salida)
Uso del Puerto B (C y D son similares)
PINB
7-0
(R):
Permite la lectura de los valores lgicos de los pines
(tanto de entrada como de salida)
Registro PORTB
7-0
(R/W):
- DDRBi configurado como salida:
Uso del Puerto B (C y D son similares)
El valor de PORTBi se muestra en el PIN de salida PBi
(salida digital)
- DDRBi configurado como entrada:
Se activa la resistencia de pull-up del PIN Pbi al
escribir un 1 en el PORTBi
Puerto Registro Direccin
B PINB 0x03 (0x23)
DDRB 0x04 (0x24)
PORTB 0x05 (0x25)
C PINC 0x06 (0x26)
Puertos E/S
100
C PINC 0x06 (0x26)
DDRC 0x07 (0x27)
PORTC 0x08 (0x28)
D PIND 0x09 (0x29)
DDRD 0x0a (0x2a)
PORTD 0x0b (0x2b)
Salida
Configuracin
Ej. PIN PBi configurado como salida
PBi
DDRBi
PORTBi
1
Entrada
PINBi
Resistencia
Pull-up
activada
Salida
Configuracin
Ej. PIN PBi configurado como entrada
(Resistencia pull-up activada)
PBi
DDRBi
PORTBi
0
X 1
Entrada
PINBi
X 1
Ejemplo 1: Establecer el puerto B como salida y activar el
PINB3 a '1' y el PINB6 a '0'
LDI R16,0xFF
OUT DDRB,R16 ;Puerto entero como salida
Puertos E/S
OUT DDRB,R16 ;Puerto entero como salida
SBI PORTB,3 ;Establecer el bit 3 a 1
CBI PORTB,6 ;Establecer el bit 6 a 0
Ejemplo 2: Establecer el PINC4 del puerto C como entrada
y tomar una decisin en funcin del valor ledo:
CBI DDRC,4 ;PIN4 como entrada DDRC4=0
SBIS PIND,4 ;Esquiva una instruccin si PIND4=1
Puertos E/S
Ejercicio: Escribir un cdigo equivalente con la
instruccin SBIC
JMP PD4_ES_0 ;Salto si PIND4=0
JMP PD4_ES_1 ;Salto si PIND4=1
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
ndice (ii)
105
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
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
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.
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
Interrupciones
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.
Tabla de verctores de interrupcin
(ATmega168pa)
Ejemplo de incializacin de la tabla
de vectores de interrupcin
;Address Labels Code Comments
0x000 jmp RESET ; Reset Handler
0x002 jmp EXT-INT0 ; IRQ0 Handler
0x004 jmp EXT-INT1 ; IRQ1 Handler
0x006 jmp PCINT0 ; PCINT0 Handler 0x006 jmp PCINT0 ; PCINT0 Handler
0x008 jmp PCINT1 ; PCINT1 Handler
ox00A jmp PCINT2 ; PCINT2 Handler
ox00C jmp WDT ; watchdog timer Handler
ox00E jmp TIM2_COMPA ; Timer2 Compare A Handler
ox010 jmp TIM2_COMPB ; Timer2 Compare B Handler
ox012 jmp TIM2_OVF ; 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 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
Ejemplo de rutina de interrupcin
.CSEG
.ORG 0
JMP main
JMP IRQ0_handler
JMP IRQ1_handler
. . .
Main: . . .
{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
8. Reloj del sistema
9. Circuito de Reset
10. Puertos de E/S
ndice (ii)
112
11. Interrupciones
12. Temporizadores
13. Herramientas de programacin y simulacin
Hay 3 timers disponibles.
Estudiaremos el Timer 1 (16bits)
Funcionalidad:
- Generador eventos peridicos
Temporizadores
- Contador de eventos
- Generador de seales
- PWM (Pulse Width Modulartor)
- Auto reinicio al alcanzar valores programados
- Prescaler (divisor de frecuencias)
- Interrupciones
Esquema general del temporizador 1 (16 bits)
Temporizadores
Registro temporal necesario
al ser el BUS de 8 bits
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
Temporizadores
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
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 Temporizador parado
Temporizadores
0 0 1 Frecuencia clk/1
0 1 0 Frecuencia clk/8
0 1 1 Frecuencia clk/64
1 0 0 Frecuencia clk/256
1 0 1 Frecuencia clk/1024
1 1 0 Pin T1 en flanco de bajada
1 1 1 Pin T1 en flanco de subida
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.
Temporizadores
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
Registros de habilitacin de interrupciones
Temporizadores
Registro de banderas de interrupciones
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
Temporizadores
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)
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
Temporizadores
2 Parte baja del registro. Por ejemplo OCR1AL
LDI R16,0x10
STS OCR1AH,R16 ;Escritura de la parte alta,realmente no
;se escribe el registro, se queda en un
;registro temporal
LDI R16,0x02
STS OCR1AL,R16 ;Se dispara escritura simultnea de 16
;bits: 8 desde un registro temporal y 8
;desde el bus del sistema
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
Temporizadores
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
Solucin del ejemplo
LDI R16,0x3D ;Carga 0x3D09 en OCR1A
STS OCR1AH,R16 ;Primero parte alta pero OCR1A
;todava queda inalterado. No se
;puede usar OUT.
Temporizadores
;puede usar OUT.
LDI R16,0x09
STS OCR1AL,R16 ;Tras escribir la parte baja se
;escribe el registro completo
;de 16bits
LDI R16,0b00001011 ;Activa el modo CLC, bit WGM12=1
;Prescaler CLK/64
STS TCCR1B,R16 ;A partir de esta instruccin el
;timer est funcionando
Bibliografa
Instruction Set datasheet.
Atmegax8pa datasheet.
Microcontroller projects with the atmel controller. Gadre,
Dhananjay.
Atmel AVR microcontroller primer: programming and
124
Atmel AVR microcontroller primer: programming and
interfacing. Barlett and Pack
Embedded Systems Design with the Atmel AVR
Microcontroller. Steven Barret.

También podría gustarte