Sunteți pe pagina 1din 335

SISTEMAS

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

Arquitectura bsica de un sistema microprocesado


El microprocesador: Es un circuito integrado digital que puede programarse con
una serie de instrucciones, para realizar funciones especficas con los datos.
Cuando un microprocesador se conecta a un dispositivo de memoria y se provee
de dispositivos de entrada salida, pasa a ser un sistema microprocesado.

La mayora de computadoras utiliza la Arquitectura de von Neumann (Programa


almacenado en memoria).
Ejecucin de programas.
Programa Localizado en memoria
Instrucciones
CPU Ejecutar instrucciones Ciclo de instrucciones

INTRODUCCIN

Ciclo de instruccin de Von Neumann


1.- Fetch: Recuperar o
extraer la informacin
(Instrucciones) desde
memoria y llevarla al
microprocesador.

2.- Decode: Decodificacin


de las instrucciones.

3.- Execute: Ejecucin de


las instrucciones.
9

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

Arquitectura bsica de un sistema Microprocesado a nivel de


bloques funcionales

11

INTRODUCCIN

Descripcin de bloques funcionales


Bus de direcciones: Es un bus de un solo sentido (Lneas
unidireccionales) a travs del cual el microprocesador enva un cdigo
de direccin a una memoria o dispositivo externo.
La capacidad mxima de acceso a memoria del P = nmero lneas

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

Descripcin de bloques funcionales


Bus de datos: Es un bus de dos sentidos es decir lneas
bidireccionales (entrada/salida) empleadas para el envo y recepcin
de datos entre el P y los dems elementos del sistema.
Tamao de palabra = # bits que procesa la CPU = # lneas que tiene el bus

Potencia del P A mayor tamao del bus mayor cantidad de


informacin puede ser envada y recibida a la vez.

13

INTRODUCCIN

Descripcin de bloques funcionales


Bus de control: La funcionalidad de este bus es controlar y coordinar
las acciones de los elementos del sistema. Formado por lneas
unidireccionales que entran en la CPU y otras que salen de ella.

Seales de
lectura/escritura
Ciclos de espera
Interrupciones
14

INTRODUCCIN

Descripcin de bloques funcionales


Sistema de Entrada/Salida I/O:
Conjunto de circuitos electrnicos
que permiten el flujo de
informacin entre las distintas
unidades del sistema con el medio
externo por medio de perifricos.
Perifricos: Dispositivos
encargados de la comunicacin
entre el sistema y el usuario y del
almacenamiento de informacin.

15

INTRODUCCIN

Descripcin de bloques funcionales


Unidad de memoria:
Dispositivo que almacena las instrucciones de los programas , los datos y
resultados temporales que se van procesando.
Tipos de memoria:
a) Memorias de solo lectura
b) Memorias de sobre todo lectura
c) Memorias de Lectura/Escritura

16

INTRODUCCIN

Descripcin de bloques funcionales


Unidad de memoria:
a) Memorias de solo lectura:
o ROM (Read Only Memory): Empleada principalmente en microprogramacin de
sistemas.
o PROM (Programmable Read Only Memory): El proceso de escritura es electrnico. Se
puede grabar posteriormente a la fabricacin del chip, a diferencia de las anteriores que
se graba durante la fabricacin. Permite una nica grabacin y es ms cara que la ROM.
b) Memorias de sobre todo lecura:
o EPROM ( Erasable Programmable Read Only Memory): Se puede escribir varias veces
de forma elctrica, sin embargo, el borrado de los contenidos es completo y a travs de
la exposicin a rayos ultravioletas (de esto que suelen tener una pequea ventanita en
el chip).

o EEPROM (Electrically Erasable Programmable Read Only Memory): Se puede borrar


selectivamente byte a byte con corriente elctrica. Es ms cara que la EPROM.
o Memoria Flash: Est basada en las memorias EEPROM pero permite el borrado bloque
17
a bloque y es ms barata y densa,.

INTRODUCCIN

Descripcin de bloques funcionales


Unidad de memoria:
c) Memorias de Lectura/Escritura:

oDRAM(Dynamic Random Access Memory): Los datos se


almacenan como en la carga de un condensador. Tiende a
descargarse y, por lo tanto, es necesario un proceso de refresco
peridico. Son ms simples y baratas que las SRAM.

oSRAM (Static Random Access Memory): Los datos se almacenan

formando biestables, por lo que no requiere refresco. Igual que


DRAM es voltil. Son ms rpidas que las DRAM y ms caras.

18

INTRODUCCIN

Descripcin de bloques funcionales


Sistemas de memoria:
La memoria tambin puede ser clasificada como:
o No Volatil Aquella memoria que al apagarla no pierde la informacin
almacenada.
Ejemplo: ROM
o Volatil Memoria que pierde la informacin al interrumpirse el flujo elctrico.
Ejemplo: RAM

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

Alta velocidad de acceso: 150 nseg.


Descripcin de terminals:
A0-A10 Lneas de direccin
D0-D7 Entrada de datos/salidas de
datos
CS Habilitador de chips
OE Habilitador de salidas
WE Habilitador para escritura

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

DATA out Data ledo


DATA in Dato escrito

23

INTRODUCCIN
Descripcin de bloques funcionales

Sistemas de memoria (Pautas de ejercicios):


Adaptacin al ancho del bus de datos:
Deseable Tamao del bus de datos Up (K) sea igual al nmero de bits que salen y entran
de la memoria.
Casos:
Si el ancho del bus de datos de los chips de memoria es superior a K bits del Up,
slo se utiliza K lneas de dicho bus.
Si el ancho del bus de datos de los chips de memoria es inferior a K bits, se utilizar
varios chips para conectarlos en paralelo al bus de datos del microprocesador.

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

Descripcin de bloques funcionales

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

El microprocesador estructura interna

---------------------------------------------------------------

FETCH

Microprocesador

-Datos
-Resultados Temporales

Dispositivos E/S

Memoria

Sistema Microprocesado
30

Banco de
registros
ALU

Bus Interno

El microprocesador estructura interna

INTRODUCCIN

BIU
PC
IR

FPU

UCT

ID
Decodificador de
Instrucciones
31

INTRODUCCIN

El microprocesador estructura interna

Memoria

Bus Interno

BIU (Unidad de interfaces con los


buses): Procesa todas las operaciones de
lectura/escritura relacionadas con la
memoria o con dispositivos de
entrada/salida.
PC (Contador de Programa): Contiene la
direccin de la localidad donde se
encuentra la siguiente instruccin a ser
ejecutada.
IR (Registro de Instruccin): Registro en
el cual se almacena el cdigo de la
operacin de la instruccin que se est
ejecutando

BIU
E/S

PC
IR
32

INTRODUCCIN

El microprocesador estructura interna


IR
UCT

ID
Decodificador de
Instrucciones

ID (Decodificador de instrucciones): Es la parte de la unidad de control que


se encarga de interpretar la instruccin que se encuentra en el registro de
instrucciones.
UCT (Unidad de Control y Temporizacin):
Encargada de controlar todos los procesos del microprocesador.
Control y ejecucin de las instrucciones.
Desencadena eventos para todas las instrucciones.
Es de carcter secuencial.
33

INTRODUCCIN

El microprocesador estructura interna


Registro de estado

Registro acumulador

ALU (Unidad Aritmtica Lgica): Realiza la aritmtica y las


operaciones lgicas definidas por las instrucciones. Se compone por:
Un circuito operacional.
Registros de entradas.
Registro acumulador.
Registro de estado.
34

INTRODUCCIN

El microprocesador estructura interna

FPU
FPU (Unidad de Punto Flotante): Unidad de ejecucin dedicada,
diseada para realizar las funciones matemticas sobre los nmeros
decimales.
35

INTRODUCCIN

El microprocesador estructura interna


TAR (Registro temporal de
direcciones): Son registros en
los que se almacena
momentneamente cierta
informacin y no son accesibles
al programador mediante
ninguna instruccin.
Banco de Registros: Conjunto
de registros disponibles por el
programador dentro del
microprocesador.

BIU
T
A
R

Registro: Elemento ms
pequeo que puede retener un
dato para almacenar
temporalmente la informacin.
36

INTRODUCCIN

El microprocesador estructura interna


Banco de Registros:
Registro de Propsito General: Son aquellos sobre los cuales no existe
restriccin en cuanto a su utilizacin. Son empleados como:
o Fuente o destino de datos
o Contador
o Puntero de localidades de memoria

o Elementos de E/S

Registros Especializados: Realizan alguna funcin especfica.

37

INTRODUCCIN

El microprocesador estructura interna


Banco de Registros:
Registro Acumulador: Registro base para realizar las operaciones aritmticas
y lgicas. Antes de la ejecucin de una instruccin contiene uno de los
operandos y despus de la ejecucin recibe los resultados.

Tambin es el registro fuente o destino de las transferencias de datos con la


unidad de memoria o con el sistema de entrada/salida. En algunos
microprocesadores existe ms de un acumulador.
38

INTRODUCCIN

El microprocesador estructura interna


Banco de Registros:

Bus Interno

Registro de instrucciones: Es el registro donde se almacena el CDIGO DE LA


OPERACIN de la instruccin que se est ejecutando, una vez que es trada
desde la memoria del programa.

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.

Debido a que tiene memorias cachs separadas para datos e instrucciones,


la frecuencia de lectura de datos y de instrucciones debe ser
aproximadamente la misma para su correcto funcionamiento.
44

Arquitectura CISC y RISC


CISC (Complex Instruction at computer) Computadoras con un
conjunto de instrucciones complejas.
RISC(Reduce Instruction at Computer) Computadoras con un
conjunto de instrucciones reducidas.
Diferencias:
Un procesador RISC tiene una capacidad de procesamiento mayor a
un CISC, adems presenta una estructura de hardware ms pequea.
La arquitectura CISC se basa en la microprogramacin es decir cada
instruccin de mquina es interpretada por un microprograma
localizado en una memoria en el circuito integrado del procesador, a
diferencia de una arquitectura RISC en la cual se maneja un conjuntos
de instrucciones pequeas y simples que toman menor tiempo para
ejecutarse, por lo cual es un proceso ms eficiente.
45

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).

Oscilador: Circuito que indica al microcontrolador la velocidad de trabajo,


tambin conocido como reloj. Generalmente todos los componentes del reloj
se encuentran integrados en el propio microcontrolador y tan solo se requiere
unos pocos componentes externos, como un cristal de cuarzo o una red RC,
para definir la frecuencia del trabajo.
49

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

Microcontroladores ATMEL AVR


(Advanced Virtual RISC)
Los AVR son una familia de microcontroladores RISC de Atmel. Esta
familia de microcontroladores es muy numerosa, incluye 71
dispositivos que comparten el ncleo, pero difieren en recursos.
Basados en arquitectura Harvard con 32 registros de propsito
general a 8 bits.
Las instrucciones en la memoria del programa son ejecutadas en dos
etapas, es decir mientras una instruccin est siendo ejecutada, la
siguiente es pre-capturada de la memoria de programa (fetching).

51

AVR

CPU de los 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

Memoria de programa (Flash)

16/32/44 KB

Memoria de datos (RAM)

1/2/4 KB

Memoria de datos EEPROM

512 B/1KB/2KB

Timers

Comunicacin serial

2 USART

Canales para PWM

Interrupciones

22

Conversor ADC

10 bits 8 canales

Rango de voltaje

2,7 - 5,5 V

Corriente mxima en los terminals VCC y GND

200 mA

Puertos de entrada y salida paralela

32
54

AVR

Atmega164p Descripcin de pines


Reset:
Se genera un reset al aplicar un nivel
bajo de voltaje al pin 9 por un
perodo de tiempo ms largo que un
ciclo de mquina.
El reset se genera siempre y cuando
el reloj no est corriendo.

Terminales para el cristal:


Rangos de velocidad (0 - 20) MHz.
XTAL1 Entrada para el
amplificador del oscilador invertido
y entrada para el circuito de
operacin del reloj interno.
XTAL2 Salida del oscilador
amplificador de salida

55

AVR

Atmega164p Descripcin de pines


Prticos de entrada y salida
paralela.
32 lneas de E/S programables
Prtico A (8bits)
Prtico B (8bits)
Prtico C (8bits)
Prtico D (8bits)

56

AVR

Atmega164p Descripcin de pines


Conversor de Analgico a Digital
ADC de 10 bits y 8 canales
8 canales de un solo terminal
2 canales diferenciales con ganacia
programable de x1, x10 y x200.
7 canales diferenciales solo en el
encapsulado TQFP.

57

AVR

Atmega164p Descripcin de pines


Comparador Analgico
Dentro del mismo chip
AIN0 Entrada positiva
AIN1 Entrada negativa
AIN1 puede ser reemplazado por las
entradas analgicas: [ADC0-ADC7]

58

AVR

Atmega164p Descripcin de pines


Interface JTAG

Empleada como mecanismo de


depuracin.
En la depuracin se tiene acceso a:
Todos los perifricos
RAM interna y externa
Al contador del programa
Memorias EEPROM y flash.

La depuracin es soportada por AVR


studio.

59

AVR

Atmega164p Descripcin de pines


Interface a perifricos seriales (SPI):
Transferencia de datos sincrona y
fullduplex mediante tres lneas.
Modo de operacin Maestroesclavo.
Transferencia de datos LSB o MSB
Siete velocidades programables en los
bits.
Bandera de interrupcin para finalizar
la transmission.

60

AVR

Atmega164p Descripcin de pines


Interrupciones externas:
Estas interrupciones son activadas
por los pines INT0, INT1, INT2.
Pueden ser activadas por flanco de
subida, flanco de bajada o cero
lgico.
Tambin pueden ser generadas por
software, si son configurados los
terminales como salidas.

61

AVR

Atmega164p Descripcin de pines


Temporizadores y
contadores:
2 Timers/contadores de 8 bits
1 Timer/contador de 16 bits
Sirven como generadores de
frecuencia.
Permiten implementar
Moduladores por ancho de pulso.
Poseen relojes preescalables de 10
bits.

62

AVR

Atmega164p Descripcin de pines


Interface Serial con dos lneas
(TWI):
Modo de operacin Maestro
esclavo.
Trabaja como transmisor o receptor.
Velocidad de transferencia hasta 400
KHz.
7- bits de direccin permiten a 128
diferentes direcciones de esclavo.

63

AVR

Atmega164p Descripcin de pines


Receptor/transmisor Universal
sincrono y asincrono (USART0 y
USART1)
Empleados para transferencia de datos full
duplex.
Modo de operacin: Maestro o esclavo en
comunicaciones sincrnicas.
Velocidad de alta resolucin.
Tramas de 5,6,7,8 y 9 bits; con 1 o 2 bits de
parada.
Detector de errors de velocidad y en la trama.
64

AVR

Atmega164p Descripcin de pines


Salida de reloj
Se utiliza cuando el reloj del chip es
usado para manejar otros circuitos en el
sistema.
El reloj tambin sera una salida durante
el reset, y la operacin normal del pin de
E/S sera alterada cuando el fusible es
programado.
Incluye como fuente al oscilador interno
RC
65

AVR

Atmega164p -MemoriasMemoria
Programa
Datos

Tipo
16 KB de memoria FLASH
1280 Bytes de memoria RAM
esttica (SRAM)
512 Bytes de EEPROM

66

AVR

Atmega164p -Memorias Programa : memoria flash de 16KB


Se emplea un bus de direcciones de 14 lneas (14bits)
16 KB = 16*1024 = 16384
8192

4096

2048

1024

512 256 128 64


1

32

16

4 = 14

Rango: 00 0000 0000 0000 $0000


11 1111 1111 1111 $3FFF
67

AVR

Atmega164p -Memorias Programa:


Cdigo de mquina de las instrucciones
1 1 0 1 0 1 1

$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

Atmega maneja intrucciones de 16 0 32 bits razn por la cual la flash


tiene un arreglo de 8K x 16 bits y el contador de programa (PC) tiene
13 bits.
68

AVR

Atmega164p -Memorias SRAM:

contiene:
32 registros de propsito
general
64 registros de entrada/salida
160 registros adicionales de
E/S
1024 Bytes para datos

Informacin que se est


procesando

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

Atmega164p Registros de Propsito General 32 Registros [R0-R31]


Los ltimos 16 registros
[R15-R31] tienen
funciones adicionales
Los registros [R26-R31]
Son punteros de 16 bits
de direccin.

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

Atmega164p Registros de Propsito General Registros punteros:


Permiten acceder a los contenidos de los espacios de memoria
utilizando direccionamiento indirecto.
X-Register Low Byte
X-Register High Byte

R26
R27

$01A
$01B

Y-Register Low Byte


Y-Register High Byte
Z-Register Low Byte

R28
R29
R30

$01C
$01D
$01E

Z-Register High Byte

R31

$01F

71

AVR

Atmega164p Registros de Propsito General Registros punteros:


Permiten direccionamientos indexados de hasta 64 Kbytes de
espacio de memoria.
7

XH
R27

0 7

XL
R26

YH
R29
ZH

0 7

YL
R28
ZL

R31

0 7

R30

72

AVR

Atmega164p Registros E/S


32 Registros de
propsito generaal

$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

Atmega164p Registro de Estado


Registro de estado (Status Register -SREG- ):
Se encuentra en el rea de entrada/salida de la memoria de datos, en la
ltima posicin.
Contiene las banderas que indican el resultado de ejecucin de algunas
instrucciones, en su mayora aritmticas y lgicas.
Conocido tambin como Registro de banderas.
$000

$020

64
Registros de
E/S
$03F

I T H S V N Z C

$05F
74

AVR

Atmega164p Registro de Estado


Registro de estado (SREG)
I

Bit 0 = C : Bandera del carry


Indica un carry en una operacin aritmtica o lgica.
Bit 1 = Z : Bandera del cero
Indica si un resultado es cero en una operacin aritmtica o lgica.
Bit 2 = N : Bandera de negacin
Indica un resultado negativo en una operacin.
Bit 3 = V : Bandera de desbordamiento V en complemento a 2
Bit 4 = S : Bit de signo
Or exclusive entre la bandera negative N y la bandera V.
Bit 5 = H : Bandera del carry intermedio
til en la aritmtica BCD
Bit 6 = T : Bandera para copiar bits
Bit 7 = I : Bandera para habilitar interrupciones globales

75

AVR

Atmega164p Puntero de la pila


Tambin conocido como Stack Pointer es un rea de la SRAM en la cual se
almacenarn: datos en forma temporal, variables locales y direcciones de
regreso despus de una interrupcin.
Este puntero indica la direccin del ultimo dato almacenado.
Est formado por 2 registros:
SPH Puntero de pila alto
SPL Puntero de pila bajo
$000

$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

Rango: 0 0000 0000 $000


1 1111 1111 $1FF

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

Instrucciones con uno o dos 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

Indirecto a la SRAM: En la instruccin se especifica el registro puntero


que apunta a la localidad de la SRAM que contiene el operando de
origen o de destino.

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

Hexadecimal 0x / 0X al inicio del nmero

EJEMPLO
0x99 / 0X25 / 0x200 / 0x0F

$ al inicio del nmero

$99 /

0b al inicio del nmero

0b10001110

0B al inicio del nmero

0B10001110

Decimal

Slo el nmero

12 / 20 / 32

ASCII

Comillas simples

2 / 20

Binario

$25 /$200

Para representar cadenas se emplean comillas dobles.


Para Definir cadenas ASCII se usa .DB
95

Programacin AVR

Intrucciones de Uc ATmega164p
Directivas
Instrucciones

Indican al microcontrolador las acciones


a realizar

Directivas
Pseudo- Instrucciones

Dan rdenes/direcciones al assembler

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]

Label Permite al programa asociar una lnea de cdigo con un


nombre.
salto: DEC tempo
Mnemonic y operandos Trabajan en forma conjunta para indicar
al micro la accin o tarea a realizar.
LDI R23,$55

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

Empleadas para mover datos entre


distintas localidades de memoria

De salto y bifurcacin

Permiten alterar el curso de


ejecucin de los programas.

Para Manipulacin de bits

Permiten realizar operaciones a nivel


de bits

Aritmticas y Lgicas

Utilizadas para realizar operaciones


aritmticas con bytes

De control

Realizan acciones sobre todo el


funcionamiento del
microcontrolador.

101

Programacin AVR

Intrucciones de Uc ATmega164p
Nomencalatura: Registros y operandos
NOMENCALTURA
Rd

Registro destino

Rr

Registro fuente

Resultado de ejecucin de una instruccin

Dato inmediato (constante)

Direccin de memoria

Bit de un registro E/S (7-0)

Bit en el registro de estado SREG

X, Y, Z

Registros de direccionamiento indirecto

Registros del bloque E/S

Desplazamiento (6-bit) por direccionamiento directo


102

Programacin AVR

Intrucciones de Uc ATmega164p
Transferencia de datos
INSTRUCCIN

FUNCIN

MOV, MOVW

Copiar datos entre registros

LDI

Cargar un valor al registro

LDD, LD, LDS, POP

Cargar un registro desde la SRAM

ST, STD, STS, PUSH

Almacenar en SRAM un registro

LPM

Cargar un registro desde la flash

IN, OUT

Entrada y salida de los prticos

103

Programacin AVR

Intrucciones de Uc ATmega164p
Transferencia de datos
LDI:
a) Formato:
LDI Rd, K

; Cargar Rd con el valor K

Donde: K = Valor de 8 bits [0-255] decimal [00-FF] hexadecimal


Rd = [R16-R31]
b) Ejemplo:
LDI R20,0X25 ; Carga el registro R20 con0x25
104

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

Atmega164p Registros E/S


32 Registros de
propsito general

$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:

IN R20, 0X16 ; Copiar el contenido del R16 (E/S) en R20


112

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

Para operar cada prtico utiliza 3 registros:

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

; Carga R20 con el contenido de PIND (Reg. E/S)


; Copia R20 en PORTA

118

Programacin AVR

Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INSTRUCCIN

FUNCIN

ADD, ADDC, SUB, MUL, CP, CPC, CPI

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:

LDI R17, 0X25 ; Cargar 0x25 en R17


LDI R18, 0X35 ; Cargar 0x35 en R18
ADD R17, R18 ; Sumar el valor de R18 a R17
R17=R17+R18
R17= 0x60

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:

LDI R16, 0X35 ; Cargar 0x35 en R16


LDI R17, 0X25 ; Cargar 0x25 en R17
SUB R16, R17 ; R16=R16-R17
R16= 0x10
121

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

RJMP, IJMP, JMP

Saltos incondicionales

RCALL,ICALL,CALL, RET

Llamadas y retornos desde


subrutinas

CPSE

Comparacin y salto includo

SBRC, SBRS,SBIC, SBIS

Saltos condicionados

BRxC, BRxS

Bifurcaciones de acuerdo al estado


de las banderas

Salto: Es el proceso de repetir una secuencia de


instrucciones o una operacin un determinado nmero de
veces
125

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,

BRNE BACK ; Salta a BACK si Z=0

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

;
;
;
;
;
;
;

Se define un counter R16 = 10


R19 = 0
R20 = 3
Sumar R19=R19+R20 (R19=3)
Decrementar el contador
Repetir hasta que el contador=0
Guardar la suma en PORTB
127

Programacin AVR

Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 2: Escribir un programa para cargar al PORTB con el valor 0x25 y

obtenga el complemento del PORTB 700 veces.


700 es mayor a 255 La mxima capacidad de un Registro de Propsito General.
Por lo tanto es necesario utilizar 2 registros para implementar el contador.

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

;
;

Cargo 0x25 en R16


Copia el contenido de R16 en PORTB
Defino Lazo exterior (R20=10)
Defino Lazo interior (R21=70)
Complemento R16
Copiar en PORTB el complemento de R16
Decrementar lazo interior
Repetir 70 veces

Decrementar lazo exterior


Repetir 10 veces

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

3. IJMP Salto indirecto


o Condicionales: Para su ejecucin dependen del cumplimiento de una condicin. Si la
condicin no se cumple no se ejecuta el salto.

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

El programa se va a ejecutar a partir de la direccin/etiqueta que indica la


instruccin. El ensamblador calcula la direccin del salto.
PC k
131

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

C= Bandera del carry


Si existe carry C=1
Si no existe carry C=0
Z= Bandera del 0
Si el resultado de la operacin=0 Z=1
Si el resultado de la operacin distinto de 0 Z=0
N=Bandera de Negacin
Si el bit D7 del resultado = 0N=0 (Signo +)
Si el bit D7 del resultado = 1N=1 (Signo -)
V=Bandera de desbordamiento
Se activa cuando el resultado de una operacin
con nmeros con signo es demasiado larga.
134

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

C= Bandera del carry (Detectar errors en operaciones aritmticas


sin signo.)
Si existe carry C=1
Si no existe carry C=0
Z= Bandera del 0
Si el resultado de la operacin=0 Z=1
Si el resultado de la operacin distinto de 0 Z=0
N=Bandera de Negacin
Si el bit D7 del resultado = 0N=0 (Signo +)
Si el bit D7 del resultado = 1N=1 (Signo -)
D7 D6 D5

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

signo es demasiado larga.

S= Bit de signo
OR EXCLUSIVE entre bandera N y V.
SREG

ALU

H,S,V,N,Z,C
BANDERAS

H= Bandera del carry intermedio


Si existe un carry intermedio desde D3 a D4 durante una ADD SUB se
necesita activar H.
D7 D6 D5

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

Los estados de las banderas indican


condiciones que resultan despus de la
ejecucin de las instrucciones.
Cada bandera puede ser usada para realizar
una bifurcacin condicional.

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

No hay carry despus de D7

D7 = 0 0110 0111

Si existe carry entre D3 y D4

Carry = 1

R20 no es igual a cero

R20 = 0110 0111 $67


140

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

Si hay carry despus de D7

1 0000 0000

Si existe carry entre D3 y D4

Carry = 1

R20 es igual a cero

R20 = 1 0000 0000


141

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

Compara el registro con un valor


inmediato.

CP

CP

Rd, Rr

Compara entre dos registros

CPC

CPC

Rd, Rr

Compara entre dos registros y el carry.

CPSE

CPSE

Rd, Rr

Compara entre dos registros y no


considera la siguiente instruccin si son
iguales

Salto

146

Programacin AVR

Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro

Instruccin

NEMNICO

CPI

BREQ

Saltar si son iguales

CP

BRNE

Saltar si no son iguales

CPC

BRSH

Saltar si es igual o mayor

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

; Pin 7 del Puerto B tiene a la salida 1 Lgico

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

; Pin 0 del Puerto B tiene a la salida 0 Lgico

152

Programacin AVR

Intrucciones de Uc ATmega164p
Instrucciones
Nemnico

Funcin

CLR

Limpia un registro

ROL

Recorre todos los bits del registro destino a


la izquierda. La bandera del acarreo se pasa
al Bit 0 del registro y el Bit 7 se pasa a la
bandera del acarreo, C.

SEC

Configura a uno el bit de la bandera de


acarreo, C

CLC

Limpia la bandera de acarreo, C.

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

;Cargo en R16 el contenido apuntado por 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+

-1era ejecucin R16=Contenido apuntado por X


-2da ejecucin R16=Contenido apuntado por X incrementado en 1

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:

LDD R16, Y+8

-1era ejecucin R16=Contenido de la localidad apuntada por Y pero


desplazada en 8.
158

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

Guardo en la localidad apuntada por X el contenido de


R16
159

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

-1era ejecucin, la localidad apuntada por X recibe el contenido de R16


-2da ejecucin, la localidad apuntada por X recibe el contenido de R16
incrementada en 1
160

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:

STD Z+8, R16

-1era ejecucin, la localidad apuntada por X pero desplazada en 8, recibe el


contenido de R16
162

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

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


El Atmega164P est formado por 4 puertos: PORTA, PORTB, PORTC, PORTD. Para usar
cualquiera de estos puertos deben ser programados previamente como puertos de
entrada o de salida.
Adems de ser usados como puertos de entrada/salida, cada puerto puede ser
utilizado para implementar funciones adicionales como:

ADC
Timers
Interrupciones
Comunicacin serial

Cada Puerto est formado por tres registros:

PORTX Registro de salida PORTx1, PORTx2, PORTx3, PORTx4,.,PORTx8

DDRX Registro de sentido del dato DDRx1, DDRx2, DDRx3, DDRx4, ,DDRx8

PINX Registro de entrada PINx1, PINx2, PINx3,PINx4,..,PINx8


165

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


El Atmega164P est formado por 4 puertos: PORTA, PORTB, PORTC, PORTD.
Para usar cualquiera de estos puertos deben ser programados previamente
como puertos de entrada o de salida.
Adems de ser usados como puertos de entrada/salida, cada puerto puede ser
utilizado para implementar funciones adicionales como:

ADC
Timers
Interrupciones
Comunicacin serial

Cada Puerto est formado por tres registros:

PORTX Registro de salida

DDRX Registro de sentido del dato

PINX Registro de entrada

PORTx 7
PINx 7

DDRx

Px7 Px6 Px5 Px4 Px3 Px2 Px1 Px0


166

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


DDRx: Registro usado para configurar a un Puerto como entrada o salida.
Salida Cargar/escribir todos los bits del registro con 1 (0b11111111)
Entrada Cargar/escribir todos los bits del registro con 0 (0b00000000)
PINx: Registro empleado para leer los datos presentes en los pines del Puerto.
PORTx: Registro usado para enviar los
datos de salida a los pines del
respectivo
Puerto.
Existe
una
Resistencia de PULL-UP para cada pin
de los puertos. Cuando los bits del
Registro PORTx son configurados a 1,
las resistencias de PULL-UP se activan.

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


Observacin: Al aplicar reset todos los puertos se cargan con el valor 0x00 en sus
registros DDRx y PORTx, por lo tanto como resultado:
Los puertos quedarn configurados como puertos de entrada.
Se deshabilitan las resistencias de PULL-UP
Los terminals Pxn quedan configurados como entradas en alta impedancia.
DDRx
PORTx

Entrada y alta impedancia

Salida 0

Entrada y Pull-Up

Salida 1

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


Instrucciones
ACIN
Leer terminales

Escribir en los
prticos

NEMNICO
IN

INSTRUCCIN

FUNCIN

IN Rd, PINx

Leer los 8 bits del registros PINx del puerto

IN Rd, PORTx

Leer los 8 bits del registros PORTx del puerto

IN Rd, DDRx

Leer los 8 bits del registros DDRx del puerto

SBIC

SBIC PINx,b

Monitorear un bit del puerto

SBIS

SBIS PINx,b

SBIC

SBIC PORTx,b

SBIS

SBIS PORTx, b

SBIC

SBIC DDRx,b

SBIS

SBIS DDRx,b

OUT

OUT PORTx, Rr

Escribir en los 8 bits del puerto

SBI

SBI PORTx,b

Escribir un bit del Puerto a 1 L

CBI

CBI PORTx, b

Establecer un bit del Puerto a 0 L

Monitorear un bit del puerto


Monitorear un bit del puerto

Prticos de Entrada Salida AVR

Prticos paralelos de entrada/salida del ATmega164p


Bit PUD
Bit para desactivar el PULL-UP de todos los pines de todos los puertos, se encuentra en
el registro de control de MCU conocido como, MCUCR.

PUD
Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

PUD=1 Lgico Resistencias de PULL-UP desactivadas

Bit 1

Bit 0

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

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

Ejemplo 2: Escribir un programa para restar el 0x18 de 0x2917 y guardar el


resultado en R25 y R24.
LDI R25, 0x29
; R25=$29
LDI R24, 0x17
; R24=$17
SBIW R25:R24, 0x18 ; 2917-18= 28FFhex

173

Prticos de Entrada Salida AVR

Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
SBC: Permite restar dos nmeros incluyendo el carry.

Formato:
SBC Rd, Rr

Ejemplo: Restar 2 nmeros de 16 bits. Los nmeros son 2762hex y 1296hex.


Colocar el resultado de la suma en R18 y R19, asumir R18 como el byte bajo.
(Total=14CChex)
LDI
LDI
LDI
LDI
SUB
SBC

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

Prticos de Entrada Salida AVR

Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Multiplicacin
Nemnico

Instruccin

MUL

MUL Rd, Rr

MULS
MULSU

Aplicacin

Byte1

Byte2

Byte alto del Byte bajo del


resultado
resultado

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

Instrucciones aritmticas y Lgicas


Operaciones lgicas
Nemnico
AND

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

Instrucciones aritmticas y Lgicas


Operaciones lgicas
o

Ejemplo 1:

LDI
ANDI

R21,0x35
R21,0x0F

; R21=$35
; R21=R21 AND 0x0F R20=0x05

0011
0000
0000

0101
1111
0101

o Ejemplo 2: La instruccin EOR puede ser usada para verificar el contenido de un


registro, es decir es til si no se conoce el contenido de un registro

Lazo: IN R16, PINB


LDI R17, 0x45
EOR R16,R17
BRNE Lazo

180

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Instrucciones aritmticas y Lgicas


Operaciones lgicas
o

Ejemplo 1:

LDI
ANDI

R21,0x35
R21,0x0F

; R21=$35
; R21=R21 AND 0x0F R20=0x05

0011
0000
0000

0101
1111
0101

o Ejemplo 2: La instruccin EOR puede ser usada para verificar el contenido de un


registro, es decir es til si no se conoce el contenido de un registro

Lazo: IN R16, PINB


LDI R17, 0x45
EOR R16,R17
BRNE Lazo

181

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Directivas adicionales
Directiva
Funcin
.BYTE VALOR Inicializa una posicin de
memoria, de tamao byte a
valor.

Segmento
SRAM

.DSEG
.CSEG

Declarar constantes y datos


Segmento de cdigo, indica que CODIGO
el cdigo a ejecutarse deber
colocarse en la memoria del
programa

.DW

Similar a .DB pero usa una


palabra para cada valor
182

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Manejo del Stack


Nemnico
PUSH

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

Barrido de displays: Consiste en mostrar valores en forma secuencial mediante un arreglo


de displays. En el caso de conectar un arreglo de displays a un puerto del ATmega164p, se
debe tener en cuenta las siguientes consideraciones:
Cada PIN de un puerto opera con una corriente de 20 mA.
La corriente total que puede manejar un puerto es 100 mA.
Se debe implementar resistencias limitadoras de corriente para cada segmento de los displays.
Se puede utilizar display de 7 segmentos de tipo nodo comn o ctodo comn.
Para la conexin de un arreglo de displays se emplea 2 puertos del ATmega16:
o Puerto1: Puerto para conexin de los segmentos de los displays. Se utiliza 7 pines de este
para cada segmento de los displays. Los segmentos de todos los displays se conectarn en
forma paralela.

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

Prticos de Entrada Salida AVR

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

Prticos de Entrada Salida AVR

Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)

188

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)


Si se considera que:
o Las salidas para la activacin de
los 4 dgitos se conectan al
PORTB. Slo se emplearn 4 bits
del registro de salida del puerto
para el proceso de activacin.
o Las salidas del Control de
Segmentos se conectan al PORTA.
o Se han definido 4 dgitos para
mostrar los resultados de la
multiplicacin. (o de cualquier
operacin)
dmil : miles
dcen: centenas
ddec: decenas
duni: Unidades
o Se realiza la siguiente subrutina
para el barrido de displays.
189

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)


Subrutina_barrido:
OUT PORTA, DMIL
LDI R16, 0b00000001
OUT PORTB, R16
CALL RETARDO
LDI R16,0B00000000
OUT PORTB, R16

; Indico en el primer display el digito de miles de la operacin

OUT PORTA, DCEN


LDI R16, 0b00000010
OUT PORTB, R16
CALL RETARDO
LDI R16,0B00000000
OUT PORTB, R16

; Indico en el primer display el digito de centenas de la operacin

; Activo el primer display


; Llamo a la subrutina retardo antes que se active el siguiente display
; PORTB=0 apago el primer display

; Activo el segundo display


; Llamo a la subrutina retardo antes que se active el siguiente display
; PORTB=0 apago el segundo display

190

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)


Subrutina_barrido:
OUT PORTA, DDEC
LDI R16, 0b00000100
OUT PORTB, R16
CALL RETARDO
LDI R16,0B00000000
OUT PORTB, R16

; Indico en el tercer display el digito de decenas de la operacin

OUT PORTA, DUNI


LDI R16, 0b00001000
OUT PORTB, R16
CALL RETARDO
LDI R16,0B00000000
OUT PORTB, R16

; Indico en el cuarto display el digito de unidades de la operacin

; Activo el tercer display


; Llamo a la subrutina retardo antes que se active el siguiente display
; PORTB=0 apago el tercer display

; Activo el cuarto display


; Llamo a la subrutina retardo antes que se active el siguiente display
; PORTB=0 apago el cuarto display

RET

191

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)


*La subrutina de retardo es similar a las planteadas en los ejercicios en clase, se puede aumentar
instrucciones NOP para variar la frecuencia de barrido.

192

Conversin de Binario a BCD


Existen algunas formas de realizar la conversin de binario a BCD, un
mtodo puede ser por restas sucesivas.
Restas Sucesivas:
1. Si se tiene un nmero con cuatro dgitos decimales, el mximo valor a
convertir es el 9999.
Miles

Centenas

Decenas

Unidades

193

Conversin de Binario a BCD

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.

Fin de la resta ya que el


resultado es negativo
194

Conversin de Binario a BCD


Restas Sucesivas:
Miles

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

En total se realiz la resta 9 veces,


este valor 9 representa la
conversin del primer dgito.

Dgito miles = 9

195

Conversin de Binario a BCD


Restas Sucesivas:
Centenas

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

Valor a restar = 999


Valor a considerar en la resta por Dgito centenas= 100

196

Conversin de Binario a BCD


Restas Sucesivas:
Centenas
1.

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.

Fin de la resta ya que el


resultado es negativo
197

Conversin de Binario a BCD


Restas Sucesivas:
Centenas
1.

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

En total se realiz la resta 9 veces,


este valor 9 representa la
conversin del segundo dgito.

Dgito centenas = 9

198

Conversin de Binario a BCD


Restas Sucesivas:
Decenas

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

Conversin de Binario a BCD


Restas Sucesivas:
Decenas
1.

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.

Fin de la resta ya que el


resultado es negativo
200

Conversin de Binario a BCD


Restas Sucesivas:
Decenas
1.

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

En total se realiz la resta 9 veces,


este valor 9 representa la
conversin del tercer dgito.

Dgito decenas = 9

201

Conversin de Binario a BCD


Restas Sucesivas:
Decenas

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

Conversin de Binario a BCD


Restas Sucesivas:
Unidades
1.

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.

Fin de la resta ya que el


resultado es negativo
203

Conversin de Binario a BCD


Restas Sucesivas:
Unidades
1.

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

En total se realiz la resta 9 veces,


este valor 9 representa la
conversin del cuarto dgito.

Dgito unidades = 9

204

Conversin de Binario a BCD

Restas Sucesivas:
Resultado Final
El resultado final ser igual al nmero de veces que se realiz la resta con
resultados positivos en cada dgito.

Nmero de restas con


resultados positivos

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

Conversin BCD a 7 segmentos

Esta conversin les permite mostrar el valor de cada dgito de la


operacin en el respectivo display
Se puede crear una subrutina para realizar la conversin.
La correspondencia de los segmentos que se deben prender de
acuerdo a los valores de los dgitos puede ser almacenada en una
tabla.
Para el programa se ha representado a los 4 dgitos del siguiente
modo:
DIGBCD0
DIGBCD1
DIGBCD2
DIGBCD3
206

Conversin BCD a 7 segmentos


SUBRUTINA_BCD_SEGMENTOS
; Guardo en el Stack los siguientes valores
PUSH R20
PUSH ZH
PUSH ZL
; Proceso a la lectura de los valores que tengo almacenada en la
tabla para el DIGBCD0
LDS R20, DIGBCD0
; DIGBCD0=R20
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
ADD ZL,R20
CLR R20
ADC ZH,R20
LPM R20,Z
STS DIGBCD0 ,R20
207

Conversin BCD a 7 segmentos


; Proceso a la lectura de los valores que tengo almacenada en la tabla para el
DIGBCD1
LDS R20, DIGBCD1
; DIGBCD1=R20
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
ADD ZL,R20
CLR R20
ADC ZH,R20
LPM R20,Z
STS DIGBCD1 ,R20
; Proceso a la lectura de los valores que tengo almacenada en la tabla para el
DIGBCD2
LDS R20, DIGBCD2
; DIGBCD2=R20
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
ADD ZL,R20
CLR R20
ADC ZH,R20
LPM R20,Z
208
STS DIGBCD2 ,R20

Conversin BCD a 7 segmentos


; Proceso a la lectura de los valores que tengo almacenada en la tabla para el
DIGBCD3
LDS R20, DIGBCD3
; DIGBCD3=R20
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
ADD ZL,R20
CLR R20
ADC ZH,R20
LPM R20,Z
STS DIGBCD3 ,R20
;recupero los valores almacenados en el STACK y as utilizarlos para mostrar en
el display
POP ZL
POP ZH
POP R20
RET
209

Conversin BCD a 7 segmentos


RET
; Creacion de la TABLA_7SEG
.db
.db
.db
.db
.db

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:

Es un evento que se produce para que el microcontrolador atienda a una


peticin externa a la ejecucin del programa.
o Fuentes de interrupcin:
Timers
Hardware externo
Comunicacin Serial
SPI
El ADC

Cuando se produce una interrupcin se detiene la ejecucin del programa y


se da paso a la Rutina de servicio a la interrupcin (ISR).

212

Interrupciones

Sistema de Interrupciones
Interrupcin:

El microcontrolador identifica al evento que desencadena la interrupcin


mediante la activacin de la Bandera de habilitacin global de
Interrupciones (I) del SREG.
Detalles importantes:
oEl microcontrolador puede dar servicio a varios dispositivos.
oCada dispositivo puede ser atendido por el microcontrolador de
acuerdo a un orden de prioridad.

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.

4. Retorna a la posicin en la cual fue generada la interrupcin.


*Obtiene la direccin del Contador de Programa (PC) desde el STACK

215

Interrupciones

Sistema de Interrupciones
Tabla de Vectores de Interrupcin
VECTOR

DIRECCIN

FUENTE

BANDERA

FUNCIN

$000

RESET

$002

INTO

INTF0

Pedido de la interrupcin externa 0

$004

INT1

INTF1

Pedido de la interrupcin externa 1

$006

INT2

INTF2

Pedido de la interrupcin externa 2

$008

PCINT0

PCIF0

Pedido de la interrupcin 0, o por cambio de terminales.

$00A

PCINT1

PCIF1

Pedido de la interrupcin 1, o por cambio de terminales.

$00C

PCINT2

PCIF2

Pedido de la interrupcin 2, o por cambio de terminales.

$00E

PCINT3

PCIF3

Pedido de la interrupcin 3, o por cambio de terminales.

Reset por el terminal, en el encendido , por prdida de


VCC, por watchdog y or el JTAG.

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

Las interrupciones externas en el


ATmega164p se manejan mediante
los pines de los puertos
INT0 PD2
INT1 PD3
INT2 PB2
Estos pines deben ser configurados
como pines de entrada para recibir
las seales que generan
interrupciones.
217

Interrupciones

Sistema de Interrupciones
Interrupciones externas
Modos de Operacin
Registro de control de interrupciones EICRA

Bits 7 y 6 son reservados. (Se escriben con cero)


Bits 5,4,3,2,1,0 utilizados para configurar el Sentido de los bits de Control
ISCn1

ISCn0

DESCRIPCIN

El nivel bajo de INTn genera un pedido de interrupcin.

Cualquier cambio en la entrada INTn genera un pedido de


Interrupcin.

La transicin de bajada de INTn produce un pedido de


interrupcin.

La transicin de subida de INTn produce un pedido de


interrupcin.

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

Prticos de Entrada Salida AVR

Tcnicas de barrido y decodificacin de teclados:


Entradas

Salidas Monitorea la tecla que est activada y


carga el valor respectivo de la tecla para mostrar
226

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Tcnicas de barrido y decodificacin de teclados:


Entradas
PA0
PA1
PA2
PA3

15

14

13

11

12

10 0
PA4
PA5
PA6
PA7

Salidas
227

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Tcnicas de barrido y decodificacin de teclados:


Cdigo de programacin: Ejemplo INT0

.INCLUDE M164PDEF.INC
.DEF TECLA_PRESIONADA = R20
.DEF TECLA= R19

;Decodificacion de las teclas


IN TECLA_PRESIONADA,PINA ; Leer datos
presentes en Puerto A

;Tabla de vectores de I
;Configurar los pines del
PORTA como entradas y
salidas respectivamente
.
.
.
.

LDI R16, 0B11111110 ;Entrada de la 1era fila


OUT PORTA, R16
SBIS TECLA_PRESIONADA ,4
LDI TECLA,7
SBIS TECLA_PRESIONADA ,5
LDI TECLA,8
SBIS TECLA_PRESIONADA ,6
LDI TECLA,9
SBIS TECLA_PRESIONADA ,7
LDI TECLA,15
228

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Tcnicas de barrido y decodificacin de teclados:


Cdigo de programacin: Ejemplo INT0

;Decodificacion de las teclas


IN TECLA_PRESIONADA,PINA ; Leer datos presentes en Puerto A
LDI R16, 0B11111101 ;Entrada de la 2da fila
OUT PORTA, R16
SBIS TECLA_PRESIONADA ,4
LDI TECLA,4
SBIS TECLA_PRESIONADA ,5
LDI TECLA,5
SBIS TECLA_PRESIONADA ,6
LDI TECLA,6
SBIS TECLA_PRESIONADA ,7
LDI TECLA,14
229

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Tcnicas de barrido y decodificacin de teclados:


Cdigo de programacin: Ejemplo INT0

;Decodificacion de las teclas

Proceder en manera similar con las 2 filas


restantes

230

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin externa INT0


.INCLUDE M164PDEF.INC
;Configurar vectores de interrupcion
.ORG 0
; localizacin del reset
JMP MAIN
.ORG 0x02
; localizacin del vector para la interrupcin INT0
JMP NOMBRE_INTERRUPCION
MAIN:
; Configuracion del stack
..
; Configuracion de puertos como entradas o salidas

*Los pines de las interrupciones deben ser configuradas como


entradas
; Configuracion de las resistencias de PULL-UP

231

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: INT0

; Habilitacion de las interrupciones


LDI R16, 0b00000001
OUT EIMSK,R16
; Modo de operacin de la interrupcin
LDI R16, 0b00000010
STS eicra,R16
; Habilitacin global de interrupciones
SEI

232

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin para conocer cul tecla est


siendo presionada.
.DEF TECLA=R20
INTERRUPCION_TECLADO:
; guarda el estado en el stack para el retorno
PUSH R17
IN R17,SREG
PUSH R17
LDI R17, 0B11111110
; para monitorear la 1era fila del teclado
OUT PORTA, R17
SBIS PINA,4
LDI TECLA,7
SBIS PINA,5
LDI TECLA,8
SBIS PINA,6
LDI TECLA,9
SBIS PINA,7
233
LDI TECLA,15

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin para conocer cul tecla est


siendo presionada.

LDI R17, 0B11111101


OUT PORTA, R17
SBIS PINA,4
LDI TECLA,4
SBIS PINA,5
LDI TECLA,5
SBIS PINA,6
LDI TECLA,6
SBIS PINA,7
LDI TECLA,14

; Para monitorear la 2da fila del teclado

234

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin para conocer cul tecla est


siendo presionada.

LDI R17, 0B11111011


OUT PORTA, R17
SBIS PINA,4
LDI TECLA,1
SBIS PINA,5
LDI TECLA,2
SBIS PINA,6
LDI TECLA,3
SBIS PINA,7
LDI TECLA,13

; Para monitorear la 3era fila del teclado

235

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin para conocer cul tecla est


siendo presionada.

LDI R17, 0B11110111


OUT PORTA, R17
SBIS PINA,4
LDI TECLA,10
SBIS PINA,5
LDI TECLA,0
SBIS PINA,6
LDI TECLA,11
SBIS PINA,7
LDI TECLA,12

; Para monitorear la 4ta fila del teclado

;Retornar al estado del SREG al finalizar la interrupcin


POP R17
OUT SREG, R17
;Retornar al estado anterior
POP R17
RETI
;Finalizacin de la interrupcin

236

Intrucciones de Uc ATmega164p

Prticos de Entrada Salida AVR

Ejemplo de cdigo de programacin: Interrupcin para conocer cul tecla est


siendo presionada.
*Durante la ejecucin de la interrupcin el bit I del SREG pasa de 1 lgico a 0 lgico,
causando que las interrupciones se desactiven. Por esta razn se recomienda
guardar el estado del registro SREG antes de iniciar la interrupcin para al finalizar la
ejecucin regresar al estado guardado del SREG, es decir evitar que las
interrupciones dejen de funcionar.

237

EJERCICIOS CON INTERRUPCIONES

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

; Almaceno el estado de MCUCR, el valor de inters es


la quinta posicin R20=XXX1XXXX
ANDI R20, Ob11101111 ; Si PUD se desactivo, es decir PUD=1 mediante ANDI pasa
nuevamente a ser 0 se tiene PUD=0
OUT MCUCR, R20
; Cargo PUD=0 en el registro MCUCR
239

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

EQUIVALENCIA DE LAS 16 TECLAS DEL


TECLADO
7

15

14

13

11

12

10 0
INTO

El mximo valor de tecla es 15


Puedo emplear el valor 16 para realizar el
apagado del display

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

; INTERRUPCION_TECLADO nombre de la funcin con


la cual va a operar INT0
245

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

; BORRO EL CONTENIDO DE LA VARIABLE AUX


; TECLA=16, SER UTILIZADA PARA EL CASO QUE NO SE
ACCIONE NINGUNA TECLA, EL DISPLAY DEBERA ESTAR APAGADO

LAZO_1:
LDI R16, Ob11110000
OUT PORTA, R16
MOV AUX, TECLA
CALL MOSTRAR_VALOR
RJMP LAZO_1

; LAS FILAS DEL TECLADO SE ACTIVAN EN 0


; CARGO A AUX EL VALOR DE TECLA QUE FUE PRESIONADA
POR EL USUARIO, ESTA SERA MOSTRADA EN EL DISPLAY
; LLAMO A LA SUBRUTINA QUE INDICAR EL VALOR EN EL
DISPLAY
; ESTA OPERACIN SE HAR EN FORMA INDEFINIDA

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:

LDI R16, Ob11111111


OUT PORTB, R16
RET

; APAGA LOS SEGMENTOS DEL DISPLAY


250

;DEFINICION DEL FUNCIONAMIENTO DE LA INTERRUPCION INTO


INTERRUPCION_TECLADO:
; GARANTIZO EL RETORNO DESPUS DE LA INTERRUPCIN
PUSH R22
; ALMACENO R22 EN EL STACK
IN R22,SREG
; ALMACENO EL ESTADO DE SREG (I=1) EN R22
PUSH R22
; ALMACENO EL ESTADO DE SREG (I=1) EN EL STACK
;ESCANEO DE LA PRIMERA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA
IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A
LDI R16, 0B11111110
; ACTIVO EL ESCANEO DE LA 1ERA FILA
OUT PORTA, R16
SBIS TECLA_PRESIONADA ,4 ; SI EL PIN4=1 DE TECLA_PRESIONADA, SALTA A LA
SIGUIENTE INSTRUCCION
LDI TECLA,7
; SI EL PIN4=0 DE TECLA_PRESIONADA, EL USUARIO
PRESION 7
SBIS TECLA_PRESIONADA ,5
LDI TECLA,8
SBIS TECLA_PRESIONADA ,6
LDI TECLA,9
SBIS TECLA_PRESIONADA ,7
LDI TECLA,15

251

;DEFINICION DEL FUNCIONAMIENTO DE INTO LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:
;ESCANEO DE LA SEGUNDA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11111101
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,4
SBIS TECLA_PRESIONADA
LDI TECLA,5
SBIS TECLA_PRESIONADA
LDI TECLA,6
SBIS TECLA_PRESIONADA
LDI TECLA,14

; ACTIVO EL ESCANEO DE LA 2DA FILA


,4
,5
,6

,7

252

;DEFINICION DEL FUNCIONAMIENTO DE INT0 LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:
;ESCANEO DE LA TERCERA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11111011
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,1
SBIS TECLA_PRESIONADA
LDI TECLA,2
SBIS TECLA_PRESIONADA
LDI TECLA,3
SBIS TECLA_PRESIONADA
LDI TECLA,13

; ACTIVO EL ESCANEO DE LA 3ERA FILA


,4
,5
,6

,7

253

;DEFINICION DEL FUNCIONAMIENTO DE INTO LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:
;ESCANEO DE LA CUARTA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11110111
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,10
SBIS TECLA_PRESIONADA
LDI TECLA,0
SBIS TECLA_PRESIONADA
LDI TECLA,11
SBIS TECLA_PRESIONADA
LDI TECLA,12

; ACTIVO EL ESCANEO DE LA 4TA FILA


,4
,5
,6

,7

254

;DEFINICION DEL FUNCIONAMIENTO DE INT0 LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:
; FINALIZADA LA EJECUCIN DE LA INTERRUPCION LA BANDERA I=0, POR ELLO ACTIVO
CON EL ESTADO ALMACENADO EN EL STACK PARA QUE LA INT0 CONTINE OPERATIVA
POP R22
; RECUPERO DEL STACK R22
OUT SREG, R22 ; CARGO A SREG EL ESTADO RECUPERADO (I=1)
POP R22
;FINALIZO LA INTERRUPCIN INT0
RETI

;DEFINICIN DE LA SUBRUTINA RETARDO


RETARDO:
LDI R16, 255
REPETIR:
NOP ; DE ACUERDO AL NUMERO DE NOPs AUMENTA O DISMINUYE EL
RETARDO
NOP
DEC R16
BRNE REPETIR
255
RET

;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

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Caractersticas:
Caracterstica
Resolucin

Detalle
10 bits

max=1500 muestras/segundo
Tiempo de conversin

[13 260] us

Vref

[2,56 - 1,1 ] V

Salida de datos digital

[D0 D9]

Voltaje de entrada

[0-Vcc] V

Canales de entrada anlogos

Opera en modo diferencial


con ganancia seleccionable

x1, x10, x200


257

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registros: El ADC del Atmega 164p opera con 5 registros.
Registro

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

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

REFS1 y REFS0 Estos bits selccionan el voltaje de referencia


para el ADC.
REFS1

REFS2

Voltaje de referencia

Pin Aref

Voltaje de referencia interno apagado,


configuracin de voltaje externa

Pin Avcc

Voltaje de referencia externa en el pin AVCC, con


un condensador en el pin AREF.

Voltajeinterno 1,1

Voltaje de referencia interno 1.1V con capacitor


en el pin AREF.

Voltajeinterno 2,56

Voltaje de referencia interno 2.56V con capacitor


en el pin AREF
259

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

REFS1 y REFS0 Estos bits selccionan el voltaje de referencia


para el ADC.
o Si se cambia la configuracin de estos bits durante una
conversion, los cambios se aplican al finalizar la conversion.
o Si se aplica un Vref externo, es decir al pin Aref, no se debe
utilizar la opcin de Vref interno.

260

CONVERSOR DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

ADLAR (ADC left adjust result) Si el bits es configurado a 1,


el resultado se ajusta hacia la izquierda, caso contrario el
resultado se ajusta hacia la derecha.
ADCH
ADLAR = 1
Justificado a la izquierda

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 DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

MUX 4:0 Estos bits seleccionan cual combinacin de la entrada analgica


son conectados al ADC, y adems seleccionan la ganancia para los canales
diferenciales.

Entrada de un solo canal

MUX 2/3/1/0

Canal /PIN seleccionada

00000

ADC0 = PA0

00001

ADC1 = PA1

00010

ADC2 = PA2

00011

ADC3 = PA3

00100

ADC4 = PA4
262

CONVERSOR DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

Entrada de un solo canal


MUX 2/3/1/0

Canal /PIN seleccionada

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 DE ANALGICO A DIGITAL (ADC)

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 DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

Entrada Diferencial con ADC1 de referencia


MUX 2/3/1/0

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 DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

Entrada Diferencial con ADC2 de referencia


MUX 2/3/1/0

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

Entrada de un solo canal = 1,1 V

11111

Entrada de un solo canal = 0 V

266

CONVERSOR DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registro ADMUX
REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

Conversin
1. Entrada de un solo canal

1024

2. Entrada Diferencial

512

Vpos= Entrada diferencial


positiva
Vneg = Entrada diferencial
negativa

267

CONVERSOR DE ANALGICO A DIGITAL (ADC)

Conversor ADC

Registros ADCH:ADCL / Registro de datos


Cuando la conversin A/D finalice el resultado se almacena en los
registros:
ADCL Byte bajo del resultado A/D
ADCH Byte alto del resultado A/D

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

Habilita/Deshabilita el ADC. ADEN=1 ADC habilitado

ADSC

Inicio de conversin ADC ADSC =1 Inicia conversion

ADATE

Habilita la auto-activacin(auto-disparo) del ADC cuando este bit se configure a268


1

CONVERSOR DE ANALGICO A DIGITAL (ADC)

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

Bandera de Interrupcin completa.


Este bit se activa cuando la conversion ADC finaliza y los registros de datos son actualizados.

ADIE

Habilita la interrupcin de conversin

ADPS 0:2

Seleccin de la velocidad de conversion.


Estos bits determinan el factor de division entre la frecuencia XTAL y la entrada de reloj del ADC.

269

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro ADCSRA
ADEN

ADSC

ADATE

ADIF

ADPS2 ADPS1 ADPS0


0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1

ADIE

ADPS2

ADPS1

Factor de Divisin
0
2
4
8
16
32
64
128

ADPS0

270

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro ADCSRA
ADEN

ADSC

ADATE

ADIF

ADIE

ADPS2

ADPS1

ADPS0

271

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro de Control y de Estado B
ACDSRA ADEN
ACDSRB

ADSC

ADATE

ADIF

ADIE

Reservados /Configurados a cero

ADPS2

ADPS1

ADPS0

ADTS2

ADTS1

ADTS0

ADTS2

ADTS1

ADTS0

FUNCIN

Modo simple conversion

Comparador analgico

Interrupcin externa

Timer/Contador 0 Punto de comparacin

Timer/Contador 0 desbordamiento

Timer/Contador 1 Punto de comparacin B

Timer/Contador 1 desbordamiento

Timer/Contador 1 capture event


272

Conversor ADC

CONVERSOR DE ANALGICO A DIGITAL (ADC)


Registro para deshabilitar las entradas del Prtico (DIDRO)

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

Aplicaciones ADC del ATmega164p


Voltmetro:
Resultado de la conversion:
ADCH
Sin usar

ADCL
D9 D8

D7 D6 D5 D4 D3 D2 D1 D0

El voltmetro debe medir [0-5]V


o Resultado ADC = 10 bits
o Valor mximo que entrega ADC = 1111111111= 1023
o Vmax de voltaje del voltmetro = 5 V
o Relacin (Regla de tres):
1023
5V
V = Voltaje que mide
el Voltmetro
V
X
274

Aplicaciones ADC del ATmega164p


El resultado del ADC debe ser multiplicado por 5 y dividido para 1023
a fin de obtener el nivel de voltaje medido en el intervalo decimal de
[0-5]V.
1.- Multiplicacin:
o Se debe multiplicar cada Registros de Datos por el valor 5
5 x ADCL

5 x ADCH
Sin usar

D9 D8

D7 D6 D5 D4 D3 D2 D1 D0

o Al realizar la multiplicacin el resultado se almacena en dos registros R0 y R1


5 x ADCL

5 x ADCH
Sin usar

R1

D9 D8

R0

D7 D6 D5 D4 D3 D2 D1 D0

R1

R0

275

Aplicaciones ADC del ATmega164p


1.- Multiplicacin:
o Realizada la multiplicacin el resultado se almacena en los registros R0 y R1.
Este resultado se debe guardar en otros registros de Propsito General a fin
de realizar operaciones posteriores con estos valores.
5 x ADCL

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

Aplicaciones ADC del ATmega164p


1.- Multiplicacin:
o El resultado final de la multiplicacin se debe almacenar en 2 registros, es decir se
debe sumar 5xADCH + 5XADCL.
o Antes de realizar la suma es necesario establecer los valores mximos de los registros
del resultado de la multiplicacin.
o El mximo valor que calcular el ADC es: 1111111111
ADCH
Sin usar

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

Aplicaciones ADC del ATmega164p


1.-Multiplicacin:
o El resultado final de la multiplicacin: 5xADCH + 5XADCL.
lshadc
0 0 0 0 1 1 1 1

0 0 0 0 0 1 0 0
msladc

rhighmul

1 1 1 1 1 1 0 0
lsladc

rlowmul

Resultado de la multiplicacin ADCx5

278

Aplicaciones ADC del ATmega164p


2.- Divisin:
o El resultado final de la multiplicacin 5xADC (rhighmul y rlowmul) debe ser dividido
para 1023, de este modo se obtiene el resultado en 4 cifras (1 entero y 3 decimales).
o Ejemplo:
Obtener el equivalente de 1275 en 1 entero con 3 decimales.
1275

1023

= ,

Para obtener la division se procede a realizar restas sucesivas.


a) Entero: Resto la cifra de 1023 hasta obtener un resultado negativo, la cantidad de
restas con resultado positivo representa el Valor Entero a mostrar.
1275
1023
252
252
1023
771

1
Paro

Cifra Entera = 1
279

Aplicaciones ADC del ATmega164p


2.- Divisin:
b) 1er Decimal: Sumo al resultado negativo (de la resta final para obtener el equivalente
Entero) 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 1er
decimal a mostrar.

+1023
252
252
10
2520
2520
1023
1497
1497
1023
474
474
1023
549

Sumo 1023
Multiplico por
10
1

Al realizar una divisin para


obtener las cifras decimales
debo aumentar un cero al
residuo. Por ello multiplico por
10 ya que es la operacin
equivalente

2
Paro

1er Decimal = 2
280

Aplicaciones ADC del ATmega164p


2.- Divisin:
b) 2do Decimal: Sumo al resultado negativo (de la resta final para obtener el equivalente al 1er
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.

+ 1023
474
474
10
4740
4740
1023
3717
3717
1023
2694
2694
1023
1671

Sumo 1023

Multiplico por
10
1

Al realizar una divisin para


obtener las cifras decimales
debo aumentar un cero al
residuo. Por ello multiplico por
10 ya que es la operacin
equivalente

2
3
281

Aplicaciones ADC del ATmega164p


2.- Divisin:
b) 2do Decimal:
1671
1023
648
648
1023
375

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

Cada TIMER/CONTADOR emplea:


o Registro Timer/Contador TCNTn
o Registro de Control TCCRn
o Registro de Comparacin de salida OCRn
Los registros de los TIMERS se localizan en los
Registros de E/S de la memoria.

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

*Valor mximo de contador 11111111 = 0xFF = 25510


2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01
BITS

WGM00

DESCRIPCIN

COM0A 1:0

Modo de operacin de la salida A de comparacin

COM0B 1:0

Modo de operacin de la salida B de comparacin

WGM0 1:0

Controla la secuencia del Registro Contador


286

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A

FOC0B

BITS

------------ ------------ WGM02

CS02

CS01

CS00

DESCRIPCIN

FOC0 A:B

Para obligar a una comparacin.

WGM02

Controla la secuencia del Registro Contador.

CS0 2:0

Bits para escoger la fuente de reloj del contador.

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

------------ ------------ WGM02

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

PWM de fase correcta

001

Brinda una alta resolucin de fase


correcta de forma de onda en la
generacin de PWM

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

-El valor del contador (TCNT0) se


Se enciende en el valor mximo
incrementa hasta obtener una
TOP = 0xFF
igualdad en la comparacin entre los
registros TCNT0 y OCR0.
-El contador se carga con cero
cuando el valor del contador (TCNT0)
iguala al registro OCR0.

PWM Rpido

011

Brinda una alta generacin en


frecuencia de forma de onda PWM.

Se enciende en el valor mximo


TOP = 0xFF

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

-El valor final se establece en el


registro OCR0

Se enciende en el valor mnimo


0x00
Reservado

-El valor final se establece en el


registro OCR0

Se enciende en el valor mximo


TOP = 0xFF

290

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01

WGM00

Salidas en los modos Contador normal y CTC


COM0A1
COM0B1

COM0A0
COM0B0

DESCRIPCIN

Prtico en operacin normal, OC0A / OC0B desconectado.

Invierte OC0A / OC0B en Modo Comparacin

Nivel bajo en OC0A/OC0B en Modo Comparacin

Nivel alto en OC0A/OC0B en Modo Comparacin


OC0x pin de comparacin-salida
291

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01

WGM00

Salida A en el modo PWM Rpido


COM0A1

COM0A0

DESCRIPCIN

Prtico en operacin normal, OC0A desconectado.

WGM02=0: Modo en operacin Normal, OCA


desconectado
WGM02=1: Invierte OC0A en Modo Comparacin

Nivel bajo en OC0A en Modo Comparacin, Nivel alto al


inicio( Seal no Invertida)

Nivel alto en OC0A en Modo Comparacin, Nivel bajo al


inicio (Seal Invertida)

OC0x pin de comparacin-salida

292

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01

WGM00

Salida A en el modo PWM Fase correcta


COM0A1

COM0A0

DESCRIPCIN

Modo en operacin normal, OC0A desconectado.

WGM02=0:Modo en operacin Normal, OCA desconectado


WGM02=1: Invierte OC0A en Modo Comparacin

Nivel bajo en OC0A en Modo Comparacin cuando cuenta


de subida. Nivel alto OC0A en Modo Comparacin cuando
cuenta de bajada.

Nivel alto en OC0A en Modo Comparacin cuando cuenta


de subida. Nivel bajo en OC0A en Modo Comparacin
cuando cuenta de bajada
293

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01

WGM00

Salida B en el modo PWM Fase correcta


COM0B1

COM0B0

DESCRIPCIN

Prtico en operacin normal, OC0B desconectado.

Reservado

Nivel bajo en OC0B en Modo Comparacin con el contador


ascendente, Nivel alto al emparejarse en la comparacin
con el contador descendente.

Nivel alto en OC0B en Modo Comparacin con el contador


ascendente, Nivel bajo al emparejarse en la comparacin
con el contador descendente.
294

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A

FOC0B

------------ ------------ WGM02

CS02

CS01

CS00

Seleccin del reloj


CS02

CS01

CS00

DESCRIPCIN

Sin seal en el reloj Contador detenido

Clk/1 Sin pre escalamiento

Clk/8 Desde el pre-escalador

Clk/64 Desde el pre-escalador

Clk/256 Desde el pre-escalador

Clk/1024 Desde el pre-escalador

Flanco de bajada de la seal en el pin T0

Flanco de subida de la seal en el pin T0


295

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 0
3. Registros de Comparacin de salida:
o OCR0X

OCR0A Registro de Comparacin A


OCR0B Registro de Comparacin B

Son registros de 8 bits, el valor que contienen estos registros es


comparado con el valor del Registro Contador TCNT0.
7

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

4. Registros de Interrupcin de Banderas:


o TIFRX
RESERVADOS

BITS

OCF0B

OCF0A

TOV0

DESCRIPCIN

OCF0B

Modo de comparacin B de la bandera a la salida.

OCF0A

Modo de comparacin A de la bandera a la salida.

TOV0

Desbordamiento de Bandera

o TIMSKX
RESERVADOS
BITS

OCIE0B

OCIE0A

TOIE0

DESCRIPCIN

OCIE0B

Habilitacin de Interrupciones a la salida de la comparacin B.

OCIE0A

Habilitacin de Interrupciones a la salida de la comparacin A

TOIE0

Habilitacin de Interrupciones por desbordamiento


298

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

El contador llega a su valor


mximo

OCF1A

Emparejamiento de comparacin de
salida A

Existe una igualdad entre


TCNT1=OCR1A

OCF1B

Emparejamiento de comparacin de
salida B

Existe una igualdad entre


TCNT1=OCR1B

Captura a la entrada del timer

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

2.- Registros de control:


o TCCR1A
o TCCR1B
o TCCR1C

302

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 1
2.- Registros de control:

o TCCR1A
TCCR1A

COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM11


BITS

WGM10

DESCRIPCIN

COM1A 1:0

Modo de operacin de la salida A de comparacin

COM1B 1:0

Modo de operacin de la salida B de comparacin

o TCCR1B
TCCR1B

ICNC1

ICES1
BITS

------------ WGM13

WGM12

CS12

CS11

DESCRIPCIN

ICN1

Bit para cancelar el ruido en la entrada de captura

ICES1

Bit para seleccionar el flanco de la entrada de captura

CS 12:10

CS10

Bits para seleccionar el reloj del contador


303

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 1
2.- Registros de control:
o TCCR1C
TCCR1C

FOC1A

FOC1B

------------ ------------ ------------ ------------ ------------ ------------

BITS

DESCRIPCIN

FOC1A

Para obligar a una comparacin A

FOC1B

Para obligar a una comparacin B

o Modos de Operacin
Modo

WGM
13/12/11/10

Funcin

TOV0

Normal

0000

Contador normal ascendente


Valor mximo del contador
0xFFFF

Se enciende en el valor mximo


0xFF

PWM de fase
correcta (8bits)

0001

Valor mximo del contador


0x00FF

Se enciende en el valor mnimo


0x00
304

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

Valor mximo del contador


0x01FF

Se enciende en el valor mnimo


0x00

PWM de fase
correcta (10 bits)

0011

Valor mximo del contador


0x03FF

Se enciende en el valor mnimo


0x00

CTC
(Clear timer y
Punto de
Comparacin)

0100

Compara con el registro


OCR1A

Se enciende en el valor mximo

PWM rpido
(8 bits)

0101

Valor mximo del contador


0x0FF

Se enciende en el valor mximo

PWM rpido
(9 bits)

0110

Valor mximo del contador


0x01FF

Se enciende en el valor mximo

PWM rpido
(10 bits)

0111

Valor mximo del contador


0x03FF

Se enciende en el valor mximo


305

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

Valor mximo del contador


establece ICR1

Se enciende en el valor mnimo

PWM de fase y
frecuencia correcta

1001

Valor mximo del contador


Se establece en el registro
OCR1A

Se enciende en el valor mnimo

PWM de fase
correcta

1010

Valor mximo del contador


establece ICR1

Se enciende en el valor mnimo

PWM de fase
correcta

1011

Valor mximo del contador


Se establece en el registro
OCR1A

Se enciende en el valor mnimo

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

Valor mximo del contador


establece ICR1

Reservado

1101

PWM rpido

1110

Valor mximo del contador


establece ICR1

Se enciende en el valor mximo

PWM rpido

1111

Valor mximo del contador


se establece en el registro
OCR1A

Se enciende en el valor mximo

Se enciende en el valor mximo

Reservado

307

Timers / Contadores

Timers/Contadores
TIMER/CONTADOR 1
2. Registros de Control:
o TCCR1B
TCCR1B

ICNC1

ICES1

------------ WGM13

WGM12

CS12

CS11

CS10

Seleccin del reloj


CS12

CS11

CS10

DESCRIPCIN

Sin seal en el reloj Contador detenido

Clk/1 Sin pre escalamiento

Clk/8 Desde el pre-escalador

Clk/64 Desde el pre-escalador

Clk/256 Desde el pre-escalador

Clk/1024 Desde el pre-escalador

Flanco de bajada de la seal en el pin T1

Flanco de subida de la seal en el pin T1


308

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

Son dos registros de 8 bits, el valor que contienen estos


registros se compara con el valor de los Registros Contadores
TCNT1H y TCNT1L.

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

5. Registros de Banderas de Interrupcin:


o TIMSK1

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

Para habilitar interrupciones por captura o desbordamiento

OCIE1A /OCIE1B

Para habilitar interrupciones por comparacin

TOIE1

Para habilitar interrupciones por captura o desbordamiento

o TIFR1
ICF1
BITS

ICF1
OCF1B /OCF1A
TOV1

OCF1B

OCF1A

TOV1

DESCRIPCIN

Se habilita cuando ocurre captura de evento o desbordamiento


Se habilitan cuando existe igualdad en la comparacin.
Se habilita cuando ocurre captura de evento o desbordamiento

311

Timers/Contadores

Timers / Contadores

RESUMEN:
1.

El contador se incrementa/avanza con cada pulso de reloj. La fuente de reloj puede


ser:
Interna Se genera del oscilador interno del Microcontrolador (F_CPU).
La seal pasa previamente por el pre-escaler.

Externa Esta seal se conecta al pin Tn (n = 0/1)


El TIMER avanza con flanco de subida o de bajada.
Esta seal no pasa por el pre-escaler.

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.

4. El contador puede operar de 2 formas:

Llegar a su valor mximo 255 o 0xFF

Contar hasta un lmite que se define en los Registros de Comparacin. OCRxn


(x=timer n= A,B)

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:

Configurar los bits CS (Clock Select) para seleccionar la fuente de reloj y


el pre-escaler del timer.
Configurar los bits WGM (Waveform Generator Mode) para:
o Definir el Modo de Operacin del TIMER.
* Si se trabaja con los comparadores, se establece el Modo de
Operacin para generar Ondas Cuadradas.
Configurar los bits COM (Compare Output Mode) para definir las salidas
de las ondas generadas por los comparadores. Estas ondas se generarn
por los pines OCxn.( x=1,2 y n=A,B).

315

Timers/Contadores

Timers / Contadores

RESUMEN
6. Para controlar el TIMER:
Configurar los bits COM

* Si utilizamos al TIMER nicamente como


temporizador o contador los bits COM se
configuran con su valor por defecto de 0.
En este caso los pines OC0A y OC0B no se
conectan y pueden ser usados como pines
de E/S.

316

Timers / Contadores

Timers/Contadores
RESUMEN:
7. Modos de Operacin TIMER 0:
Modo
Normal

Funcin
Contador
Semejanza

PWM fase correcta


CTC

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.

fclk_I/O = Frecuencia del micro


N= Pre-escaler

*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.

Soporta formatos de 5,6,7,8 y 9 bits con 1 o 2 bits de parada.


Generador de paridad par o impar
Deteccin de sobreposicin y de trama
Genera tres interrupciones independientes para la recepcin,
transmisin y datos vacios.
325

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

Buffer para almacenar los datos que


son recibidos.
UCSRA

UCSRA
UCSRB
UCSRC

Registro
Generadores de
Baud-Rate

UBRR

UBRRH
UBRRL
326

USART

Comunicacin Serial -USART


Registros de datos
UDR (USART Data Register)

327

USART

Comunicacin Serial -USART


Registros de datos
UDR (USART Data Register)

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

Comunicacin Serial -USART


Registros de Control
UCSRA
UCSR0A

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

Registro de datos vacio

FEn

Error en la trama

DORn

Datos sobrepuestos

UPEn

Error de paridad

U2Xn
MPCMn

FUNCIONAMIENTO

Duplicacin de la velocidad en la comunicacin.


Modo de comunicaciones multiprocesadores
329

USART

Comunicacin Serial -USART


Registros de Control
UCSRB
UCSR0B

RXCIE0

TXCIE0

UDRIE0

RXEN0

TXEN0

UCSZ02

RXB80

TXB80

UCSR1B

RXCIE1

TXCIE1

UDRIE1

RXEN1

TXEN1

UCSZ12

RXB81

TXB81

BITS

FUNCIONAMIENTO

RXCIEn

Habilitacin de la interrupcin en la Recepcin

TXCIEn

Habilitacin de la interrupcin en la Transmisin

UDRIEn

Habilitacin de la interrupcin por datos vacios

RXENn

Habilitacin de la recepcin

TXENn

Habilitacin de la transmisin

UCSZn2

Seleccionar el nmero de bits

RXB8n

Noveno bit de recepcin

TXB8n

Noveno bit de transmisin


330

USART

Comunicacin Serial -USART


Registros de Control
UCSRC
UCSR0C

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

Comunicacin Serial -USART


Registros de Control
Nmero de bits de datos en una trama
UCSZN2:0

NMERO DE BITS

000

001

010

011

100

Reservado

101

Reservado

110

Reservado

111

332

USART

Comunicacin Serial -USART


Registros de Control
Modo de Operacin
UMSELn1:0

NMERO DE BITS

00

Asincrnico

01

Sincrnico

10

Reservado

11

Mster SPI

Bits de paridad y parada


UPMn 1:0

FUNCIN

00

Deshabilitado

01

Reservado

10

Habilitado Paridad par

11

Habilitado Paridad impar

USBSn

BITS DE PARADA

2
333

USART

Comunicacin Serial -USART


Registros UBRR y Velocidad de transmisin
Registros:
UBRR0

UBRROH

UBBROL
UBRR1

UBRR1H

UBBR1L

Modo Normal Asincrnico

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

Comunicacin Serial -USART


Velocidad de transmisin

335

S-ar putea să vă placă și