Sistemas Microprocesados
Sistemas Microprocesados
Sistemas Microprocesados
MICROPROCESADOS
Marco Yacelga Pinto
marco.yacelgap@epn.edu.ec
Evaluacin
I y II bimestre:
Examen = 35 %
Prueba = 30 %
Consulta = 20 %
Deberes = 15 %
* (II bimestre) Elaboracin de un Proyecto = 20%.
Bibliografa
Programming and Customizing the AVR Microcontroller. McGraw Hill
Dhananjay V. Grade (2001).
Apuntes de la materia Microprocesadores I, Instituto Tecnolgico del
Mar, Mazatln Autor: Domnguez Arrellano Rufino J.
Manuales:
1. Atmel, 8 bit AVR, Instruction Set
2. Atmel, 8 bit AVR, Microcontroller with 16K Bytes In-System Programmable
Flash.
Objetivos
Conocer los fundamentos de los Sistemas Microprocesados y aplicar
los conocimientos en el diseo de circuitos.
Conocer los fundamentos a ser aplicados en el desarrollo de su
carrera.
Contenido
CAPTULO 1: INTRODUCCIN
Captulo 2: INTRODUCCIN A LOS MICROCONTROLADORES AVR
Captulo 3: PROGRAMACIN DEL MICROCONTROLADOR
ATMEGA164P
Captulo 4: PRTICOS DE ENTRADA SALIDA SUBRUTINAS Y STACK
Captulo 5: CIRCUITOS TEMPORIZADORES CONTADORES E
INTERRUPCIONES.
Captulo 6: CONVERSOR DE ANALGICO A DIGITAL
Captulo 7: CIRCUITOS USART y SPI.
5
Contenido
CAPTULO 1: INTRODUCCIN
o Arquitectura bsica de un sistema microprocesado.
o Descripcin de los bloques funcionales de un computador.
o Estructura interna de un microprocesador.
o Arquitectura de un microprocesador tpico.
o Diferencias entre las arquitecturas CISC y RISC.
o Resolucin de un problema con un microcontrolador.
CAPTULO I
INTRODUCCIN
INTRODUCCIN
INTRODUCCIN
INTRODUCCIN
Sistema microprocesado:
Todas Las funciones del sistema sern
controladas por el microprocesador P.
Un sistema microprocesado debe estar
formado al menos por un microprocesador
UP.
La funcionalidad de un microprocesador
depende de las instrucciones del programa y
de la interaccin con el medio externo a
travs de las entradas y salidas del sistema
microprocesado.
10
INTRODUCCIN
11
INTRODUCCIN
Ejemplo:
16 lneas = 216=65.536 posiciones = 64K
32 lneas = 232=4.294.467.296 = 4 Gigas (Pentium)
Zn = 2n ; donde n = nmero de lneas
12
INTRODUCCIN
13
INTRODUCCIN
Seales de
lectura/escritura
Ciclos de espera
Interrupciones
14
INTRODUCCIN
15
INTRODUCCIN
16
INTRODUCCIN
INTRODUCCIN
18
INTRODUCCIN
19
INTRODUCCIN
Descripcin de bloques funcionales
Sistemas de memoria
Direccin: Es la posicin de identificacin de
una palabra en memoria.
Longitud/tamao de palabra: Cantidad de bits
que puede almacenar cada posicin.
Capacidad = # de posiciones x longitud de palabra
Ejemplo:
8K x 4 : 8192 posiciones de 4 bits c/u
2K x 8 : 2048 posiciones de 8 bits c/u
20
INTRODUCCIN
Descripcin de bloques funcionales
Sistemas de memoria
Memoria no volatil EPROM 2732
Organizacin de memoria: 4K x 8
o Tamao de palabra = 8
o Posiciones = 4K = 4096
o # lneas direccin = 12
Tiempo de acceso: 450 ms
Descripcin de terminals:
A0-A11 Lneas de direccin
D0-D7 Entrada de datos/salidas de
datos
G Habilitacin para lectura
E Enable
21
INTRODUCCIN
Descripcin de bloques funcionales
Sistemas de memoria
Memoria volatil SRAM 6116
Organizacin de memoria: 2K x 8
o Tamao de palabra = 8
o Posiciones = 2K = 2048
o # lneas direccin = 11
22
INTRODUCCIN
Descripcin de bloques funcionales
Sistemas de memoria
Memoria volatil SRAM 6116
Mode
Lectura
Escritura
Alta Z
CS
L
L
H
OE
L
H
H
WE
H
L
X
I/O
Data out
Data in
Alta Z
23
INTRODUCCIN
Descripcin de bloques funcionales
Bus de Direcciones:
Las lneas ms significativas del bus de direcciones que sale del procesador
seleccionan el chip al que accedemos.
Las lneas menos significativas del bus de direcciones que sale del procesador
seleccionan la posicin de memoria (direccin fsica) dentro del chip.
24
INTRODUCCIN
Descripcin de bloques funcionales
Sistemas de memoria
Mapas de memoria: Organizacin de las distintas unidades de memoria
(Chips) en el espacio de direccionamiento de un procesador.
25
INTRODUCCIN
Sistemas de memoria
26
INTRODUCCIN
Ejercicio 1 (1)
Se tiene un microprocesador cuya arquitectura para el manejo de
datos es de 8 bits y posee 16 lneas de direccionamiento. Se dispone
de dos memorias de 16KB. Realice el diagrama para un ptimo
direccionamiento.
Resolucin:
memoria= 16K = 24K x 8 = 214
o Bus de datos = 8
o Bus de direcciones = 14
27
Ejercicio 1 (2)
INTRODUCCIN
28
INTRODUCCIN
Ejercicio 1 (3)
Mapa de memoria
A 15
A14
0000 H
MEM 1
MEM 2
16 K
16 K
3FFF H
4000 H
7FFF H
8000 H
BFFF H
C000 H
FFFF H
RANGO DE POSICIONES
$0000
$3FFFF
29
INTRODUCCIN
Programa
---------------------------------------------------------------
FETCH
Microprocesador
-Datos
-Resultados Temporales
Dispositivos E/S
Memoria
Sistema Microprocesado
30
Banco de
registros
ALU
Bus Interno
INTRODUCCIN
BIU
PC
IR
FPU
UCT
ID
Decodificador de
Instrucciones
31
INTRODUCCIN
Memoria
Bus Interno
BIU
E/S
PC
IR
32
INTRODUCCIN
ID
Decodificador de
Instrucciones
INTRODUCCIN
Registro acumulador
INTRODUCCIN
FPU
FPU (Unidad de Punto Flotante): Unidad de ejecucin dedicada,
diseada para realizar las funciones matemticas sobre los nmeros
decimales.
35
INTRODUCCIN
BIU
T
A
R
Registro: Elemento ms
pequeo que puede retener un
dato para almacenar
temporalmente la informacin.
36
INTRODUCCIN
o Elementos de E/S
37
INTRODUCCIN
INTRODUCCIN
Bus Interno
UCT
IR
ID
Decodificacin de
Instrucciones
39
INTRODUCCIN
Arquitectura de computadores
40
INTRODUCCIN
Arquitectura de computadores
Memoria cach: Es un tipo de memoria SRAM de alta
velocidad que est integrada en el procesador. Su finalidad
es reducir el tiempo de acceso a los datos mediante el
almacenamiento de informacin a la que el procesador
accede continuamente.
41
INTRODUCCIN
Arquitectura de computadores
Tipos de memoria cach:
Cach de 1er nivel (L1): Integrada en el ncleo del
procesador. Est divida en dos partes, una para instrucciones y
otra para datos. Puede variar de 64 a 256 [KB]
Cach de 2do nivel (L2): Integrada en el procesador, este tipo
de memoria ofrece las mismas ventajas que la cache L1 sin
embargo es ms lenta. Puede llegar a superar los 2 MB.
Cach de 3er nivel (L3): Se encuentra integrada entre la placa
base y el procesador, es ms lenta que la cach L2.
42
INTRODUCCIN
Arquitectura de computadores
Pipelines:
Es el proceso segn el cual, mientras una instruccin es ejecutada, otra
esta siendo interpretada por el ordenador y una ms est siendo leda.
F1
D
F: FETCH
D: DECODE
E: EXECUTE
D1
E1
F2
D2
E2
F3
D3
E3
43
INTRODUCCIN
Arquitectura Harvard
Es un modelo de arquitectura en el cual se separa fsicamente el
almacenamiento de datos e instrucciones.
CAPTULO 2
Microcontroladores AVR
46
AVR
Microcontrolador
Un microcontrolador es un ordenador miniaturizado de mayor o menor
potencia y complejidad, formado por una unidad de proceso, memoria,
dispositivos y un conjunto de instrucciones propias de cada micro.
47
AVR
Microcontrolador
Ciclo de mquina:
El tiempo mnimo necesario para ejecutar una instruccin.
Est formado por un nmero determinado de ciclos o perodos de
reloj.
Cada microcontrolador posee su propio valor de ciclo de mquina:
Atmel Un ciclo de mquina comprende 12 ciclos de reloj
Microchip 12F675 Un ciclo de mquina comprende 4 ciclos de
reloj
48
AVR
Microcontrolador caractersticas
Timers: Se emplean para controlar periodos de tiempo y para llevar la cuenta de
acontecimientos que suceden en el exterior.
Comunicacin serial: Conjunto de interfaces que permiten al microcontrolador
comunicarse con otros dispositivos externos, otros buses de microprocesadores,
buses de sistemas y buses de redes a fin de adaptarlos con otros elementos bajo
otras normas y protocolos.
1. UART, adaptador de comunicacin serie asncrona.
2. USART, adaptador de comunicacin serie sncrona y asncrona
3. USB (Universal Serial Bus).
AVR
Microcontrolador - caractersticas
Interrupciones: Permiten ejecutar un subproceso en un instante
preciso o eliminar total o parcialmente ciclos de consulta.
Reset: Provoca la reinicializacin del funcionamiento del
microcontrolador, un comienzo a funcionar desde cero.
50
AVR
51
AVR
52
AVR
Microcontrolador Atmega164p
Microcontrolador de
8 bits de alto
rendimiento, bajo
consumo, y gran
capacidad de
memoria.
Arquitectura
avanzada RISC
131 instrucciones
32 registros de
trabajo de 8 bits
para propsito
general.
53
AVR
Microcontrolador Atmega164p
Especificacin
Valor
16/32/44 KB
1/2/4 KB
512 B/1KB/2KB
Timers
Comunicacin serial
2 USART
Interrupciones
22
Conversor ADC
10 bits 8 canales
Rango de voltaje
2,7 - 5,5 V
200 mA
32
54
AVR
55
AVR
56
AVR
57
AVR
58
AVR
59
AVR
60
AVR
61
AVR
62
AVR
63
AVR
AVR
AVR
Atmega164p -MemoriasMemoria
Programa
Datos
Tipo
16 KB de memoria FLASH
1280 Bytes de memoria RAM
esttica (SRAM)
512 Bytes de EEPROM
66
AVR
4096
2048
1024
32
16
4 = 14
AVR
$C3
AF
$0000
1 0 1 0 0 0 1
$C3
93
$0001
0 1 1 1 0 1 1
$32
72
$0002
0 0 1 0 1 0 1
$AF
1A
$0003
0 0 0 1 0 1 0
..
..
0 0 0 1 0 1 0
$FF
FF
$1FFE
$FF
FF
$1FFF
General
1 Instruccin = 8 bits
1 Instruccin = 16 bits
AVR
contiene:
32 registros de propsito
general
64 registros de entrada/salida
160 registros adicionales de
E/S
1024 Bytes para datos
32 Registros de
propsito generaal
$000
$01F
64 Registros de E/S
$020
Informacin de E/S y
perifricos
$05F
160 Registros de E/S
adicionales
$060
Informacin de nuevos
perifricos
$0FF
Almacenamiento de
datos de usuario
1 KB para datos
Incluye al stack
$100
$4FF
69
AVR
R0
$000
R1
$001
R2
$002
R3
$003
R15
$00F
R25
$019
R26
$01A
R27
$01B
R28
$01C
R29
$01D
R30
$01E
R31
$01F
Registros
Punteros
70
AVR
R26
R27
$01A
$01B
R28
R29
R30
$01C
$01D
$01E
R31
$01F
71
AVR
XH
R27
0 7
XL
R26
YH
R29
ZH
0 7
YL
R28
ZL
R31
0 7
R30
72
AVR
$000
$01F
64 Registros de E/S
$020
$000
Registros de
E/S
$05F
160 Registros de E/S
adicionales
$020
$060
$03F
$05F
$0FF
1 KB para datos
Incluye al stack
$100
Direccin como
registro E/S
Localidad de
memoria
$4FF
73
AVR
$020
64
Registros de
E/S
$03F
I T H S V N Z C
$05F
74
AVR
75
AVR
$020
Registros de
E/S
$03D
$03E
$03F
SPL
SPH
I T H S V N Z C
$05D
$05E
$05F
76
AVR
Atmega164p Memoria
Datos: EEPROM 512 Bytes
Se emplea un bus de direcciones de 9 lneas (9 bits)
256 128 64
1
32
16
= 9
77
AVR
Atmega164p Memoria
Datos: EEPROM 512 Bytes
El acceso a esta memoria no se realiza directamente mediante
instrucciones, sino a travs de registros de entrada/salida.
$000
$1FF
78
AVR
Atmega164p Memoria
Datos: EEPROM 512 Bytes
Registros de la EEPROM: El acceso entre la CPU y la EEPROM es realizado
mediante los siguientes registros de E/S.
o Registro de Control (EECR)
o Registro de Datos (EEDR)
o Registros de Direcciones (EEARL-EEARH)
$000
$01F
$020
$021
$022
$020
EECR
EEDR
EEARL
EEARH
$03F
$040
$041
$042
79
CAPTULO 3
PROGRAMACIN DEL
MICROCONTROLADOR ATMEGA164P
80
Programacin AVR
Modos de Direccionamiento
Son los distintos modos de acceder a los datos en memoria por parte
del procesador.
La instruccin se compone de la operacin y los operandos
Operacin
Accin que se realiza sobre los operandos.
Los operandos Son los datos que intervienen en la operacin.
Se representan mediante los modos de direccionamiento.
81
Programacin AVR
Modos de Direccionamiento
Las instrucciones pueden ser clasificadas por el nmero de operandos.
Instrucciones sin operandos
Instrucciones con un operando Operando de destino
Instrucciones con dos operandos separados por una coma:
o 1ero = Operando destino
o 2do = Operando origen
Clase de instruccin
Instrucciones sin operandos
Modo de Direccionamiento
Implcito
Inmediato
Directo
Indirecto simple, con disminucin
previa, con incremento posterior o
con desplazamiento.
82
Programacin AVR
Modos de Direccionamiento
Directo a un Registro: El operando destino est contenido en el registro,
es decir situado en la direccin indicada en la instruccin.
OP=Cdigo de operacin de
la instruccin.
Ejemplo:
INC R16
CLR R22
83
Programacin AVR
Modos de Direccionamiento
Directo a dos Registro: En la instruccin se especifican los nmeros de los
registros que contienen los operandos de origen (Rr) y de destino (Rd).
OP=Cdigo de operacin de
la instruccin.
Ejemplo:
MOV R0,R1
84
Programacin AVR
Modos de Direccionamiento
Inmediato: En la instruccin se especifica un nmero que corresponde al
operando de origen, es decir el dato est codificado en la propia instruccin.
OP=Cdigo de operacin de
la instruccin.
Ejemplo:
MOV A,#19H
* A=acumulador
85
Programacin AVR
Modos de Direccionamiento
Directo al Registro de E/S: En la instruccin se especifica el nmero del
registro de E/S que contiene el operando de origen o de destino.
OP=Cdigo de operacin de
la instruccin.
86
Programacin AVR
Modos de Direccionamiento
Directo a la SRAM: En la instruccin se indica mediante 16 bits la direccin de
la localidad de la SRAM que contiene el operando de origen o de destino
87
Programacin AVR
Modos de Direccionamiento
88
Programacin AVR
Modos de Direccionamiento
Indirecto a la SRAM con disminucin previa: En este caso el puntero
disminuye previamente su contenido antes de ejecutar la operacin
89
Programacin AVR
Modos de Direccionamiento
Indirecto a la SRAM con increment posterior: En este caso el puntero
incrementa su contenido despus de ejecutar la operacin
90
Programacin AVR
Modos de Direccionamiento
Indirecto a la SRAM con desplazamiento: En la instruccin se especifica
el puntero y un valor, que sumados apuntan a la localidad SRAM que
contiene el operando de origen o de destino.
91
Programacin AVR
Modos de Direccionamiento
Direccionamiento a memoria de programa: La direccin del Byte se
especifica por el contenido del registro Z. En este caso el puntero Z
permite leer constantes de un Byte de la memoria del programa.
92
Programacin AVR
Modos de Direccionamiento
Direccionamiento a memoria de programa con incremento posterior:
Similar al anterior direccionamiento, pero adicionalmente el punter
incrementa su contenido despus de ejecutar la operacin.
93
Programacin AVR
Intrucciones de Uc ATmega164p
Resumen:
En los microcontroladores los registros son usados para almacenar datos.
La informacin puede ser un Byte de dato para ser procesado, una direccin
que apunta a los datos para ser recuperados.
Para programar en assembler se debe tener conocimiento sobre
caractersticas del microcontrolador tales como:
Los registros
La arquitectura
El modo de procesamiento de datos
94
Programacin AVR
Intrucciones de Uc ATmega164p
Formatos para representar datos:
Existen cuatro formas para representar datos en AVR assembler:
FORMATO
REPRESENTACIN
EJEMPLO
0x99 / 0X25 / 0x200 / 0x0F
$99 /
0b10001110
0B10001110
Decimal
Slo el nmero
12 / 20 / 32
ASCII
Comillas simples
2 / 20
Binario
$25 /$200
Programacin AVR
Intrucciones de Uc ATmega164p
Directivas
Instrucciones
Directivas
Pseudo- Instrucciones
1) .EQU (Equate): Usada para definir un valor constante o una direccin fija. Esta
directiva asocia un nmero constante con un dato o una etiqueta de direccin, de
modo que cuando una etiqueta aparece en el programa, su constante ser
reemplazada por la etiqueta.
Ejemplo:
.EQU
COUNT = 0x25
96
Programacin AVR
Intrucciones de Uc ATmega164p
Directivas
2) .SET Usada para definir un valor constante o una direccin fija. A
diferencia de .EQU, consiste en que el valor asignado por .SET puede ser
reasignado despus.
3) .ORG (Origin): Indica el comienzo de la direccin.
4) .INCLUDE: Indica a assembler que agregue el contenido de un archivo
al programa.
Ejemplo:
.INCLUDE "m164pdef.inc"
97
Programacin AVR
Intrucciones de Uc ATmega164p
Estructura del lenguaje assembler
Una instruccin contiene 4 campos:
[label:]
mnemonic
[operandos]
[; comentario]
LDI Mnemonic
98
Programacin AVR
Intrucciones de Uc ATmega164p
Estructura del lenguaje assembler
99
Programacin AVR
Intrucciones de Uc ATmega164p
Reglas para etiquetado
El nombre de las etiquetas debe ser nico.
Para el nombre de las etiquetas se puede usar letras
maysculas, minsculas, los dgitos del 0 al 9, y caracteres
especiales (? @ . _ $)
El inicio de la etiqueta debe ser una letra.
No se puede usar etiquetas con nombres similares a
instrucciones.
100
Programacin AVR
Intrucciones de Uc ATmega164p
Las instrucciones son clasificadas de acuerdo a la accin que realizan:
INSTRUCCIN
FUNCIN
De transferencia de datos
De salto y bifurcacin
Aritmticas y Lgicas
De control
101
Programacin AVR
Intrucciones de Uc ATmega164p
Nomencalatura: Registros y operandos
NOMENCALTURA
Rd
Registro destino
Rr
Registro fuente
Direccin de memoria
X, Y, Z
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
INSTRUCCIN
FUNCIN
MOV, MOVW
LDI
LPM
IN, OUT
103
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
LDI:
a) Formato:
LDI Rd, K
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
MOV: Permite copiar datos entre los Registros de Propsito General.
a) Formato:
MOV Rd, Rr
; Copiar Rr al registro Rd
Donde: Rd y Rr [R0-R31]
b) Ejemplo:
MOV R10,R20 ; R10=R20
105
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
LDS: Indica a la CPU que cargue o copie un byte desde una direccin en
la memoria de datos a los Registros de Propsito General.
a) Formato:
LDS Rd, k ; Cargar Rd con el contenido de la direccin k
Donde: Rd [R0-R31]
k es una direccin entre [$000 a $4FF] Espacio de memoria de datos
b) Ejemplo:
LDS R10,0x13A ; Carga R10 con el contenido de la localidad 13A
106
AVR
$000
$000
$020
$01F
64 Registros de E/S
$020
Registros de
E/S
$05F
160 Registros de E/S
adicionales
$060
$03F
$05F
$0FF
1 KB para datos
SRAM INTERNA
$100
$4FF
Direccin como
registro E/S
Localidad de
memoria
107
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
LDS:
b) Ejemplo:
LDS R5,0x200 ; Carga R5 con el contenido de la localidad $200
108
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
STS: Indica a la CPU que guarde el contenido de los Registros de Propsito
General a una direccin localizada en el espacio de memoria de datos.
a) Formato:
STS k,Rr ; Guarda el registro Rr en la localizacin k
Donde: k es una direccin entre [$000 a $4FF] Espacio de datos
b) Ejemplo:
STS 0x13A,R20 ; Copia el contenido de R20 en la localidad 13A
109
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
STS:
b) Ejemplo:
STS 0x220,R25 ; Guarda R25 en la localidad $220 de la SRAM interna
STS 0x38, R15 ; Guarda R15 en la localidad $038 de los registros de
E/S corresponde al Puerto B
110
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
No se puede copiar o guardar un valor directamente en la SRAM, este proceso
debe ser hecho por medio de los Registros de Propsito General.
Ejemplo:
LDI R19,OX99
STS 0X200, R19
; R19=0X99
; Guarda R19 en la localizacin 0x200
(SRAM INTERNA)
111
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
IN: Indica a la CPU cargar un byte desde un Registro de E/S a un Registro de
Propsito General.
a) Formato:
IN Rd,A ; Cargar una localidad de E/S al Registro de
Propsito General.
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
En el microcontrolador las 32 lneas E/S constituyen los 4 prticos de 8 bits
Para operar cada prtico utiliza 3 registros:
Entrada Pinx
Sentido o direccin del dato DDRx
Salida PORTx
113
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
En el microcontrolador las 32 lneas e E/S constituyen los 4 prticos de 8 bits
$000
$001
$002
$003
$004
$005
$006
$03F
PINA
DDRA
PORTA
PINB
DDRB
PORTB
$020
$021
$022
$023
$024
$025
$026
$05F
Entrada Pinx
Sentido o direccin del dato DDRx
Salida PORTx
114
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
b) Ejemplo:
IN R19,0X03 ; Carga R19 con la ubicacin $003 (R19=PINB)
Tambin:
IN R19,PINB ; Carga R19 con PINB
* En este caso se require incluir cabeceras en el programa.
115
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
IN vs LDS: Permiten copiar el contenido de un Registro de E/S a un
Registro de propsito general.
o El microcontrolador ejecuta la instruccin IN ms rpido que la LDS.
IN= 1 ciclo de mquina
LDS=2 ciclos de mquina
o La instruccin IN ocupa menos memoria de cdigo que LDS.
o IN= 2 bytes
o LDS=4 bytes
o La instruccin IN permite identificar a los Registros de E/S [$000-$03F]
116
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
OUT: Indica a la CPU cargar un Registro de Propsito General a un Registro
de E/S.
a) Formato:
OUT A,Rr ; Carga el registro a la localidad de E/S
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
OUT PORTD, R12 ; Copiar el contenido del R12 a PORTD
OUT SPL,R20
; Copia el contenido de R20 a SPL
117
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos
No se puede copiar o guardar un valor directamente en una localidad SRAM,
ni en un Registro de E/S.
Ejemplo:
IN R20, PIND
OUT PORTA, R20
118
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INSTRUCCIN
FUNCIN
Operaciones y comparaciones
INC, DEC
Incrementar y Disminuir
CPSE
Operaciones lgicas
COM, NEG
Complemento de uno y
complement a dos.
119
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
ADD: Indica a la CPU aadir el valor de Rr a Rd y guardar el resultado en el
Registro Rd.
a) Formato:
ADD Rd,Rr ; Aadir Rr a Rd y almacena el resultado en Rd
b) Ejemplo:
120
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
SUB: Indica a la CPU restar el valor de Rr de Rd y guardar el resultado en
Rd.
a) Formato:
SUB Rd, Rr ; Restar Rd-Rr
b) Ejemplo:
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INC: Incrementa el contenido de Rd en 1
a) Formato:
INC Rd ; Incrementa Rd
Donde: 0<d<31
b) Ejemplo:
INC R3
R3 = R3+1
122
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
DEC: Decrementa el contenido de Rd en 1
a) Formato:
DEC Rd ; Rd = Rd-1
Donde: 0<d<31
b) Ejemplo:
LDI R20,3
;
DEC R20
;
DEC R20
;
DEC R20
;
R20
R20
R20
R20
=
=
=
=
3
2
1
0
123
Programacin AVR
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
COM: Invierte o complementa el contenido de Rd, y guarda el resultado en
Rd.
a) Formato:
COM Rd ; Complemento
b) Ejemplo:
LDI R20,0x55
OUT PORTB,R20
COM R20
OUT PORTB,R20
;
;
;
;
de Rd
R20 = 0x55
Copiar R20 en PORTB
Complemento de R20
Copiar R20 a PORTB
PORTB= 0xAA
124
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin
INSTRUCCIN
FUNCIN
Saltos incondicionales
RCALL,ICALL,CALL, RET
CPSE
Saltos condicionados
BRxC, BRxS
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
BRNE: Usa la bandera 0 (Z) del registro de estado. Si el resultado de una
operacin es cero Z=1.
a) Formato:
BACK: ; inicio del lazo
.. ; cuerpo del lazo
DEC Rn
; decrementar Rn,
126
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 1: Aadir 3 al registro 19, 10 veces
.INCLUDE "m164pdef.inc"
LDI R16,10
LDI R19,0
LDI R20,3
REPETIR:ADD R19,R20
DEC R16
BRNE REPETIR
OUT PORTB, R19
;
;
;
;
;
;
;
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 2: Escribir un programa para cargar al PORTB con el valor 0x25 y
128
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 2:
.INCLUDE "m164pdef.inc
.ORG 0 ;Programa inicia en 0x000
LazoEx:
LazoIn:
LDI R16,0x25
OUT PORTB,R16
LDI R20,10
LDI R21,70
COM R16
OUT PORTB,R16
DEC R21
BRNE LazoIN
;
;
;
;
;
;
;
;
DEC R20
BRNE LazoEx
;
;
129
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
En forma general las instrucciones de salto se clasifican en:
o Incondicionales: Cambian el flujo del programa cada vez que son llamadas sin ningn
requisito o condicin.
1. JMP Salto directo
2. RJMP Salto relativo
130
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
JMP: Salta a una localidad de la memoria Flash (Memoria del programa). El destino
de salto puede ser una direccin una etiqueta.
Formato:
JMP k
; k = direccin /etiqueta
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
RJMP: Salta a una localidad de la memoria Flash (Memoria del programa) distante k
localidades.
Formato:
RJMP k
La direccin de salto se obtiene sumando una constante con signo (k) al PC.
PC PC+k+1
132
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
IJMP: La direccin de salto es indicada por el contenido del registro puntero Z.
Formato:
IJMP
La direccin de salto se obtiene del registro puntero Z.
PC Z
Ejemplo:
LDI R30, 0
; Parte baja de la direccin de salto
LDI R31, 0X8 ; Parte alta de la direccin de salto
IJMP
; Salto a la direccin $800
133
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Instrucciones que operan con la influencia de SREG (Registro de Estado).
INSTRUCCIN
CONDICIN
BRLO
Bifurcar si C = 1
BRSH
Bifurcar si C = 0
BREQ
BRNE
BRMI
Bifurcar si Z = 1
Bifurcar si Z = 0
Bifurcar si N = 1
BRPL
BRVS
BRVC
Bifurcar si N = 0
Bifurcar si V = 1
Bifurcar si V = 0
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
Registros de Propsito
General
SREG
ALU
H,S,V,N,Z,C
BANDERAS
135
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
RPG
SREG
ALU
H,S,V,N,Z,C
BANDERAS
D4
D3
D2
D1 D0
136
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
V=Bandera de desbordamiento
Se activa cuando el resultado de una operacin con nmeros con
32
RPG
S= Bit de signo
OR EXCLUSIVE entre bandera N y V.
SREG
ALU
H,S,V,N,Z,C
BANDERAS
D4
D3
D2
D1 D0
137
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
RPG
SREG
ALU
H,S,V,N,Z,C
BANDERAS
138
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
LDI R19,3
; R19 = 3
Z=0
DEC R19
; R19 = 2
Z=0
DEC R19
; R19 = 1
Z=0
DEC R19
; R19 = 0
Z=1
139
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
Mostrar el estado de las banderas C, H y Z :
LDI R20,0x38
; R20 = $38
LDI R19,0x2F
; R19 = $2F
ADD R19,R20
; R19 = R19+R20
Bandera
Estado
Detalle
Valores
D7 = 0 0110 0111
Carry = 1
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
Mostrar el estado de las banderas C, H y Z :
LDI R19,0x9C
; R19 = $9C
LDI R20,0x64
; R20 = $64
ADD R20,R19
; R20 = R20+R19
Bandera
Estado
Detalle
Valores
1 0000 0000
Carry = 1
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBRC: No considera la siguiente instruccin si el bit del registro es cero.
Formato:
SBRC Rr, b
Ejemplo:
SBRC R0,7 ; Omitir la siguiente instruccin si el bit 7 de R0 es 0
142
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBRS: No considera la siguiente instruccin si el bit del registro es uno.
Formato:
SBRS Rr, b
ejemplo:
SBRS R0,7 ; Omitir la siguiente instruccin si el bit 7 de R0 es 1
143
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBIC: No considera la siguiente instruccin si el bit del Registro de E/S es cero.
Formato:
SBIC A, b
; A = Registro E/S
ejemplo:
SBIC 0x3F,7 ; Omitir la siguiente instruccin si el bit 7 del R63 es 0
144
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBIS: No considera la siguiente instruccin si el bit del Registro de E/S es uno.
Formato:
SBIS A, b
; A = Registro E/S
ejemplo:
SBIC 0x3F,7 ; Omitir la siguiente instruccin si el bit 7 del R63 es 1
145
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
Formato
Funcin
CPI
CPI
Rd, k
CP
CP
Rd, Rr
CPC
CPC
Rd, Rr
CPSE
CPSE
Rd, Rr
Salto
146
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
NEMNICO
CPI
BREQ
CP
BRNE
CPC
BRSH
CPSE
BRLO
Saltar si es menor
FUNCIN
147
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Llamar a subrutinas
CALL: Guarda en el Stack Pointer la direccin de la prxima instruccin y salta a la
localidad de la flash con direccin k.
Formato:
CALL k
RCALL: Guarda en el Stack Pointer la direccin de la prxima instruccin y salta a
la localidad de la flash distante k localidades, desde la ubicacin de la instruccin
llamada.
Formato:
RCALL k
148
Programacin AVR
Intrucciones de Uc ATmega164p
Salto y bifurcacin Llamar a subrutinas
ICALL: Guarda en el Stack Pointer la direccin de la prxima instruccin, la
ejecucin del programa continua en la direccin especificada en el contenido del
puntero Z.
Formato:
ICALL
RET: Se emplea para volver de una subrutina previamente llamada por CALL
Formato:
RET
RETI: Obtiene desde el Stack la direccin que fue guardada por la interrupcin.
Formato:
RETI
149
Programacin AVR
Intrucciones de Uc ATmega164p
Subrutinas
Empleadas para facilitar y optimizar la programacin.
Son manejadas por Instruciones de Salto.
Las direcciones de retorno se almacenan en la PILA o STACK.
Puede existir subrutinas anidadas.
Una subrutina debe terminar con la instruccin de retorno (RET).
150
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos/ Manipulacin de bits:
SBI: Instruccin que permite escribir un bit del Puerto a 1 L.
Formato:
SBI PORTx, b
; b = 0,1,2,3,4,5,6,7
Ejemplo:
SBI PORTB,7
151
Programacin AVR
Intrucciones de Uc ATmega164p
Transferencia de datos/ Manipulacin de bits:
CBI: Instruccin que permite escribir un bit del Puerto a 0L.
Formato:
CBI PORTx, b
; b = 0,1,2,3,4,5,6,7
Ejemplo:
CBI PORTB,0
152
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones
Nemnico
Funcin
CLR
Limpia un registro
ROL
SEC
CLC
153
Programacin AVR
Intrucciones de Uc ATmega164p
Creacin del programa:
Editar Programa
Cdigo del programa/
Archivo fuente
Proyecto1.asm
Depurar/Ejecutar
.eep
.hex
.map
.lst
Inicializar
la
EEPROM
FLASH
Etiquetas
definidas en el
programa.
Muestra el binario, el
cdigo fuente y la
cantidad de memoria
que usa el programa
.obj
Entrada al
simulador
.err
Errores
154
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD: Carga el valor desde una localidad de la SRAM a los Registros de Propsito
General, utilizando direccionamiento indirecto.
Formato:
LD Rd, Registros_punteros
Ejemplo:
LD R16, X
155
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Post-incremento: El valor del puntero se incrementa posteriormente.
Formato:
LD Rd, Registros_punteros +
Ejemplo:
LD R16, X+
156
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Pre-Disminucin: El valor del puntero se disminuye previamente.
Formato:
LD Rd, - Registros_punteros
Ejemplo:
LD R16, -X
-1era ejecucin R16=Contenido apuntado por X decrementado en 1
157
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Desplazamiento: El valor del puntero se suma el desplazamiento.
Formato:
LDD Rd, Registros_punteros(X/Y) + q
Ejemplo:
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST: Guardar el contenido de los Registros de Propsito General a una direccin
localizada en la SRAM mediante direccionamiento indirecto .
Formato:
ST Registros_punteros,Rr
Ejemplo:
ST X,R16
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST con Post-incremento: El valor del puntero se incrementa posteriormente.
Formato:
ST Registros_punteros +, Rr
Ejemplo:
ST X+,R16
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST con Pre-Disminucin: El valor del puntero se disminuye previamente.
Formato:
ST -Registros_punteros,Rr
Ejemplo:
ST -X , R16
-1era ejecucin, la localidad apuntada por X recibe el contenido de R16
decrementado en 1
161
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
STD con Desplazamiento: El valor del puntero se suma el desplazamiento.
Formato:
STD Registros_punteros(Z/Y) + q, Rr
Ejemplo:
Programacin AVR
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LPM: Carga un byte del registro apuntado por Z a un registro destino mediante
direccionamiento indirecto. .
Ejemplo:
LDI ZH,high(Tabla*2) ;Inicializa el registro Z
LDI ZL,low(Tabla*2)
LPM r16,Z
;Carga una constante de la memoria de
programa apuntada por Z
15
Direccin
Seleccin
163
CAPTULO 4
Prticos de Entrada Salida
164
ADC
Timers
Interrupciones
Comunicacin serial
DDRX Registro de sentido del dato DDRx1, DDRx2, DDRx3, DDRx4, ,DDRx8
ADC
Timers
Interrupciones
Comunicacin serial
PORTx 7
PINx 7
DDRx
Salida 0
Entrada y Pull-Up
Salida 1
Escribir en los
prticos
NEMNICO
IN
INSTRUCCIN
FUNCIN
IN Rd, PINx
IN Rd, PORTx
IN Rd, DDRx
SBIC
SBIC PINx,b
SBIS
SBIS PINx,b
SBIC
SBIC PORTx,b
SBIS
SBIS PORTx, b
SBIC
SBIC DDRx,b
SBIS
SBIS DDRx,b
OUT
OUT PORTx, Rr
SBI
SBI PORTx,b
CBI
CBI PORTx, b
PUD
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
ADC: Permite sumar dos nmeros incluyendo el carry.
Formato:
ADC Rd, Rr
Ejemplo: Sumar 2 nmeros de 16 bits. Los nmeros son 3CE7 y 3B8D. Colocar el
resultado de la suma en R18 y R19, asumir R18 como el byte bajo. (Total=7874hex)
LDI
LDI
LDI
LDI
ADD
ADC
R16, 0x8D
R17, 0X3B
R18, 0xE7
R19, 0X3C
R18,R16
R19,R17
; R16=$8D
; R17=$3B
; R18=$E7
; R19=$3C
; R16=R16+R18=8D+E7=0x74 con C=1
; R19=R19+R17=3C+3B+1 = 0x78
171
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Restas
Nemnico
SUB
SBC
Instruccin
SUB Rd, Rr
SBC Rd, Rr
SUBI
SBCI
SBIW
SUBI Rd, K
SBCI Rd, K
SBIW Rd: Rd+1,K
Funcin
Rd=Rd-Rr
Rd=Rd-Rr-c
Rd=Rd-k
Rd=Rd-k-c
Rd+1:Rd=Rd+1:Rd-k
172
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Restas
Ejemplo 1: Escribir un programa para restar el 0x18 de 0x29 y guardar el
resultado en R21
LDI R21, 0x29
SUBI R21,0x18
; R21=$29
; R21=R21-18 = 29-18 = 11hex
173
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
SBC: Permite restar dos nmeros incluyendo el carry.
Formato:
SBC Rd, Rr
R18, 0x62
R19, 0X27
R20, 0x96
R21, 0X12
R18,R20
R19,R21
; R18=$E7
; R19=$27
; R20=$96
; R21=$12
; R18=R18-R20= 62-96 = CChex C=1
; R19=R19-R21-C=27-12-1 =14 hex
174
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Multiplicacin
Nemnico
Instruccin
MUL
MUL Rd, Rr
MULS
MULSU
Aplicacin
Byte1
Byte2
Nmeros sin
signo
Rd
Rr
R1
R0
MULS Rd, Rr
Nmeros con
signo
Rd
Rr
R1
R0
MULSU Rd, K
Nmeros sin
signo con
nmeros con
signo
Rd
Rr
R1
R0
175
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Multiplicacin
Ejemplo 1: Escribir un programa para multiplicar 0x25 por 0x65
LDI
LDI
MUL
R21,0x25
R22,0x65
R21,R22
; R21=$25
; R22=$65
; 0x25*0x65= E99, R1=0x0E y R0=0x99
176
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Divisin
En el caso de la division se puede emplear otras instrucciones para obtener el
resultado, por ejemplo restas sucesivas.
177
Intrucciones de Uc ATmega164p
Instruccin
AND Rd, Rr
Resultado
Rd=Rd.Rr
ANDI
OR
ORI
ANDI Rd, k
OR Rd, Rr
ORI Rd, K
Rd=Rd.k
Rd=Rd v k
Rd=Rd v k
EOR
NEG
SBR
EOR Rd, Rr
NEG Rd
SBR Rd, K
Rd=Rd+Rr
SER
SER Rd
Rd=Rd v k
Rd=0xFF
Funcin
AND
AND inmediata
OR
OR inmediata
OR Exclusiva
Complemento a 2
Bits del registro configurados a 1
Cargar unos al registro
178
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Operaciones lgicas
AND
X
OR
X.Y
EX-OR
X.Y
X.Y
179
Intrucciones de Uc ATmega164p
Ejemplo 1:
LDI
ANDI
R21,0x35
R21,0x0F
; R21=$35
; R21=R21 AND 0x0F R20=0x05
0011
0000
0000
0101
1111
0101
180
Intrucciones de Uc ATmega164p
Ejemplo 1:
LDI
ANDI
R21,0x35
R21,0x0F
; R21=$35
; R21=R21 AND 0x0F R20=0x05
0011
0000
0000
0101
1111
0101
181
Intrucciones de Uc ATmega164p
Directivas adicionales
Directiva
Funcin
.BYTE VALOR Inicializa una posicin de
memoria, de tamao byte a
valor.
Segmento
SRAM
.DSEG
.CSEG
.DW
Intrucciones de Uc ATmega164p
Instruccin
PUSH Rr
POP
POP Rr
Funcin
Guardar un registro en el
STACK. Rr=Registro de
propsito General
Retorna un valor
almacenado en el STACK.
Rr=Registro de propsito
General
183
Intrucciones de Uc ATmega164p
Ejercicios:
1.- Escribir un programa que permita escribir las primeras localidades de la SRAM con la palabra
MICROPROCESADOS
Crear un tabla con los datos en la memoria del programa
TABLA: .DB
.DB
.DB
.DB
.DB
.DB
.DB
0x4D
0x49
0x43
0x52
0x51
0x50
0x53
MICROPROCESADOS=15 posiciones
184
Intrucciones de Uc ATmega164p
Ejercicios:
1.- Escribir un programa que permita escribir las primeras localidades de la SRAM con la palabra
MICROPROCESADOS
.INCLUDE M164PDEF.INC
.EQU VAL = 15
.DEF CONTADOR = R20
.DSEG
DATOS: .BYTE VAL
.CSEG
LDI R20, VAL
LDI XL, LOW(DATOS)
LDI XH, HIGH(DATOS)
LDI ZL, LOW(TABLA<<1)
LDI ZH, HIGH(TABLA<<1)
LAZO: LPM R16,Z+
ST X+,R16
DEC CONTADOR
BRNE LAZO
FIN: RJMP FIN
TABLA: .DB
.EXIT
185
Intrucciones de Uc ATmega164p
o Puerto2: Puerto utilizado para controlar la activacin (Orden de activacin) de los displays. El
nmero de pines del puerto que se utilizarn depende del nmero de displays que forman
parte del arreglo.
186
Intrucciones de Uc ATmega164p
Barrido de displays:
Los displays se activarn con la corriente
que proporcionen los pines del puerto
(Puerto 2). Es recomendable emplear
amplificadores de corriente para
garantizar la activacin del display
considerando que la corriente que
provee cada pin del puerto es baja. La
amplificacin puede ser realizada
mediante transistores.
En el grfico se muestra la conexin de
un arreglo de 4 displays del tipo ctodo
comn.
o Las salidas 1,2,3,4 de conectarn al puerto
(Puerto2)que controla la activacin de los
displays.
o Las salidas ABDCEFG se conectarn al
puerto (Puerto1) encargado de activar los 7
segmentos de los displays,
187
Intrucciones de Uc ATmega164p
188
Intrucciones de Uc ATmega164p
Intrucciones de Uc ATmega164p
190
Intrucciones de Uc ATmega164p
RET
191
Intrucciones de Uc ATmega164p
192
Centenas
Decenas
Unidades
193
Restas Sucesivas:
2. Este mtodo consiste en realizar restas sucesivas de cada dgito que forma el
nmero. Las restas se realizan hasta obtener un resultado negativo, este resultado me
indica que debo parar y continuar con el siguiente dgito.
Miles
Valor a restar = 9999 Valor a considerar en la resta por Dgito miles= 1000
1.
9999
1000
8999
6.
4999
1000
3999
2.
8999
1000
7999
7999
1000
6999
6999
1000
5999
5999
1000
4999
7.
3999
1000
2999
2999
1000
1999
1999
1000
999
999
1000
3.
4.
5.
8.
9.
10.
1.
2.
3.
4.
5.
9999
1000
8999
6.
8999
1000
7999
7999
1000
6999
6999
1000
5999
5999
1000
4999
7.
8.
9.
10.
4999
1000
3999
3999
1000
2999
2999
1000
1999
1999
1000
999
999
1000
Dgito miles = 9
195
o Para continuar con el siguiente dgito, considerando que la ltima resta del
dgito miles es un valor negativo, se debe realizar una suma para transformar el
resultado a positivo
1
+1000
999 Valor incial para dar inicio a las restas sucesivas
del dgito centenas
196
999
100
899
6.
499
100
399
2.
899
100
799
799
100
699
699
100
599
599
100
499
7.
399
100
299
299
100
199
199
100
99
99
100
3.
4.
5.
8.
9.
10.
2.
3.
4.
5.
999
100
899
6.
899
100
799
799
100
699
699
100
599
599
100
499
7.
8.
9.
10.
499
100
399
399
100
299
299
100
199
199
100
99
99
100
Dgito centenas = 9
198
o Para continuar con el siguiente dgito, considerando que la ltima resta del
dgito centenas es un valor negativo, se debe realizar una suma para transformar
el resultado a positivo
1
+100
Valor incial para dar inicio a las restas sucesivas
99
del dgito decenas
Valor a restar = 99
Valor a considerar en la resta por Dgito decenas = 10
199
99
10
89
6.
49
10
39
2.
89
10
79
79
10
69
69
10
59
59
10
49
7.
39
10
29
29
10
19
19
10
9
9
10
3.
4.
5.
8.
9.
10.
2.
3.
4.
5.
99
10
89
6.
89
10
79
79
10
69
69
10
59
59
10
49
7.
8.
9.
10.
49
10
39
39
10
29
29
10
19
19
10
9
9
10
Dgito decenas = 9
201
o Para continuar con el siguiente dgito, considerando que la ltima resta del
dgito decenas es un valor negativo, se debe realizar una suma para transformar
el resultado a positivo
1
+10
9 Valor incial para dar inicio a las restas sucesivas
del dgito unidades
Valor a restar = 9
Valor a considerar en la resta por Dgito unidades= 1
202
9
1
8
6.
4
1
3
2.
8
1
7
7
1
6
6
1
5
5
1
4
7.
3
1
2
2
1
1
1
1
0
0
1
3.
4.
5.
8.
9.
10.
2.
3.
4.
5.
9
1
8
6.
8
1
7
7
1
6
6
1
5
5
1
4
7.
8.
9.
10.
4
1
3
3
1
2
2
1
1
1
1
0
0
1
Dgito unidades = 9
204
Restas Sucesivas:
Resultado Final
El resultado final ser igual al nmero de veces que se realiz la resta con
resultados positivos en cada dgito.
Miles
Centenas
Decenas
Unidades
Para programar una subrutina que realice este mtodo, ser deber realizar las operaciones en
nmeros binarios. Las restas sucesivas pueden estar integradas en un lazo y se definir un
contador que almacenar el Nmero de restas con resultados positivos.
Cuando llegue a un resultado negativo de la resta debe realizar un salto al siguiente dgito y
proceder a realizar la respectiva suma para transformar el resultado negativo a positivo y as
obtener el valor inicial para las restas sucesivas del respectivo dgito.
205
0b00111111,
0b01011011,
0b01100110,
0b01111101,
0b01111111,
0b00000110
0b01001111
0b01101101
0b00000111
0b01101111
;
;
;
;
;
0,1
2,3
4,5
6,7
8,9
210
CAPTULO 5
Circuitos temporizadores
contadores e interrupciones
211
Interrupciones
Sistema de Interrupciones
Interrupcin:
212
Interrupciones
Sistema de Interrupciones
Interrupcin:
213
Interrupciones
Sistema de Interrupciones
Interrupcin:
Rutina de servicio a la interrupcin (ISR)
o Para cada interrupcin se define una ISR manejador de interrupcin.
o Para cada interrupcin hay una localidad fija en memoria que mantiene la
direccin de su ISR. Este grupo de localidades de memoria es conocido como
Tabla de Vectores de Interrupciones.
Pasos en la ejecucin de una interrupcin
Al ejecutarse una interrupcin el microcontrolador sigue los siguientes pasos:
1. Finaliza la ejecucin de la instruccin actual y almacena la direccin de la
siguiente instruccin en el stack.
2. Salta a la Tabla de Vectores de Interrupcin. Esta tabla direcciona al
microcontrolador a la direccin de la Rutina de servicio a la interrupcin.
214
Interrupciones
Sistema de Interrupciones
Interrupcin:
Pasos en la ejecucin de una interrupcin
Al ejecutarse una interrupcin el microcontrolador sigue los siguientes pasos:
3. Inicia la ejecucin de la Rutina de servicio a la interrupcin hasta alcanzar la
ltima instruccin de la subrutina RETI.
215
Interrupciones
Sistema de Interrupciones
Tabla de Vectores de Interrupcin
VECTOR
DIRECCIN
FUENTE
BANDERA
FUNCIN
$000
RESET
$002
INTO
INTF0
$004
INT1
INTF1
$006
INT2
INTF2
$008
PCINT0
PCIF0
$00A
PCINT1
PCIF1
$00C
PCINT2
PCIF2
$00E
PCINT3
PCIF3
3 Interrupciones externas
4 Interrupciones por cambio de estado en los prticos de E/S
I
E
E
/
S
216
Interrupciones
Sistema de Interrupciones
Interrupciones externas
Interrupciones
Sistema de Interrupciones
Interrupciones externas
Modos de Operacin
Registro de control de interrupciones EICRA
ISCn0
DESCRIPCIN
218
Interrupciones
Sistema de Interrupciones
Interrupciones externas
Habilitar/desactivar una interrupcin
o Desactivar: Mediante el RESET todas las interrupciones se desactivan.
o Activar:
1. El microcontrolador da repuesta a las interrupciones cuando son
habilitadas mediante software, es decir cuando se configura a 1 los bits
INT0, INT1, INT2.
2. El bit I del SREG es el encargado de activar/desactivar globalmente a
las interrupciones.
o Registro Mscara de Interrupcin Externa (EIMSK): En este registro se
encuentran los bits INT0, INT1 e INT2, ante una solicitud de interrupcin
estos bits toman el valor 1 lgico.
219
Interrupciones
Sistema de Interrupciones
Interrupciones externas
Habilitar/desactivar una interrupcin
o Registro EIFR: Este registro contiene las banderas de las interrupciones externas.
Los bits de las banderas INTF0, INTF1 e INTF2 estn en 1 lgico durante la
ejecucin de la interrupcin.
Al finalizar la ejecucin de la interrupcin la bandera es limpiada por la
escritura de 1 lgico en los respectivos bits antes que la interrupcin sea
habilitada nuevamente.
220
Interrupciones
Sistema de Interrupciones
Interrupciones por cambios en los prticos:
En el Atmega 164p se tiene cuatro
interrupciones para los cambios en
los prticos:
PCINT0 PORTA
PCINT1 PORTB
PCINT2 PORTC
PCINT3 PORTD
Estas interrupciones son habilitadas
por los bits: PCIE0,
PCIE1,PCIE2,PCIE3 respectivamente.
221
Interrupciones
Sistema de Interrupciones
Interrupciones por cambios en los prticos:
PUERTO
PINES
PORTA
PCINT7-PCINTO
PORTB
PCINT15-PCINT8
PORTC
PCINT23-PCINT16
PORTD
PCINT31-PCINT24
222
Interrupciones
Sistema de Interrupciones
Interrupciones por cambios en los prticos:
o PCICR (Registro de Control Cambio del pin de Interrupcin): Este
registro contiene a los bits para activar las interrupciones generadas
por cambios en los prticos.
Cuando los bits PCIE0, PCIE1,PCIE2,PCIE3 estn en 1 lgico se
habilita las peticiones de interrupcin.
A la vez tambin se debe activar el bit I del SREG.
223
Interrupciones
Sistema de Interrupciones
Interrupciones por cambios en los prticos:
o PCMSK (#): En este registro se especifica los pines involucrados en el
cambio de estado.
PCINT0 PORTA PCMSK0
PCINT1 PORTB PCMSK1
PCINT2 PORTC PCMSK2
PCINT3 PORTD PCMSK3
224
Interrupciones
Sistema de Interrupciones
Interrupciones por cambios en los prticos:
o PCIFR (Cambio de pin en el Registro de Banderas de Interrupcin):
Este registro contiene a los bits para habilitar/deshabilitar las banderas
de interrupcin por cambios generados en la entradas de los puertos.
Los bits de las banderas PCIEF, PCIF1,PCIF2 y PCIF3 estn en 1
lgico ante cambios en las entradas de los puertos.
Al finalizar la interrupcin las banderas se limpian mediante la
escritura de un 1 Lgico.
225
Intrucciones de Uc ATmega164p
Intrucciones de Uc ATmega164p
15
14
13
11
12
10 0
PA4
PA5
PA6
PA7
Salidas
227
Intrucciones de Uc ATmega164p
.INCLUDE M164PDEF.INC
.DEF TECLA_PRESIONADA = R20
.DEF TECLA= R19
;Tabla de vectores de I
;Configurar los pines del
PORTA como entradas y
salidas respectivamente
.
.
.
.
Intrucciones de Uc ATmega164p
Intrucciones de Uc ATmega164p
230
Intrucciones de Uc ATmega164p
231
Intrucciones de Uc ATmega164p
232
Intrucciones de Uc ATmega164p
Intrucciones de Uc ATmega164p
234
Intrucciones de Uc ATmega164p
235
Intrucciones de Uc ATmega164p
236
Intrucciones de Uc ATmega164p
237
238
Detalles importantes
Garantizar el pull up: Para garantizar el PULL-UP se debe considerar el bit
PUD ubicado en el registro MCUCR. Este bit activa las resistencias de PULLUP en estado 0 lgico.
Registro MCUCR
Cdigo
IN R20, MCUCR
Detalles importantes
Garantizar el pull up:
Tabla resumen
DDXN
PORTXN
PUD
E/S
PULL-UP
NO
SI
NO
240
EJERCICIOS
Desarrollar un programa para visualizar en el display la tecla presionada de un
teclado matricial, empleando la interrupcion externa int0.
INTO
241
EJERCICIOS
CONSIDERACIONES
PUERTO A / TECLADO
INTO
PIN
E/S
INTERRUPCION
PA0
INT0
PA1
INTO
PA2
INTO
PA3
INTO
PA4
PA5
PA6
PA7
242
EJERCICIOS
CONSIDERACIONES
PUERTO B / DISPLAY
INTO
PIN
E/S
SEGMENTOS
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
---
---
243
EJERCICIOS
CONSIDERACIONES
15
14
13
11
12
10 0
INTO
244
EJERCICIOS
.INCLUDE M164PDEF.INC
.DEF TECLA = R18
; EN ESTE VARIABLE SE ALMACENA EL VALOR DE LA TECLA QUE FUE
PRESIONADA PARA MOSTRAR EN EL DISPLAY
.DEF AUX = R19
; VARIABLE PARA OPERACIONES
.DEF TECLA_PRESIONADA = R20 ; EN ESTA VARIABLE SE ALMACENA LA TECLA PRESIONADA POR
EL USUARIO
;DEFINICION DE VECTORES DE INTERRUPCIONES
; Localizacion del reset
.ORG 0X00
JMP MAIN
; Localizacin de INT0
.ORG 0X02
JMP INTERRUPCION_TECLADO
EJERCICIOS
;DEFINICION DE MAIN
MAIN:
; DEFINICIN DE PUERTOS E/S
; PORTA E/S
LDI R16, ObOOOO1111
OUT DDRA, R16
LDI R16, Ob11111111
OUT PORTA,R16
; ACTIVO PULL UP
; PORTB SALIDA, CONECTADO AL DISPLAY
LDI R16,OXFF
OUT DDRB,R16
246
EJERCICIOS
;DEFINICION DE MAIN
; CONFIGURACION DE INTERRUPCIONES
; PORTD ENTRADA, YA QUE INT0 SE ENCUENTRA EN PD2
LDI R16, 0X00
OUT DDRD, R16
LDI R16, 0b00000100
; ACTIVO PULL UP PARA EL PIN 2 DEL PORTD
OUT PORTD,R16
; HABILITO EL BIT INT0 EN EL REGISTRO EIMSK
LDI R16,Ob00000001
OUT EIMSK,R16
; HABILITO MODO DE OPERACIN, EVENTO QUE HAR PETICN DE INTERRUPCIN
LDI R16, 0b00000010
;SI LAS FILAS DEL TECLADO (ENTRADAS) PASAN DE 1 A 0
STS EICRA, R16
; HABILITACION GLOBAL DE INTERRUPCIONES BIT I=1 DEL SREG
SEI
247
EJERCICIOS
;DEFINICION DE MAIN
; GARANTIZO EL PULL-UP
IN R20, MCUCR
; ALMACENO EL ESTADO DE MCUCR
ANDI R20, Ob11101111 ; CONFIGURO PUD=0
OUT MCUCR, R20
; CARGO PUD=0 En El Registro MCUCR
; INICIALIZO EL SP
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
248
EJERCICIOS
;DEFINICION DE MAIN
; PRENDER EL DISPLAY
LDI AUX, 0X00
LDI TECLA, 16
LAZO_1:
LDI R16, Ob11110000
OUT PORTA, R16
MOV AUX, TECLA
CALL MOSTRAR_VALOR
RJMP LAZO_1
249
;DEFINICION DE MAIN
; PRENDER EL DISPLAY
; SUBRUTINA MOTRAR_VALOR
MOSTRAR_VALOR:
CPI TECLA,16 ; COMPARA TECLA CON 16, 16 SER UTILIZADO PARA EL
CASO QUE NO SE PRESIONE NINGUNA TECLA
BREQ APAGADO ; SI ES IGUAL LA COMPARACION SALTA A APAGADO
; SI TECLA NO ES IGUAL A 16, BUSCO EQUIVALENCIA EN TABLA
LDI ZH,HIGH(TABLA<<1) ; DEFINO AL PUNTERO
LDI ZL,LOW(TABLA<<1)
ADD ZL, AUX
; OPERACIONES PARA LOCALIZAR POSICION
CLR AUX
ADC ZH, AUX
LPM AUX,Z
; AUX= SEGMENTOS A PRENDER
OUT PORTB, AUX
CALL RETARDO
LDI TECLA, 16
; DESPUES DE MOTRAR VALOR APAGO DISPLAY
APAGADO:
251
,7
252
,7
253
,7
254
;DEFINICION DE LA TABLA
TABLA:
.db
.db
.db
.db
.db
.db
.db
.db
0b1000000,0b1111001
0b0100100,0b0110000
0b0011001,0b0010010
0b0000010,0b1111000
0b0000000,0b0010000
0b0001000,0b0110000
0b1000110,0b1110000
0b0000110,0b0001110
;0,1
;2,3
;4,5
;6,7
;8,9
;A,B
;C,D
;E,F
256
Conversor ADC
Detalle
10 bits
max=1500 muestras/segundo
Tiempo de conversin
[13 260] us
Vref
[2,56 - 1,1 ] V
[D0 D9]
Voltaje de entrada
[0-Vcc] V
Conversor ADC
Detalle
ADCH
High data
ADCL
ADCSRA
ADCSRB
ADMUX
Low data
ADC Control and Status Register A
ADC Control and Status Register B
ADC Multiplexer Selection Register
258
Conversor ADC
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
REFS2
Voltaje de referencia
Pin Aref
Pin Avcc
Voltajeinterno 1,1
Voltajeinterno 2,56
Conversor ADC
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
260
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
ADLAR = 0
Justificado a la derecha
ADCL
D9 D8 D7 D6 D5 D4 D3 D2
ADCH
Sin usar
D1 D0
Sin usar
ADCL
D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
261
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
MUX 2/3/1/0
00000
ADC0 = PA0
00001
ADC1 = PA1
00010
ADC2 = PA2
00011
ADC3 = PA3
00100
ADC4 = PA4
262
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
00101
ADC5 = PA5
00110
ADC6 = PA6
00111
ADC7 = PA7
Entrada Diferencial
MUX 2/3/1/0
Entrada Positiva
Entrada Negativa
Ganancia
01000
ADC0
ADC0
10x
01001
ADC1
ADC0
10x
01010
ADC0
ADC0
200x
263
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
Entrada Diferencial
MUX 2/3/1/0
Entrada Positiva
Entrada Negativa
Ganancia
01011
ADC1
ADC0
200x
01100
ADC2
ADC2
10x
01101
ADC3
ADC2
10x
01110
ADC2
ADC2
200x
01111
ADC3
ADC2
200x
264
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
Entrada Positiva
Entrada Negativa
Ganancia
10000
ADC0
ADC1
1x
10001
ADC1
ADC1
1x
10010
ADC2
ADC1
1x
10011
ADC3
ADC1
1x
10100
ADC4
ADC1
1x
10101
ADC5
ADC1
1x
10110
ADC6
ADC1
1x
10111
ADC7
ADC1
1x
265
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
Entrada Positiva
Entrada Negativa
Ganancia
11000
ADC0
ADC2
1x
11001
ADC1
ADC2
1x
11010
ADC2
ADC2
1x
11011
ADC3
ADC2
1x
11100
ADC4
ADC2
1x
11101
ADC5
ADC2
1x
11110
11111
266
Conversor ADC
Registro ADMUX
REFS1
REFS0
ADLAR
MUX4
MUX3
MUX2
MUX1
MUX0
Conversin
1. Entrada de un solo canal
1024
2. Entrada Diferencial
512
267
Conversor ADC
Registro ADCSRA
Es el registro de estado y control del ADC, los bits de este registro controlan y
monitorean la operacin del ADC.
ADEN
BIT
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0
FUNCIN
ADEN
ADSC
ADATE
Conversor ADC
Registro ADCSRA
Es el registro de estado y control del ADC, los bits de este registro controlan y
monitorean la operacin del ADC.
ADEN
ADSC
ADATE
ADIF
ADIE
BIT
ADPS2
ADPS1
ADPS0
FUNCIN
ADIF
ADIE
ADPS 0:2
269
Conversor ADC
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
Factor de Divisin
0
2
4
8
16
32
64
128
ADPS0
270
Conversor ADC
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0
271
Conversor ADC
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0
ADTS2
ADTS1
ADTS0
ADTS2
ADTS1
ADTS0
FUNCIN
Comparador analgico
Interrupcin externa
Timer/Contador 0 desbordamiento
Timer/Contador 1 desbordamiento
Conversor ADC
ADC7D
ADC6D
ADC5D
ADC4D
ADC3D
ADC2D
ADC1D
ADC0D
Los bits de este registro deben ser configurados a 1 lgico, para deshabilitar el
buffer de la entrada digital del respectivo puerto.
El objetivo es reducir el consumo de potencia.
273
ADCL
D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
5 x ADCH
Sin usar
D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
5 x ADCH
Sin usar
R1
D9 D8
R0
D7 D6 D5 D4 D3 D2 D1 D0
R1
R0
275
5 x ADCH
Sin usar
R1
mshadc
PRIMERO
D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
R0
R1
R0
lshadc
msladc
lsladc
SEGUNDO
276
ADCL
1
310
mshadc
Se puede eliminar
25510
5 x ADCH
Valor mximo = 3x15 = 1510
0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1
lshadc
5 x ADCL
Valor mximo = 255 x 5 = 127510
0 0 0 0 0 1 0 0
msladc
1 1 1 1 1 0 1 1
lsladc
277
0 0 0 0 0 1 0 0
msladc
rhighmul
1 1 1 1 1 1 0 0
lsladc
rlowmul
278
1023
= ,
1
Paro
Cifra Entera = 1
279
+1023
252
252
10
2520
2520
1023
1497
1497
1023
474
474
1023
549
Sumo 1023
Multiplico por
10
1
2
Paro
1er Decimal = 2
280
+ 1023
474
474
10
4740
4740
1023
3717
3717
1023
2694
2694
1023
1671
Sumo 1023
Multiplico por
10
1
2
3
281
4
Paro
2do decimal = 4
c) 3er Decimal: Sumo al resultado negativo (de la resta final para obtener el equivalente al 2do
decimal) el valor 1023 y multiplico por 10, a este valor resto la cifra 1023 hasta obtener un
resultado negativo. La cantidad de restas con resultado positivo representa el Valor del 2do
decimal a mostrar.
282
Timers/Contadores
Timers / Contadores
Funciones
Los TIMERS son registros contadores usados como contadores de eventos y
para generar retardos de tiempo.
Los ATmega164p estn formados por 3 timers/contadores:
o TIMER0
o TIMER1
o TIMER2
Cada TIMER necesita un pulso de reloj para marcar la cuenta, la fuente de
reloj puede ser interna o externa.
Pueden ser activados por Interrupciones o en forma dependiente del
programa.
283
Timers/Contadores
Timers / Contadores
Funciones
284
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 0
Es un TIMER de 8 bits.
La seal de reloj puede ser:
o Externa (Detectar Flanco)
o Interna Escalable
Registros de comparacin con doble buffer de salida para realizar la
modulacin PWM.
Tres Fuentes de Interrupcin Externa:
o TOV0 Bandera de desbordamiento
o OCF0A Bandera de emparejamiento de salida de comparacin A
o OCF0B Bandera de emparejamiento de salida de comparacin B
285
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
1. Registro TCNT0: En este registro se almacena el valor del contador de 8 bits.
TCNT0
D7
D6
D5
D4
D3
D2
D1
D0
WGM00
DESCRIPCIN
COM0A 1:0
COM0B 1:0
WGM0 1:0
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A
FOC0B
BITS
CS02
CS01
CS00
DESCRIPCIN
FOC0 A:B
WGM02
CS0 2:0
287
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control
o Modos de Operacin
1. Normal
2. PWM de fase correcta
3. PWM rpido
4. CTC Modo de comparacin de limpieza del TIMER
TCCR0A COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
WGM00
TCCR0B FOC0A
CS00
FOC0B
CS02
Funcin
CS01
Modo
WGM0
2/1/0
TOV0
Normal
000
Contador Ascendente
Rango [0-FF] TOP =0XFF
Se enciende en el valor
mximo TOP = 0xFF
001
Se enciende en el valor
mnimo 0x00
288
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control (TCCR0A)
o Modos de Operacin
Modo
WGM0
2/1/0
Funcin
TOV0
CTC
(Clear timer y
Punto de
Comparacin)
010
PWM Rpido
011
289
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control (TCCR0A)
o Modos de Operacin
Modo
WGM0
2/1/0
Reservado
100
PWM de fase
correcta
101
Reservado
110
PWM Rpido
111
Funcin
TOV0
Reservado
290
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
WGM00
COM0A0
COM0B0
DESCRIPCIN
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
WGM00
COM0A0
DESCRIPCIN
292
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
WGM00
COM0A0
DESCRIPCIN
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
WGM00
COM0B0
DESCRIPCIN
Reservado
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A
FOC0B
CS02
CS01
CS00
CS01
CS00
DESCRIPCIN
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
3. Registros de Comparacin de salida:
o OCR0X
296
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
4. Registros de Interrupcin de Banderas (De los 3 timers del ATmega164p):
o TIFRx
TIFR0 Timer/Contador 0
TIFR1 Timer/Contador 1
TIFR2 Timer/Contador 2
RESERVADOS
OCF0B
OCF0A
TOV0
OCIE0B
OCIE0A
TOIE0
o TIMSKx
TIMSK0 Timer/Contador 0
TIMSK1 Timer/Contador 1
TIMSK2 Timer/Contador 2
RESERVADOS
297
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 0
BITS
OCF0B
OCF0A
TOV0
DESCRIPCIN
OCF0B
OCF0A
TOV0
Desbordamiento de Bandera
o TIMSKX
RESERVADOS
BITS
OCIE0B
OCIE0A
TOIE0
DESCRIPCIN
OCIE0B
OCIE0A
TOIE0
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 0
Ejemplo:
Pasos a seguir para programar contador ascendente en Modo de Operacin
Normal
1. Cargar el registro TCNT0 con el valor inicial del contador.
2. Definir el modo de operacin del TIMER/CONTADOR. Cargar este valor en los
registros TCCR0A y TCCR0B.
3. Escoger la fuente de reloj del contador configurando los bits en el registro TCCR0B.
4. Monitorear la bandera de desbordamiento TOV0. Cuando TOV0 llega a un nivel alto
salir del lazo.
5. Limpiar la bandera TOV0 para iniciar el siguiente ciclo.
6. Retornar al paso 1
299
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 1
Es un timer de 16 bits
Empleado para modulacin
PWM.
Dos salidas independientes de
comparacin unitaria
Registros comparadores con
doble salida de buffer
Entrada de captura unitaria
300
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
Fuentes de Interrupcin
BANDERA
NOMBRE
SE ACTIVA CUANDO
TOV1
Desbordamiento
OCF1A
Emparejamiento de comparacin de
salida A
OCF1B
Emparejamiento de comparacin de
salida B
Bandera de Interrupcin
ICF1
301
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
1.- Registros Contadores:
o TCNT1H Registro Contador Alto
o TCNT1L Registro Contador Bajo
TCNT1H
D7
D6
D5
D4
D3
D2
D1
D0
TCNT1L
D7
D6
D5
D4
D3
D2
D1
D0
302
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o TCCR1A
TCCR1A
WGM10
DESCRIPCIN
COM1A 1:0
COM1B 1:0
o TCCR1B
TCCR1B
ICNC1
ICES1
BITS
------------ WGM13
WGM12
CS12
CS11
DESCRIPCIN
ICN1
ICES1
CS 12:10
CS10
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o TCCR1C
TCCR1C
FOC1A
FOC1B
BITS
DESCRIPCIN
FOC1A
FOC1B
o Modos de Operacin
Modo
WGM
13/12/11/10
Funcin
TOV0
Normal
0000
PWM de fase
correcta (8bits)
0001
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o Modos de Operacin
Modo
WGM
13/12/11/10
Funcin
TOV0
PWM de fase
correcta (9 bits)
0010
PWM de fase
correcta (10 bits)
0011
CTC
(Clear timer y
Punto de
Comparacin)
0100
PWM rpido
(8 bits)
0101
PWM rpido
(9 bits)
0110
PWM rpido
(10 bits)
0111
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o Modos de Operacin
Modo
WGM
13/12/11/10
Funcin
TOV0
PWM de fase y
frecuencia correcta
1000
PWM de fase y
frecuencia correcta
1001
PWM de fase
correcta
1010
PWM de fase
correcta
1011
306
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o Modos de Operacin
Modo
WGM
13/12/11/10
Funcin
TOV0
(Clear timer y
Punto de
Comparacin)
1100
Reservado
1101
PWM rpido
1110
PWM rpido
1111
Reservado
307
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
2. Registros de Control:
o TCCR1B
TCCR1B
ICNC1
ICES1
------------ WGM13
WGM12
CS12
CS11
CS10
CS11
CS10
DESCRIPCIN
Timers/Contadores
Timers / Contadores
TIMER/CONTADOR 1
3. Registros de Comparacin de salida:
o OCR1n
OCR1AH
Registros de Comparacin A
OCR1AL
OCR1BH
Registros de Comparacin B
OCR1BH
309
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
4. Registro de Captura del Timer:
o ICR1H
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
ICIE1
OCIE1B
OCIE1A
TOIE1
ICF1
OCF1B
OCF1A
TOV1
o ICR1L
o TIFR1
310
Timers / Contadores
Timers/Contadores
TIMER/CONTADOR 1
5. Registros de Banderas de Interrupcin:
o TIMSK1
ICIE1
BITS
OCIE1B
OCIE1A
TOIE1
DESCRIPCIN
ICIE1
OCIE1A /OCIE1B
TOIE1
o TIFR1
ICF1
BITS
ICF1
OCF1B /OCF1A
TOV1
OCF1B
OCF1A
TOV1
DESCRIPCIN
311
Timers/Contadores
Timers / Contadores
RESUMEN:
1.
312
Timers/Contadores
Timers / Contadores
RESUMEN:
2. Cuando el contador llega al valor mximo se activa la Bandera de Desbordamiento TOVx
(x=timer) del Registro TIFRx (x=timer).
3. La Bandera de Desbordamiento TOVx (x=timer) puede ser utilizada para programar
Interrupciones.
313
Timers/Contadores
Timers / Contadores
RESUMEN:
5. Cuando existe una igualdad entre el
Registro Contador y los registros
comparadores se activan las Banderas de
Emparejamiento de Comparacin.
OCRxA = TNTx OCFxA.
OCRxB = TNTx OCFxB
*Se puede generar una Interrupcin usando
estas banderas.
314
Timers/Contadores
Timers / Contadores
RESUMEN:
6. Para controlar el TIMER:
315
Timers/Contadores
Timers / Contadores
RESUMEN
6. Para controlar el TIMER:
Configurar los bits COM
316
Timers / Contadores
Timers/Contadores
RESUMEN:
7. Modos de Operacin TIMER 0:
Modo
Normal
Funcin
Contador
Semejanza
Generar Ondas
Diferencia
Variacin del Ciclo de
trabajo
PWM rpido
317
Timers/Contadores
Timers / Contadores
RESUMEN:
7. Modos de Operacin Timer 0:
Modo CTC: Permite controlar la frecuencia de salida en el punto de
comparacin.
318
Timers/Contadores
Timers / Contadores
RESUMEN:
7. Modos de Operacin Timer0:
Modo CTC: La frecuencia es determinada por la siguiente expresin.
*Si el valor del Registro Comparador es menos al valor del Registro contador se pierde el punto
de comparacin.
319
Timers/Contadores
Timers / Contadores
RESUMEN:
7. Modos de Operacin Timer0:
PWM rpido: Proporciona una opcin de generacin de forma de onda PWM a alta
frecuencia.
320
Timers/Contadores
Timers / Contadores
RESUMEN:
7. Modos de Operacin Timer0:
PWM de fase correcta: provee una alta resolucin en la Generacin de Formas
de Onda de fase correcta.
321
Timers/Contadores
Timers / Contadores
Timer/contador 2:
Es un contador de 8 bits.
La fuente de reloj que se utilice puede ser externa
o interna.
Puede realizar la modulacin por ancho de pulso
PWM.
Puede trabajar en forma asncrona.
322
USART
Comunicacin Serial
Transmisin Paralela
D0
Receptor
Transmisor
D7
Transmisin Serial
Transmisor
Receptor
323
USART
Comunicacin Serial
Transmisin Serial
Transmisor
Receptor
Sncrona:
Transfiere un bloque de datos (caracteres) en un determinado tiempo.
Asncrona
Transmisin byte a byte en un determinado tiempo.
USART
324
USART
Comunicacin Serial
USART (Universal Syncronous-Asyncronous Receiver-Transmitter)
Empleado para transmitir datos entre el microcontrolador y dispositivos
externos.
El ATmega164p tiene dos interfaces: USART0 y USART1
Transmisin Full-Duplex.
USART
Comunicacin Serial
USART (Universal Syncronous-Asyncronous Receiver-Transmitter)
Buffer para almacenar los datos a
transmitir.
Registro de Datos
Registro de Control y
Estado
UDR
UCSRA
UCSRB
UCSRC
Registro
Generadores de
Baud-Rate
UBRR
UBRRH
UBRRL
326
USART
327
USART
UDR0
D7
D6
D5
D4
D3
D2
D1
D0
RX $C6
UDR1
D7
D6
D5
D4
D3
D2
D1
D0
RX $CE
UDR0
D7
D6
D5
D4
D3
D2
D1
D0
TX $C6
UDR1
D7
D6
D5
D4
D3
D2
D1
D0
TX $CE
328
USART
RXC0
TXC0
UDRE0
FE0
DOR0
UPE0
U2X0
MPCM0
UCSR1A
RXC1
TXC1
UDRE1
FE1
DOR1
UPE1
U2X1
MPCM1
BITS
BANDERA
INTERRUPCIN
RXCN
Recepcin completa
TXCn
Transmisin completa
UDREn
FEn
Error en la trama
DORn
Datos sobrepuestos
UPEn
Error de paridad
U2Xn
MPCMn
FUNCIONAMIENTO
USART
RXCIE0
TXCIE0
UDRIE0
RXEN0
TXEN0
UCSZ02
RXB80
TXB80
UCSR1B
RXCIE1
TXCIE1
UDRIE1
RXEN1
TXEN1
UCSZ12
RXB81
TXB81
BITS
FUNCIONAMIENTO
RXCIEn
TXCIEn
UDRIEn
RXENn
Habilitacin de la recepcin
TXENn
Habilitacin de la transmisin
UCSZn2
RXB8n
TXB8n
USART
UMSEL01
UMSEL00
UPM01
UPM00 USBS0
UCSZ01
UCSZ00
UCPOL0
UCSR1C
UMSEL11
UMSEL10
UPM11
UPM01 USBS1
UCSZ11
UCSZ01
UCPOL1
BITS
UMSELn 1:0
UPMn 1:0
USBSn
UCSZ1:0n
UCPOLn
FUNCIONAMIENTO
Seleccin de modo sincrnico, asincrnico o Master SPI
Seleccin de paridad
Seleccin de los bits de parada
Seleccionar el nmero de bits por caracter
Seleccin del flanco de reloj, solo en el modo sincrnico
331
USART
NMERO DE BITS
000
001
010
011
100
Reservado
101
Reservado
110
Reservado
111
332
USART
NMERO DE BITS
00
Asincrnico
01
Sincrnico
10
Reservado
11
Mster SPI
FUNCIN
00
Deshabilitado
01
Reservado
10
11
USBSn
BITS DE PARADA
2
333
USART
UBRROH
UBBROL
UBRR1
UBRR1H
UBBR1L
UBRR=
1
BAUD =
16
16(+1)
Modo Asincrnico doble velocidad
UBRR=
1
BAUD =
8
8(+1)
Modo Master Sincrnico
UBRR=
1
BAUD =
2
2(+1)
334
USART
335
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: