Sei sulla pagina 1di 41

TEMA 3: Microcontroladores

Bibliografa

DATASHEET. www.atmel.com
INFORMACIN ADICIONAL
Transparencias, Documentancin Electrnica,
tutoriales HTML en:

Enlaces a

http://www.dte.us.es/tec_inf/itig/microele/INDEX.HTM

MICROCONTROLADOR ATMEL AT90S2313


4.1.- Introduccin a los microcontroladores

Ciertas aplicaciones industriales requieren de ciertos sistemas digitales


programables que permitan un control relativamente fcil de dicha aplicacin.

Los microcontroladores son sistemas digitales inteligentes (programables).


Incluyen en un mismo chip todos los componentes ms importantes de un sistema
basado en microprocesador: CPU, memoria, puertos de E/S,etc.
El microcontrolador naci cuando las tcnicas de integracin progresaron lo
suficiente como para incluir en un mismo chip un sistema programable completo.
Existen mltiples ejemplos de aplicabilidad de los microcontroladores: Control de
una lavadora, fotocopiadora, impresora, bscula electrnica

La estructura tpica de un microcontrolador dispone de los siguientes elementos:

La CPU ejecuta y busca las instrucciones depositadas en memoria ROM. Recibe las
seales de reloj y sincronizacin necesarias de la unidad de reloj y las peticiones de
interrupcin.

La unidad de reloj o de oscilacin genera la seal cuadrada de reloj a partir de un


cristal de cuarzo externo.

El controlador de interrupciones puede aparecer como bloque diferencial o integrado


en la propia CPU, es responsable de transmitir las peticiones internas o externas de
interrupcin hacia la CPU.

Memoria

ROM, que almacena el programa y datos constantes

Memoria

RAM, que almacena variables modificables del programa

Perifricos

como timers o contadores, puerto serie, puerto paralelo, etc.

Cada fabricante define la estructura interna y juego de instrucciones, ofertando una


gran variedad de modelos en funcin de los componentes internos, tamao de la
memoria de programa, etc.
En la siguiente tabla se muestran las caractersticas ms importantes de algunas
familias de microcontroladores de diferentes fabricantes

4.2 Microcontrolador ATMEL AT90S2313

Microcontrolador de 8 bits con un encapsulado de 20 pines.


Dispone de pines con funciones concretas(VCC, GND, #RESET, XTAL1 y XTAL2).
Otros pines tienen un modo de trabajo totalmente configurable.

4.2.1 Descripcin de terminales

Pin 1 (/RESET): (Entrada).


Reinicia la ejecucin de instrucciones.
Como mnimo debe estar a 0 dos ciclos de reloj para que se procese.
El Microcontrolador inicia sus registros internos y comienza a ejecutar instrucciones
a partir de la direccin 0.
Pines 20,10 (VCC, GND): (Alimentacin).
Pines 4,5 (XTAL1,XTAL2): (Entradas de reloj).

Pin 2 PD0 (RX). (Bidireccional). Tiene dos funciones configurables.


Entrada o salida digital (bit 0 del puerto D).
4

Entrada de recepcin de datos serie para la UART.

Pin 3 PD1 (TX). (Bidireccional). Tiene dos funciones configurables.


Entrada o salida digital (bit 1 del puerto D).
Salida de transmisin de datos serie para la UART.
Pin 6 PD2 (INT0). (Bidireccional).Tiene dos funciones configurables.
Entrada o salida digital (bit 2 del puerto D).
Entrada de interrupcin externa INT0.
Pin 7 PD3 (INT1). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 3 del puerto D).
Entrada de interrupcin externa INT1.
Pin 8 PD4 (T0). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 4 del puerto D).
Entrada de reloj para el temporizador/contador 0.
Pin 9 PD5 (T1). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 5 del puerto D).
Entrada de reloj para el temporizador/contador 1.
Pin 11 PD6 (ICP). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 6 del puerto D).
Entrada de captura de cuenta del temporizador/contador 1.
Pin 12 PB0 (AIN0). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 0 del puerto B).
Entrada analgica para el comparador analgico integrado.
Pin 13 PB1 (AIN1). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 1 del puerto B).
Entrada analgica para el comparador analgico integrado.
Pin 14 PB2. (Bidireccional).
Entrada o salida digital (bit 2 del puerto B).
Pin 15 PB3 (OC1). (Bidireccional). Tiene dos funciones configurables.
Entrada o salida digital (bit 3 del puerto B).
Salida del temporizador/contador 1.
Pin 16 PB4. (Bidireccional).
Entrada o salida digital (bit 4 del puerto B).
Pines 16,17,18 PB5,6,7 (MOSI,MISO,SCK). (Bidireccionales). Tienen doble funcin:
Entradas/salidas digitales (bit 5,6,7 del puerto B)
Puerto serie sncrono de programacin..

4.2.2.- Descripcin interna


Estructura interna:.

Banco de 32 registros de 8 bits de propsito general, (realizan la totalidad de las


operaciones de clculo).
ALU de 8 bits (opera slo con los datos contenidos en el banco de registros).
RAM de 128x8 bits, ( almacenamiento de datos)
EEPROM de datos interna de 128x8, (almacenamiento no voltil de datos).
Memoria Flash EPROM de 1Kx16 bits (almacenamiento de instrucciones).
Arquitectura Hardvard.
Puerto serie asncrono o UART
Puerto serie sncrono SPI (slo usado para programacin).
Contador /temporizador de 8 bits.
Contador /temporizador de 16 bits (con funciones extendidas).
WATCHDOG o perro guardin (vigilancia del programa).
Comparador analgico
15 lneas de entrada/salida
Una unidad de generacin de interrupciones
6

Mapa de memoria de programa y de la memoria de datos.

1K x word de emoria de programa presenta.


Una instruccin ocupa, normalmente, 16 bits (word).
Existen tres regiones en la memoria de datos.
Banco de registros de propsito general. (direcciones $00-$1F) (-32-);
Registros de entrada/salida. (direcciones $20-$5F) (-64-).
Memoria de datos (SRAM) (direcciones $60-$DF)(-128-).

Detalle de direccionamiento de la memoria de datos

Muchas instrucciones usan (R0..R31) en lugar de la direccin que ocupa un registro


en particular en el espacio de direccionamiento de datos

Las instrucciones de entrada/salida (IN, OUT) usan una numeracin comprendida


entre 0 y 63 parar referenciar un registro de entrada/salida de otro, en lugar de la
direccin absoluta que ocupa ste en el espacio de direccionamiento.

El acceso de un dato en la zona SRAM requiere indicar su direccin ($60-$DF)

Registros de propsito general

Todas las instrucciones que operan con registros, acceden al conjunto del banco, a
excepcin de lass instrucciones que usan datos inmediatos ( SBCI, SUBI, CPI,
ANDI, ORI y LDI ) que slo acceden a la segunda mitad de los registros (R16..R31).

Existen instrucciones que pueden acceder a los registros del banco especificando la
direccin absoluta que stos ocupan en el espacio de direccionamiento.

Los ltimos 6 registros del banco, r26-r31, pueden tener funciones alternativas como
apoyo a los modos de direccionamiento y, en ese caso, se agrupan por pares para
constituir los registros X,Y,Z de 16 bits cada uno.

4.2.3.- Modos de direccionamiento de datos y programas


El AVR AT90S2313 permite 5 modos de direccionamiento de datos:

Directo
Indirecto
Indirecto con predecremento
Indirecto con postincremento
Indirecto con desplazamiento
Inmediato

MODO DE REGISTRO DIRECTO


La instruccin contiene un campo de 5 bits que permite especificar cualquier registro de
los 32 registros existentes en el fichero de registros

Ejemplo:
COM R4

;Calcula el complemento a 1 del registro R4

1001010ddddd0000
Aqu ddddd=00100

10

MODO DE REGISTRO DIRECTO (2 REGISTROS)


La instruccin contiene la direccin del operando fuente (Rr) y del destino (Rd)(ambos
operandos son registros del fichero de registros).

Ejemplo:
MOV R2,R4 ; Copia el contenido de R4 en R2
001011rdddddrrrr
Aqu rrrrr=00100 y ddddd=00010.
MODO DE REGISTRO E/S DIRECTO
En este caso, la instruccin contiene la direccin de 6 bits del registro de E/S. N es el
registro que acta como fuente o destino de la informacin

11

Ejemplos:

IN R14,34
OUT 34,r14

; copia el contenido del puerto 34 en el registro r14


;copia el contenido del registro r14 en el puerto 34

Para la primera instruccin el cdigo es


1011 0PPd dddd PPPP
Donde PPPPPP =34 y ddddd=14
MODO DE DIRECCIONAMIENTO DIRECTO
La instruccin viene acompaada de una palabra de 16 bits que contiene la direccin de
memoria (SRAM,E/S,FILE REGISTER), adems de un campo Rd/Rr que contiene el
registro que ser fuente o destino de la informacin

Ejemplos:

LDS

r23,$d0

STS

$12,r1

;Carga el contenido de la direccin $d0 del espacio


;de direccionamiento de datos en el registro r23
;Carga el contenido del registro r1 en la direccin
;$12 del espacio de direccionamiento de datos.

El cdigo mquina de LDS es


1001000ddddd0000
kkkkkkkkkkkkkkkk
12

MODO DE DIRECCIONAMIENTO INDIRECTO CON DESPLAZAMIENTO


La instruccin contiene el desplazamiento que se sumar al registro Y o Z para formar la
direccin donde se encuentra el operando

Ejemplo:

LDD r1,Y+10 ;Carga en r1 el dato que se encuentra en la posicin de


;memoria determinada por el resultado de la suma de 10
;con el contenido del registro Y. El contenido de Y no se
;modifica.

El cdigo de la instruccin LDD es


10q0 qq0d dddd rqqq
Donde 0<d<31, representa el registro destino, 0<q<63 el desplazamiento y r asigna el
registro, Y para r=1 y Z para r=0.

13

MODO DE DIRECCIONAMIENTO INDIRECTO


La direccin del operando se encuentra en el registro X,Y o Z especificado en el cdigo
de operacin de la instruccin.

Ejemplos:

LD r1,X ; Carga en el registro r1 el contenido de la posicin de memoria


; seleccionada por el registro X.
ST Z,r10; Salva en la posicin de memoria de datos seleccionada por el
;registro Z, el contenido del registro r10

MODO DE DIRECCIONAMIENTO INDIRECTO CON PREDECREMENTO


Es idntico al modo anterior, salvo que en este caso, el registro X,Y,Z se decrementa
previamente en una unidad

14

Ejemplos:

LD r15,-X
ST -Y,r1

MODO DE DIRECCIONAMIENTO INDIRECTO CON POSTINCREMENTO


Igual que el indirecto pero que al final el contenido del registro X, Y o Z se incrementa
en una unidad.

Ejemplos:

LD

r0,X+ ;Carga el contenido del registro r0 con el dato situado en la


;posicin de memoria indicada por X. Despus del acceso,
;el contenido de x se incrementa en una unidad.
STZ+,r1
;Almacena en la direccin indicada por Z, el contenido ;
del registro r1. Despus, se incrementa, en uno, el
registro ;Z

MODO DE DIRECCIONAMIENTO DE CONSTANTES EN MEMORIA DE


PROGRAMA (instruccin LPM)

Los bloques de constantes deberan almacenarse en la memoria de programa y liberar


espacio en la de datos.

Existe un puente entre el bus de datos de la memoria de programa y el bus de datos


de la memoria de datos que slo utiliza la instruccin LPM.

Para acceder a un byte de la memoria de programa se usa el registro Z, que contendr


su direccin. El bit 0 del registro Z selecciona el byte alto o bajo de la palabra de 16
bits elegida que se vuelca en R0.

15

Ejemplo:
.cseg
tabla:

.dw 0x00ff,0x1020

ldi
zlow,low(2*tabla)
ldi
zhigh,high(2*tabla)
LPM ;esto carga en r0 el valor 0xff de la tabla
ADIW Z,1
LPM ;esto carga en r0 el valor 0x00 de la tabla
ADIW Z,1
LPM ;esto carga en r0 el valor 0x20 de la tabla
ADIW Z,1
LPM ;esto carga en r0 el valor 0x10 de la tabla

Memoria de Programa
Direccin
0
.
tabla
tabla+1
.

Contenido
??
??
..
..
00
FF
10
20
..
..

16

MODO DE DIRECCIONAMIENTO DE PROGRAMA INDIRECTO (IJUMP,ICALL)


Estas instrucciones permiten que la ejecucin del programa salte a la posicin de la
memoria de programa indicada por el contenido del registro Z.

MODO DE DIRECCIONAMIENTO RELATIVO DE PROGRAMA (RJMP ,RCALL)


La instruccin contiene un desplazamiento K que se suma al contenido del PC para
encontrar la siguiente instruccin a ejecutar. Esto es, la ejecucin del programa continua
en la direccin PC+k+1 donde k vale desde 2048 a 2047

Ejemplo:
RJMP

vector_1 ;El programa salta a la posicin de memoria etiquetada como


vector_1 .
RCALL funcin ;El programa salta a la posicin de memoria etiqueta como funcin
para ejecutar la rutina correspondiente.

17

4.2.4.- Sistema de control de interrupciones y Reset


Existen tres causas que producen la activacin de un RESET interno, y son:

Power-On Reset (Reset inicial, cuando se alimenta el microcontrolador)


Reset externo (Por activacin del pin RESET)
Watchdog Reset (Por activacin del perro guardin)

Un RESET inicializan los registros de E/S a sus valores por defecto, y se inicia la
ejecucin del programa a partir de la direccin $000 de memoria.
La estructura de inicializacin viene esquematizada en la siguiente figura

Power-On Reset. Este se activa la primera vez que se da alimentacin al


microcontrolador, y tiene como objetivo el iniciar y esperar a que la tensin de
alimentacin alcance un valor adecuado.

18

Reset Externo. Inicializa el microcontrolador cuando se activa un pulso en el pin de


RESET

Watchdog Reset. El perro guardin consiste en un contador que cuando alcanza su


valor final de cuenta genera un reset interno.

19

Un RESET provoca el inicio de la ejecucin de instrucciones a partir de la direccin


$0000 de la memoria de programa. Esta direccin se define como el vector de
RESET.

Existen otros vectores o posiciones de memoria de programa que son el destino del
microcontrolador cuando se genera una interrupcin.
Vector n
1
2
3
4
5
6
7
8
9
10
11

Direccin de
programa
$000
$001
$002
$003
$004
$005
$006
$007
$008
$009
$00A

Origen

Definicin de interrupcin

RESET
INT0
INT1
TIMER1, CAPT1
TIMER1, COMP1
TIMER1, OVF1
TIMER0,OVF0
UART,RX
UART,UDRE
UART,TX
ANA_COMP

Hardware Pin and Watchdog Reset


External interrupt request 0
External interrupt request 1
Timer/counter 1 capture event
Timer/counter 1 compare match
Timer/counter 1 overflow
Timer/counter 0 overflow
UART,rx complete
UART Data register empty
UART, tx complete
Analog Comparator

Ejemplo. Si se recibe un dato en la UART y esta situacin est habilitada para


generar una interrupcin. El microcontrolador, despus de guardar el PC en la pila,
bifurca a ejecutar instrucciones a partir de la direccin $007 de la memoria de
programa (vector 8).

Toda rutina de interrupcin debe terminar con la insstruccin RETI.

En el proceso de salvado del PC en la PILA, no se almacena el registro de SREG.


Esto habr que hacerlo manualmente.

Cuando se inicia una interrupcin el bit I del registro de estado SREG se pone a cero
(inhabilita otras interrupciones) y la instruccin RETI restaura el valor de I.

Es conveniente que en la posicin de cada vector exista una instruccin de salto


incondincional, RJMP a la posicin de memoria de programa(o etiqueta) donde se
ubica la rutina de interrupcin o de reset.

$000
$001
$002
$003
$004
$005
$006
$007
$008
$009
$00A

rjmp RESET
rjmp EXT_INT0
rjmp EXT_INT1
rjmp TIM_CAPT1
rjmp TIM_COMP1
rjmp TIM_OVF1
rjmp TIM_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_7X
rjmp ANA_COMP

; Reset Handler
; IRQ0 Handler
; IRQ1 Handler
; Timer1 capture Handler
; Timer1 compare Handler
; Timer1 overflow Handler
; Timer0 overflow Handler
; UART RX complete Handler
; UART data register empty Handler
; UART TX complete Handler
; Analog Comparator Handler

Existe gestin de prioridades en las interrupciones. Las de nmero de vector ms


bajo, tienen mayor prioridad. Por tanto, si hay coincidencia de eventos, se atender el
ms prioritario.
20

4.2.5.- Registros de entrada/salida

DIRECCIN

NOMBRE

$3F($5F)
$3E($5E)
$3D($5D)
$3C($5C)
$3B($5B)
$3A($5A)
$39($59)
$38($58)
$37($57)
$36($56)
$35($55)
$34($54)
$33($53)
$32($52)
$31($51)
$30($50)
$2F($4F)
$2E($4E)
$2D($4D)
$2C($4C)
$2B($4B)
$2A($4A)
$29($49)
$28($48)
$27($47)
$26($46)
$25($45)
$24($44)
$23($43)
$22($42)
$21($41)
$20($40)
$1F($4F)
$1E($3E)
$1D($3D)
$1C($3C)
$1B($3B)
$1A($3A)
$19($39)
$18($38)
$17($37)
$16($36)
$15($35)
$14($34)
$13($33)
$12($32)
$11($31)
$10($30)
$0F($4F)
$0E($2E)
$0D($2D)
$0C($2C)
$0B($2B)
$0A($2A)
$09($29)
$08($28)
...
$00($20)

SREG
Reservado
SPL
Reservado
GIMSK
GIFR
TIMSK
TIFR
Reservado
Reservado
MCUCR
Reservado
TCCR0
TCONT0
Reservado
Reservado
TCCR1A
TCCR1B
TCNT1H
TCNT1L
CCR1AH
CCR1AL
Reservado
Reservado
Reservado
Reservado
ICR1H
ICR1L
Reservado
Reservado
WDTCR
Reservado
Reservado
EEAR
EEDR
EECR
Reservado
Reservado
Reservado
PORTB
DDRB
PINB
Reservado
Reservado
Reservado
PORTD
DDRD
PIND
Reservado
Reservado
Reservado
UDR
USR
UCR
UBRR
ACSR
Reservado
Reservado

BIT 7

BIT 6

BIT 5

BIT 4

BIT 3

BIT 2

BIT 1

BIT 0

SP7

SP6

SP5

SP4

SP3

SP2

SP1

SP0

INT 1
INTF 1
TOIE 1
TOV1

INT 0
INTF 0
OCIE1A
OCF1A

TICIE 1
ICF 1

TOIE 0
TOV 0

SE

SM

ISC11

ISC10

ISC01

ISC00

CS02

CS01

CS00

COM1A1
ICNC1

COM1A0
ICES1

PWM11
CS11

PWM10
CS10

TIMER/COUNTER 0 ( 8 bit)

CTC1
CS12
TIMER/COUNTER 1 - Counter Register High byte
TIMER/COUNTER 1 - Counter Register Low byte
TIMER/COUNTER 1 - Compare Register High byte
TIMER/COUNTER 1 - Compare Register Low byte

TIMER/COUNTER 1 - Input Capture Register High byte


TIMER/COUNTER 1 - Input Capture Register Low byte
-

WDTOE

WDP2

WDP1

WDP0

EEPROM Adress Register


EEPROM Data Register
WDTOE
WDE
WDP2

WDP1

WDP0

WDE

PORTB7
DDRB7
PINB7

PORTB6
DDRB6
PINB6

PORTB5
DDRB5
PINB5

PORTB4
DDRB5
PINB4

PORTB3
DDRB3
PINB3

PORTB2
DDRB2
PINB2

PORTB1
DDRB1
PINB1

PORTB0
DDRB0
PINB0

PORTD6
DDRD6
PIND6

PORTD5
DDRD5
PIND5

PORTD4
DDRD4
PIND4

PORTD3
DDRD3
PIND3

PORTD2
DDRD2
PIND2

PORTD
DDRD1
PIND1

PORTD0
DDRD0
PIND0

RXC
RXCIE

TXC
TXCIE

UDRE
UDRIE

CHR9

RXB8

TXB8

ACD

ACO

ACIC

ACIS1

ACIS0

UART I/0 Data Register


FE
OR
RXEN
TXEN
UART Baud Rate register
ACI
ACIE

21

Registro de estado (SREG)

Bit C: (Acarreo). Si est a 1, indica la existencia de acarreo en las operaciones de suma


y de borrow en las operaciones de resta.
Bit Z: (Cero). Se pone a 1 cuando el resultado de una operacin es cero, y 0 en caso
contrario
Bit N(Negativo): Se pone a 1 si el resultado es negativo y 0 si es positivo. Es idntido al
bit 7 del resultado.
Bit V(Overflow): Se pone a 1 cuando existe desbordamiento en operaciones de nmeros
con signo.
Bit S(Signo): Es el resultado de la operacin NV.
Bit H(Half Carry): Igual que el bit C, pero indicando si existe acarreo en los cuatros bits
menos significativos.
Bit T(Bit copia): Es un biestable de uso temporal que es manejado por dos instrucciones
especiales, para copiar y escribir un bit.
Bit I(Habilitador de interrupciones global): Este es el habilitador de interrupciones.
Debe estar a 1 lgico para que el microcontrolador procese interrupciones. Si est a 0 no
se procesan las interrupciones. Este bit es automticamente puesto a cero cuando una
interrupcin est siendo atendida y puesto, automticamente a 1, tras la ejecucin de la
instruccin RETI

22

Registro Puntero de pila (SP)

Apunta al rea de la memoria SRAM, donde la pila de subrutinas e interrupciones se


sita.
Este espacio (la pila) debe ser, por tanto, definida antes de que se ejecute alguna
subrutina y antes de habilitar las interrupciones
El puntero de pila SP se decrementa en una unidad cuando se meten datos en la pila
(instruccin PUSH) o se decrementa en dos unidades cuando se ejecuta una instruccin
RCALL o se produce una interrupcin
El puntero de pila SP se incrementa en una unidad cuando se sacan datos de la pila
(instruccin POP), o se incrementa en dos unidades cuando se ejecutan las
instrucciones de regreso de subrutina e interrupcin, RET e RETI

23

4.2.6 .- Resumen del juego de instrucciones


Instrucciones de transferencia de datos
MOV
LDI

Rd,Rr
Rd,k

LDS

Rd,k

LD

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

LDD
STS

K, Rr

ST

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

STD

LPM
IN

Rd,P

OUT

P,Rr

PUSH
POP

Rr
Rd

Copiar registro
Cargar dato
inmediato
Cargar dato desde la
memoria
Carga el registro con
un dato indirecto

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

Carga el registro con


un dato indirecto con
desplazamiento
Almacenar dato en
memoria
Almacenar registro
en memoria

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

Almacenar registro
en memoria con
indirecto con
desplazamiento
Carga memoria de
programa
Entrada del puerto

r[0,31]

Salida hacia el
puerto
Empujar en pila
Sacar de pila

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

d[0,31]
P[0,63]
r[0,31]
P[0,63]
r[0,31]
d[0,31]

RdRr
Rd k

Ninguno
Ninguno

Rd (k)

Ninguno

Rd (X)
Rd (X);XX+1
XX-1-,Rd (X)
Rd (Y)
Rd (Y);YY+1
YY-1;Rd (Y)
Rd (Z)
Rd (Z);ZZ+1
ZZ-1;Rd (Z)
Rd (Y+q)
Rd (Z+q)

Ninguno

(K) Rr

Ninguno

(X) Rr
(X) Rr;XX+1
XX-1-, (X)Rr
(Y)Rr
(Y) Rr;YY+1
YY-1; (Y) Rr
(Z) Rr
(Z)Rr;ZZ+1
ZZ-1; (Z)Rr
(Y+q)Rr
(Z+q) Rr

Ninguno

R0 (Z)

Ninguno

RdP

Ninguno

P Rr

Ninguno

STACKRr
Rd STACK

Ninguno
Ninguno

Ninguno

Ninguno

24

Instrucciones aritmticas y lgicas


ADD
ADC
ADIW

Rd,Rr
Rd,Rr
Rd,K

SUB
SUBI

Rd,Rr
Rd,K

SBC
SBCI

Rd,Rr
Rd,K

SBIW

Rd,K

AND
ANDI

Rd,Rr
Rd,K

OR
ORI

Rd,Rr
Rd,K

EOR
COM
NEG
INC
DEC
CLR
SER
CP
CPC
CPI

Rd,Rr
Rd
Rd
Rd
Rd
Rd
Rd
Rd,Rr
Rd,Rr
Rd,K

Suma sin carry


Suma con carry
Suma inmediato con
palabra
Resta sin carry
Resta inmediato
Resta con carry
Resta inmediato con
carry
Resta inmediato con
palabra
And lgica
And lgica con dato
inmediato
Or lgica
Or lgica con dato
inmediato
Exclusive or
Complemento a 1
Complemento a 2
Incrementa
Decrementa
Poner a cero
Poner todo a 1
Compara
Compara con carry
Compara inmediato

d,r[0,31]
d,r[0,31]
d[24,26,28,30]
K[0,63]
d,r[0,31]
d[16,31]
K[0,255]
d,r[0,31]
d[16,31]
K[0,255]
d[24,26,28,30]
K[0,63]
d,r[0,31]
d[16,31]
K[0,255]
d,r[0,31]
d[16,31]
K[0,255]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d,r[0,31]
d[16,31]
K[0,255]

Rd Rd+Rr
Rd Rd+Rr+C
Rd+1:Rd Rd+1:Rd
+K
RdRd-Rr
RdRd-K

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

RdRd-Rr-C
RdRd-K-C

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

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

Rd+1:Rd Rd+1:Rd - Z,N,V,C


K
Z,N,V
RdRdRr
Z,N,V
RdRdK
RdRdRr
RdRdK

Z,N,V
Z,N,V

RdRdK
Rd$FF-Rd
Rd$00-Rd
RdRd+1
RdRd-1
Rd0
Rd$FF
Rd-Rr
Rd-Rr-C
Rd-K

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

25

Instrucciones de salto
RJMP
RCALL

Etiqueta
Etiqueta

RET
RETI
CPSE

Rd,Rr

SBRC

Rr,b

SBRS

Rr,b

SBIC

P,b

SBIS

P,b

BRBS

s, Etiqueta

BRBC

s, Etiqueta

BREQ

Etiqueta

Salto relativo
Llamada a subrutina
relativa
Regreso de subrutina
Regreso de interrup.
Compara, esquiva si
iguales
Esquiva si el bit est a
cero
Esquiva si el bit est a
uno
Esquiva si el bit del
puerto est a 0
Esquiva si el bit del
puerto est a1
Salta si el bit s del
status est a 1
Salta si el bit s del
status est a 0
Salta si iguales

-2k< Etiqueta <2k


-2k< Etiqueta <2k

BRNE

Etiqueta

Salta si distintos

Etiqueta [-64,63]

BRCS

Etiqueta

Salta si C est a 1

Etiqueta [-64,63]

BRCC

Etiqueta

Salta si Cest a 0

Etiqueta [-64,63]

BRSH

Etiqueta

Salta si igual o mayor

Etiqueta [-64,63]

BRLO

Etiqueta

Salta si menor

Etiqueta [-64,63]

BRMI

Etiqueta

Salta si negativo

Etiqueta [-64,63]

BRPL

Etiqueta

Salta si positivo

Etiqueta [-64,63]

BRHS

Etiqueta

Salta si H est a 1

Etiqueta [-64,63]

BRHC

Etiqueta

Salta si H est a 0

Etiqueta [-64,63]

BRTS

Etiqueta

Salta si T est a 1

Etiqueta [-64,63]

BRTC

Etiqueta

Salta si T est a 0

Etiqueta [-64,63]

BRVS

Etiqueta

Salta si V est a 1

Etiqueta [-64,63]

BRVC

Etiqueta

Salta si V est a 0

Etiqueta [-64,63]

BRIE

Etiqueta

Salta si I est a 1

Etiqueta [-64,63]

BRID

Etiqueta

Salta si I est a 0

Etiqueta [-64,63]

BRGE

Etiqueta

BRLT

Etiqueta

Salta si mayor o igual, Etiqueta [-64,63]


(signo)
Salta si menor (signo) Etiqueta [-64,63]

d,r[0,31]
r[0,31]
b[0,7]
r[0,31]
b[0,7]
P[0,7]
b[0,7]
P[0,63]
b[0,7]
s[0,7]
Etiqueta [-64,63]
s[0,7]
Etiqueta [-64,63]
Etiqueta [-64,63]

PCPC+ Etiqueta +1
PCPC+ Etiqueta +1

Ninguno
Ninguno

PC STACK
PC STACK
Si Rd=Rr PC PC+2
( 3)
Si (Rd(b)=0)
PC PC+2 ( 3)
Si (Rd(b)=1)
PC PC+2 ( 3)
Si (I/o(P,b)=0)
PC PC+2 ( 3)
Si (I/O(P,b)=1)
PC PC+2 ( 3)
Si (SREG(s)=1)
PC PC+ Etiqueta +1
Si (SREG(s)=0)
PC PC+ Etiqueta +1
Si (Z=1)
PC PC+ Etiqueta +1
Si (Z=0)
PC PC+ Etiqueta +1
Si (C=1)
PC PC+ Etiqueta +1
Si (C=0)
PC PC+ Etiqueta +1
Si (C=1)
PC PC+ Etiqueta +1
Si (C=0)
PC PC+ Etiqueta +1
Si (N=1)
PC PC+ Etiqueta +1
Si (N=0)
PC PC+ Etiqueta +1
Si (H=1)
PC PC+ Etiqueta +1
Si (H=0)
PC PC+ Etiqueta +1
Si (T=1)
PC PC+ Etiqueta +1
Si (T=0)
PC PC+ Etiqueta +1
Si (V=1)
PC PC+ Etiqueta +1
Si (V=0)
PC PC+ Etiqueta +1
Si (I=1)
PC PC+ Etiqueta +1
Si (I=0)
PC PC+ Etiqueta +1
Si (NV=0)
PC PC+ Etiqueta +1
Si (NV=1)
PC PC+ Etiqueta +1

Ninguno
I
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

26

Resumen de los saltos condicionales y de cmo estos afectan a los flags del registro de
estado.
Test (CP Rd,Rr)
Rd Rr
Rd < Rr
Rd = Rr
Rd Rr
Rd Rr
Rd < Rr
Carry
Sin carry
Negativo
Positivo
Overflow
Sin overflow
Cero
No cero

Booleana
Z + (N V) = 0
(N V) = 1
Z=1
Z= 0
C=0
C=1
C=1
C=0
N=1
N=0
V=1
V=0
Z=1
Z=0

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

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

Miscelnea
LSL

Rd

LSR

Rd

ROL

Rd

ROR

Rd

ASR

Rd

SWAP
BSET

Rd
S

BCLR

SBI

P,b

CBI

P,b

NOP
SLEEP
WDR

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

d[0,31]

Z,C,N,V,H

d[0,31]
s[0,7]

Rd(n+1)Rd(n),
Rd(0)0, C Rd(7)
Rd(n)Rd(n+1),
Rd(7)0, C Rd(0)
Rd(n+1)Rd(n),
Rd(0)C, C Rd(7)
Rd(n)Rd(n+1),
Rd(7)C, C Rd(0)
Rd(n)Rd(n+1),
Rd(7)Rd(7), C Rd(0)
Rd(3..0)Rd(7.4)
SREG(s)1

Desplazamiento
aritmtico a la derecha
Intercambia nibbles
Poner a 1 el bit s del
registro de estado
Poner a 0 el bit s del
registro de estado
Poner a 1 el bit b del
puerto IO
Poner a 0 el bit b del
puerto IO
Sin operacin
Dormir
Borrado del perro
guardin

d[0,31]

S[0,7]

SREG(s)0

SREG(s)

b[0,7]
P[0,31]
b[0,7] P
[0,31]

IO(P,b)1

Ninguno

IO(P,b)0

Ninguno

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

Z,C,N,V
Z,C,N,V,H
Z,C,N,V,
Z,C,N,V,
Ninguno
SREG(s)

Ninguno
Ninguno
Ninguno

27

4.2.7.- General Interrupt Mask register (GIMSK)

De este registro slo se utilizan los dos bits ms significativos INT1,INT0


INT1.- Si este bit est a 1, y el bit I del registro de estado est a 1, la interrupcin
externa del pin INT1(PD3) est activada. Los bits ISC11 e ISC10 del registro MCUCR
definen si la interrupcin externa se activa en el flanco de subida o bajada de la entrada
o si esta es activa por nivel. Cualquier tipo de actividad en este pin causar una
interrupcin incluso si el pin PD3, es configurado como salida. La correspondiente
interrupcin es ejecutada desde la direccin $002.
INT0.- Si este bit est a 1, y el bit I del registro de estado est a 1, la interrupcin
externa del pin INT0(PD2) est activada. Los bits ISC01 e ISC00 del registro MCUCR
definen si la interrupcin externa se activa en el flanco de subida o bajada de la entrada
o si esta es activa por nivel. Cualquier tipo de actividad en este pin causar una
interrupcin incluso si el pin PD2, es configurado como salida. La correspondiente
interrupcin es ejecutada desde la direccin $001.
4.2.8.- General Interrupt Flag Register (GIFR)

INTF1: Cuando un evento en el pin INT1 dispara una peticin de interrupcin, INTF1
se pone a 1. Si el bit I del SREG est a 1 y el bit INT1 del GIMSK est a 1, el MCR
saltar al vector de interrupcin en la direccin $002. El flag se pone a 0 cuando se
ejecute la rutina de interrupcin. Alternativamente, este flag puede ser puerto a cero
escribiendo un 1 en l.
INTF0: Cuando un evento en el pin INT0 dispara una peticin de interrupcin, INTF0
se pone a 1. Si el bit I del SREG est a 1 y el bit INT0 del GIMSK est a 1, el MCR
saltar al vector de interrupcin en la direccin $001. El flag se pone a 0 cuando se
ejecute la rutina de interrupcin. Alternativamente, este flag puede ser puerto a cero
escribiendo un 1 en l.

28

4.2.9.- Timer/Counter Interrupt Mask Register (TIMSK)

TOIE0: (Timer/Counter0 overflow interrupt enable). Cuando este bit est a 1 y el bit I
del SREG est a 1, se habilita la interrupcin de overflow del temporizador/contador 0.
La correspondiente interrupcin (en la posicin $006) se ejecuta si existe un overflow
en el temporizador. El flag de overflow se pone a 1 en el registro TIFR.
Timer/Counter Interrupt Flag Register (TIFR)

TOV0: ( Timer/Counter0 Overflow Flag ). El bit TOV0 se pone a 1 cuando ocurre un


overflow en el temporizador/contador 0. TOV0 se pone a 0 cuando se ejecuta la
correspondiente rutina de interrupcin aunque alternativamente se puede poner a 0
escribiendo un 1 lgico en el flag.
4.2.10.- MCU control register (MCUCR)

SE (Sleep Enable): Este bit debe estar a1 para hacer que el microcontrolador pase al
modo dormido cuando se ejecuta la instruccin SLEEP. Es recomendable poner este bit
a 1 justo antes de ejecutar la instruccin SLEEP.
SM (Sleep Mode): Este bit selecciona dos posibles modos de dormir. Si est a cero, se
entra en modo inactivo (Idle Mode), si est a 1 en modo Desconexin (Power Down).
En cualquier modo Sleep seleccionado, el microprocesador para la ejecucin de
instrucciones despus de la instruccin SLEEP.

29

Si una interrupcin ocurre cuando el MCU est dormido, este despierta, ejecuta la
rutina de interrupcin y sigue procesando las instrucciones del programa principal
que continuaban detrs de la instruccin SLEEP.
Los contenidos del fichero de registros, SRAM y E/S se mantienen sin cambios. Si
ocurre un RESET cuando el microprocesador est dormido, este se despierta y
ejecuta desde el vector de RESET.

Idle Mode

En este modo se permite el funcionamiento de los temporizadores, watchdog y el


sistema de interrupciones, lo que permite despertar al microcontrolador tanto por las
interrupciones externas como las internas (Timer Overflow y watchdog).

Power Down

En este modo, el oscilador externo se detiene. Slo opera el watchdog (opcional) y


las interrupciones externas (por nivel) y de RESET. Estos elementos son los nicos
que pueden hacer despertar a la CPU.

ISC1X: Interrupt Sense Control 1 bit 1 y bit 0. Estos bits configuran el modo de
interrupcin mediante la seal externa INT1

El fabricante recomienda que antes de cambiar los valores de estos bits, se desactiven
las interrupciones del microcontrolador, poniendo el bit I del registro SREG a cero.
ISC0X: Interrupt Sense Control 1 bit 1 y bit 0. Estos bits configuran el modo de
interrupcin mediante la seal externa INT0

30

4.2.11.- Puerto B

El puerto B es un puerto de E/S bidireccional de 8 bits. Existen tres registros de E/S


asociados al puerto B: PORTB, DDRB, PINB.

El registro PINB, es de slo lectura, mientras que los otros son de R/W.

Todos los pines del puertoB tienen resistencias de pull-up que pueden activarse o no.

Alternativamente, los pines del puerto B tienen asociadas otras funciones que pueden
estar activas o no.En cada caso, los valores de los bits de los registros PORTB y
DDRB deben estar en concordancia con las funciones alternativas.

DDRB

Define si el pin n ser usado como entrada o como salida. Esto es, si DDRBn es 1, el
pinBn es salida, si DDRB es 0, pinBn es entrada.

31

PORTB

Si el pinBn est configurado como salida, entonces este pin muestra el valor lgico
asociado al PORTBn.

Si el pinBn est configurado como entrada, entonces sin PORBTn est a 1, se activan
las resistencias de pull-up, en caso contrario, estas resistencias no estn habilitadas

PINB

Permite la lectura de los valores lgicos de los pines. Es un registro de lectura

4.2.12.- Puerto D

El puerto D es un puerto de E/S bidireccional de 7 bits.

Existen tres registros de E/S asociados al puerto D: PORTD,DDRD,PIND. El


registro PIND, es de slo lectura, mientras que los otros son de R/W.

Todos los pines del puertoD tienen resistencias de pull-up que pueden activarse o no.

Alternativamente, los pines del puerto D tienen asociadas otras funciones que pueden
estar activas o no. En cada caso, los valores de los bits de los registros PORTD y
DDRD deben estar en concordancia con las funciones alternativas.

DDRD

Define si el pin n ser usado como entrada o como salida. Esto es, si DDRDn es 1, el
pinBn es salida, si DDRD es 0, pinDn es entrada.
32

PORT D

Si el pinDn est configurado como salida, entonces este pin muestra el valor lgico
asociado al PORTDn.

Si el pinDn est configurado como entrada, entonces sin PORTDn est a 1, se activan
las resistencias de pull-up, en caso contrario, estas resistencias no estn habilitadas

PIND

Permite la lectura de los valores lgicos de los pines. Es un registro de lectura.

4.2.13.- Temporizador/contador 0

Dispone de un contador de 8 bits.

Utilizan un prescaler de 10 bits que permite configurar la fuente de reloj hacia el


contador/temporizador.

33

El contador/temporizador 0 dispone de los siguientes elementos

Un registro Timer/Counter0 de 8 bits.

Un registro de control TCCR0 que permite configurar la seal de reloj que llegar al
registro timer/counter0.

Registros de flag y habilitacin de interrupciones (TIFR,TIMSK) ya estudiados.

Timer/Counter0 Control Register (TCCR0)

CS0X: Definen la entrada de reloj del contador 0.

34

Timer/Counter0 (TCNT0)

Esta implementado como un contador ascendente de 8 bits. Si se escribe o se lee en


el contador, este prosigue su proceso de cuenta en el ciclo de reloj posterior a su
escritura.

Se activa el bit TOV0 cada vez que el contador pasa de $FF a $00 (overflow).

4.2.14 Watchdog timer

El perro guardin vigila el correcto funcionamiento del programa.


Dispone de un oscilador propio que corre a una frecuencia de 1Mhz y de un
preescalador programable por el usuario.
El conjunto oscilador-preescalador define un intervalo de tiempo que, una vez
transcurrido, provoca un RESET del MCU, si el watchdog est activado. El intervalo
de ajuste del watchdog vara entre 16-2048ms.
El programa principal debe ser el responsable de inicializar a cero el contenido del
WATCHDOG con el objeto de que este no genere un RESET interno. Esto se
consigue con la instruccin WDR.
Existe un registro que permite la configuracin del WATC HDOG. WDTCR

35

Watchdog Timer Control Register

WDP2-0: Determina el periodo de viga

WDE: Watchdog Enable. Cuando este bit est a 1, el watchdog est habilitado, y si est
a cero, inhabilitado. WDE slo puede ponerse a 0 si el bit WDTOE est a 1. Para
inhabilitar el temporizador, debe seguirse el siguiente procedimiento.
1. Escribir en la misma operacin un 1 lgico en WDTOE y WDE.
2. Dentro de los siguientes cuatro ciclos de reloj, escribir un 0 en WDE. Esto inhabilita
el watchdog

WDTOE: Watchdog Turn-off Enable. Este bit debe estar a 1 cuando el WDE est a
cero. En cualquier otro caso, el watchdog no se inhabilitar. Si se pone a 1, el hardware
lo pone a cero automticamente cuando pasan cuatro ciclos de reloj ms tarde.
36

4.2.15 UART
Dispone de un conjunto de registros:

Registro UCR. Permite la configuracin de la UART

RXCIE (bit 7). Habilita la generacin de interrupciones cada vez que se recibe un dato
nuevo en la UART.
TXCIE (bit 6). Habilita la generacin de interrupciones cada vez que el registro de
desplazamiento del transmisor se queda vaco.
UDRIE (bit 5). Habilita la generacin de interrupciones cada vez que el registro de
transmisin se queda vaco.
RXEN (bit 4). Habilita el bloque receptor de la UART. Cuando esto ocurre, el pin PD0
se configura como entrada RXD con independencia del bit DDRD0.
TXEN (bit 3). Habilita el bloque transmisor de la UART. Cuando esto ocurre, el pin
PD1 se configura como salida TXD con independencia del bit DDRD1.
CHR9( bit 2). Habilita el envo o la recepcin de un noveno bit a continuacin de los 8
bit de datos (bit de paridad).
RXB8(bit 1). Si est habilitado el noveno bit, aqu es donde se puede leer.
TXB8(bit 0). Si est habilitado el noveno bit, aqu se escribe el bit que se aadir al
carcter depositado en UDR para su posterior transmisin.

Registro UBRR. Generador de baudios.

Permite configurar la velocidad, en bps, del receptor y transmisor conjuntamente.

Registro USR

37

Contiene informacin sobre el estado de la UART.


RXC (bit 7). Este bit se pone a 1 cuando se recibe un dato en el registro de recepcin
(UDR). Se pone a 0 automticamente cuando se lee el contenido de dicho registro.
TXC (bit 6). Este bit se pone a 1 cuando el ltimo bit (includo el bit de stop), ha sido
enviado por el registro de desplazamiento de transmisin y no hay ningn otro el
registro de transmisin (UDR). Este bit se pone a 0 cuando se escribe un nuevo dato en
UDR o, alternativamente, escribiendo un 1 en esta posicin.
UDRE (bit 5). Se pone a 1 cuando el registro de transmisin (UDR) se queda vaco.
Escribiendo un dato en UDR, este bit se pone a 0.
FE (bit 4). Error de trama asociado al carcter que est en el registro de recepcin
(UDR).
OR(bit 3). Error de sobrescritura asociado al carcter que est en el registro de recepcin
(UDR).

Registro UDR

Fsicamente consiste en dos registros que comparten la misma direccin fsica.


Escribiendo en este registro, el carcter se deposita en el registro de transmisin.
Leyendo este registro, se accede al carcter depositado en el registro de recepcin.

38

PROGRAMA ENSAMBLADOR WAVRASM


El ensamblador wavrasm es un programa en entorno windows que permite la
generacin de los ficheros de cdigo ejecutable de la serie AT90S.
Cuando se ejecuta el software aparece una ventana con una barra de menu con los items:
File, Edit, Search, Assamble, Options, Window, Help.
Escogemos New en el men de File. Aparecer una ventana donde podemos escribir, en
lenguaje ensamblador, el programa del microcontrolador. Adems de los mnemnicos
de las instrucciones, se utilizarn algunas directivas para poder compilar el programa.
(Una lista detallada de las directivas aparece en la ayuda, aqu slo se tratan las ms
importantes).
ORG - Set program origin
Sita las instrucciones que le siguen en el programa a partir de la direccin especificada por el argumento
de la directiva
Syntax:
.ORG expression
Example:
.DSEG

; Start data segment

.ORG 0x37
variable:.BYTE 1

; Set SRAM address to hex 37


; Reserve a byte at SRAM adr.37H

.CSEG
.ORG 0x10
mov

r0,r1

; Set Program Counter to hex 10


; Do something

EQU - Set a symbol equal to an expression


Esta directiva asigna un valor a una etiqueta. El valor de la directiva es constante y no sepuede cambiar o
redefinir.
Syntax:
.EQU label = expression
Example:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2
.CSEG
clr
out

r2
porta,r2

; Start code segment


; Clear register 2
; Write to Port A

39

DEF - Set a symbolic name on a register


Define un registro del microcontrolador como un simbolo. Este smbolo se podr utilizar en el resto del
programa para referirse al registro asociado.
Syntax:
.DEF Symbol=Register
Example:
.DEF temp=R16
.DEF ior=R0
.CSEG
ldi
in
eor

temp,0xf0
ior,0x3f
temp,ior

; Load 0xf0 into temp register


; Read SREG into ior register
; Exclusive or temp and ior
INCLUDE - Include another file

Esta directiva le dice al ensamblador que empiece leyendo el contenido de un fichero especificado.
Syntax:
.INCLUDE "filename"
Example:
;
iodefs.asm:
.EQU sreg=0x3f
.EQU sphigh=0x3e
.EQU splow=0x3d
;
incdemo.asm
.INCLUDE iodefs.asm
in

; Status register
; Stack pointer high
; Stack pointer low
; Include I/O definitions
r0,sreg ; Read status register

Terminado el programa, el men Assamble permite la compilacin del programa


escrito. Si no existe ningn problema se generan los ficheros *.obj y *.hex, que
contienen el cdigo mquina. Estos ficheros se utilizan por otros programas como el
simulador y el starter kit.

40

41

Potrebbero piacerti anche