Académique Documents
Professionnel Documents
Culture Documents
PROGRAMACIN
Microcontroladores
M. C. Felipe Santiago Espinosa
Marzo de 2016
Conjunto de Instrucciones
El repertorio de instrucciones cuenta con 128
Instruccin
Descripcin
ADD
Rd, Rs Suma sin acarreo
Operacin
Rd = Rd + Rs
Banderas
Z,C,N,V,H,S
ADC
Rd = Rd + Rs + C
Z,C,N,V,H,S
ADIW
Rd, k
Z,C,N,V,S
SUB
Rd = Rd - Rs
Z,C,N,V,H,S
SUBI
Rd, k
Rd = Rd k
Z,C,N,V,H,S
SBC
Rd = Rd Rs C
Z,C,N,V,H,S
SBCI
Rd, k
Z,C,N,V,H,S
SBIW
Rd, k
Z,C,N,V,S
Resta constante
Las que trabajan con palabras se ejecutan en 2 ciclos de reloj, las dems nicamente en
1 ciclo.
MULSU Rd, Rs
FMUL
Rd, Rs
FMULS
Rd, Rs
FMULSU Rd, Rs
Descripcin
Multiplicacin sin signo
Multiplicacin con signo
Multiplicacin de un nmero con
signo y otro sin signo
Multiplicacin fraccional sin
signo
Multiplicacin fraccional con
signo
Multiplicacin fraccional de un
nmero con signo y otro sin
signo
Operacin
R1:R0 = Rd * Rs
R1:R0 = Rd * Rs
Banderas
Z,C
Z,C
R1:R0 = Rd * Rs
Z,C
R1:R0 = ( Rd * Rs ) << 1
Z,C
R1:R0 = ( Rd * Rs ) << 1
Z,C
R1:R0 = ( Rd * Rs ) << 1
Z,C
Descripcin
Operacin lgica AND
Operacin lgica AND con una constante
Operacin lgica OR
Operacin lgica OR con una constante
Operacin lgica OR Exclusiva
Operacin
Rd = Rd AND Rs
Rd = Rd AND k
Rd = Rd OR Rs
Rd = Rd OR k
Rd = Rd XOR Rs
Instruccin
SBR
Rd, k
CBR
Rd, k
Descripcin
Pone en alto los bits indicados en la constante
Pone en bajo los bits indicados en la constante
Operacin
Rd = Rd OR k
Rd = Rd AND (0xFF k)
Descripcin
Operacin
Banderas
COM
Rd
Complemento a 1
Rd = 0xFF Rd
Z,C,N,V,S
NEG
Rd
Negado o complemento a 2
Rd = 0x00 Rd
Z,C,N,V,H,S
INC
Rd
Incrementa un registro
Rd = Rd + 1
Z,N,V,S
DEC
Rd
Decrementa un registro
Rd = Rd 1
Z,N,V,S
TST
Rd
Evala un registro
Rd = Rd AND Rd
Z,C,N,V,S
CLR
Rd
Rd = 0x00
Z,C,N,V,S
SER
Rd
Rd = 0xFF
Ninguna
Instruccin
RJMP
k
IJMP
*JMP
k
Descripcin
Salto relativo
Salto indirecto
Salto absoluto
Operacin
PC = PC + k + 1
PC = Z
PC = k
Instruccin
RCALL
k
ICALL
*CALL
k
RET
RETI
Descripcin
Llamada relativa a una rutina
Llamada indirecta a una rutina
Llamada absoluta a una rutina
Retorno de una rutina
Retorno de rutina de interrupcin
Operacin
PC = PC + k + 1, PILA PC + 1
PC = Z, PILA PC + 1
PC = k, PILA PC + 1
PC PILA
PC PILA, I = 1
Instruccin
CP
Rd, Rs
CPC
Rd, Rs
CPI
Rd, k
Descripcin
Compara dos registros
Compara registros con acarreo
Compara un registro con una constante
Operacin
Rd Rs
Rd Rs C
Rd k
Brincos Condicionales.
Instruccin
BRBS
s, k
BRBC
s, k
BRIE
k
BRID
k
BRTS
k
BRTC
k
BRHS
k
BRHC
k
BRGE
k
BRLT
k
BRVS
k
BRVC
k
BRMI
k
BRPL
k
BREQ
k
BRNE
k
BRSH
k
BRLO
k
BRCS
k
BRCC
k
Descripcin
Brinca si el bit s del registro estado est en alto
Brinca si el bit s del registro estado est en bajo
Brinca si las interrupciones estn habilitadas
Brinca si las interrupciones estn deshabilitadas
Brinca si el bit T est en alto
Brinca si el bit T est en bajo
Brinca si la bandera H est en alto
Brinca si la bandera H est en bajo
Brinca si es mayor o igual que (con signo)
Brinca si es menor que (con signo)
Brinca si la bandera V est en alto
Brinca si la bandera V est en bajo
Brinca si es negativo
Brinca si no es negativo
Brinca si los datos son iguales
Brinca si los datos no son iguales
Brinca si es mayor o igual
Brinca si es menor
Brinca si la bandera C est en alto
Brinca si la bandera C est en bajo
Operacin
si(SREG(s) == 1) PC = PC + k + 1
si (SREG(s) == 0) PC = PC + k + 1
si (I == 1) PC = PC + k + 1
si (I == 0) PC = PC + k + 1
si (T == 1) PC = PC + k + 1
si (T == 0) PC = PC + k + 1
si (H == 1) PC = PC + k + 1
si (H == 0) PC = PC + k + 1
si (S == 0) PC = PC + k + 1
si (S == 1) PC = PC + k + 1
si (V == 1) PC = PC + k + 1
si (V == 0) PC = PC + k + 1
si (N == 1) PC = PC + k + 1
si (N == 0) PC = PC + k + 1
si (Z == 1) PC = PC + k + 1
si (Z == 0) PC = PC + k + 1
si (C == 0) PC = PC + k + 1
si (C == 1) PC = PC + k + 1
si (C == 1) PC = PC + k + 1
si (C == 0) PC = PC + k + 1
10
Saltitos Condicionales.
Instruccin
Descripcin
CPSE
Rd, Rs Un saltito si los registros son iguales
Un saltito si el bit b del registro Rs est en
SBRS
Rs, b
alto
Un saltito si el bit b del registro Rs est en
SBRC
Rs, b
bajo
Un saltito si el bit b del registro P est en
SBIS
P, b
alto, P es un registro I/O
Un saltito si el bit b del registro P est en
SBIC
P, b
bajo, P es un registro I/O
Pueden tardar 1, 2 o 3 ciclos de reloj.
Operacin
si(Rd == Rs) PC = PC + 2 o 3
si(Rs(b) == 1) PC = PC + 2 o 3
si(Rs(b) == 0) PC = PC + 2 o 3
si(I/O(P, b) == 1)
PC = PC + 2 o 3
si(I/O(P, b) == 0)
PC = PC + 2 o 3
11
Instrucciones de Transferencia
de Datos
Flash
Registro de Instruccin (IR)
Archivo de Registros
SRAM
Memoria
de Programa
32 x 8
Registros
de propsito
general
1024 x 8
Espacio de
Propsito
General
Registros I/O
64 x 8
5
Registros
para el
manejo de
Recursos
12
Instruccin
MOV
Rd, Rs
Descripcin
Copia un registro
MOVW
Rd, Rs
Operacin
Rd = Rs
Rd + 1: Rd = Rs + 1: Rs, Rd y Rs
registros pares
Instruccin
LDI
Rd, k
Descripcin
Copia la constante en el registro
Operacin
Rd = k
13
Instruccin
LDS
Rd, k
LD
Rd, X
LD
Rd, X+
LD
Rd, -X
LD
Rd, Y
LD
Rd, Y+
LD
Rd, -Y
LDD
Rd, Y + q
LD
Rd, Z
LD
Rd, Z+
LD
Rd, -Z
LDD
Rd, Z + q
Descripcin
Carga directa de memoria
Carga indirecta de memoria
Carga indirecta con post-incremento
Carga indirecta con pre-decremento
Carga indirecta de memoria
Carga indirecta con post-incremento
Carga indirecta con pre-decremento
Carga indirecta con desplazamiento
Carga indirecta de memoria
Carga indirecta con post-incremento
Carga indirecta con pre-decremento
Carga indirecta con desplazamiento
Operacin
Rd = Mem[k]
Rd = Mem[X]
Rd = Mem[X], X = X + 1
X = X - 1, Rd = Mem[X]
Rd = Mem[Y]
Rd = Mem[Y], Y = Y + 1
Y = Y - 1, Rd = Mem[Y]
Rd = Mem[Y + q]
Rd = Mem[Z]
Rd = Mem[Z], Z = Z + 1
Z = Z - 1, Rd = Mem[Z]
Rd = Mem[Z + q]
14
(Almacenamientos)
Instruccin
STS
k, Rs
ST
X, Rs
ST
X+, Rs
ST
-X, Rs
ST
Y, Rs
ST
Y+, Rs
ST
-Y, Rs
STD
Y + q, Rs
ST
Z, Rs
ST
Z+, Rs
ST
-Z, Rs
STD
Z + q, Rs
Descripcin
Almacenamiento directo en memoria
Almacenamiento indirecto en memoria
Almacenamiento indirecto con post-incremento
Almacenamiento indirecto con pre-decremento
Almacenamiento indirecto en memoria
Almacenamiento indirecto con post-incremento
Almacenamiento indirecto con pre-decremento
Almacenamiento indirecto con desplazamiento
Almacenamiento indirecto en memoria
Almacenamiento indirecto con post-incremento
Almacenamiento indirecto con pre-decremento
Almacenamiento indirecto con desplazamiento
Operacin
Mem[k] = Rs
Mem[X] = Rs
Mem[X] = Rs, X = X + 1
X = X - 1, Mem[X] = Rs
Mem[Y] = Rs
Mem[Y] = Rs, Y = Y + 1
Y = Y - 1, Mem[Y] = Rs
Mem[Y + q] = Rs
Mem[Z] = Rs
Mem[Z] = Rs, Z = Z + 1
Z = Z - 1, Mem[Z] = Rs
Mem[Z + q] = Rs
15
Instruccin
Descripcin
PUSH
Rs
Inserta a Rs en la pila
POP
Rd
Extrae de la pila y coloca en Rd
Operacin
Mem[SP] = Rs, SP = SP 1
SP = SP + 1, Rd = Mem[SP]
Instruccin
Descripcin
LPM
Carga indirecta de memoria de programa en R0
LPM
Rd, Z Carga indirecta de memoria de programa en Rd
LPM
Rd, Z+ Carga indirecta con post-incremento
Almacenamiento indirecto en memoria de
SPM
programa
Operacin
R0 = Flash[Z]
Rd = Flash[Z]
Rd = Flash[Z], Z = Z + 1
Flash[Z] = R1:R0
Instruccin
IN
Rd, P
OUT
P, Rs
Descripcin
Lee de un registro I/O, deja el resultado en Rd
Escribe en un registro I/O, el valor de Rs
Operacin
Rd = P
P = Rs
16
Instruccin
LSL
Rd
LSR
Rd
ROL
Rd
ROR
Rd
ASR
Rd
Descripcin
Desplazamiento lgico a la izquierda
Desplazamiento lgico a la derecha
Rotacin a la izquierda
Rotacin a la derecha
Desplazamiento aritmtico a la derecha
Operacin
C = Rd(7), Rd(n+1) = Rd(n), Rd(0) = 0
C = Rd(0), Rd(n) = Rd(n + 1), Rd(7) = 0
C = Rd(7), Rd(n + 1) = Rd(n), Rd(0) = C
C = Rd(0), Rd(n) = Rd(n + 1), Rd(7) = C
Rd(n) = Rd(n + 1), n = 0 .. 6
17
Instruccin
SWAP
Rd
Descripcin
Intercambia nibbles en Rd
Operacin
Rd(7..4) = Rd(3..0), Rd(7..4) = Rd(3..0)
Instruccin
SBI
P, b
CBI
P, b
Descripcin
Pone en alto al bit b del Registro P
Pone en bajo al bit b del Registro P
Operacin
P(b) = 1
P(b) = 0
Instruccin
BTS
Rs, b
BTL
Rd, b
Descripcin
Almacena al bit b de un registro en T
Carga en el bit b de un registro desde T
Operacin
T = Rs(b)
Rd(b) = T
18
Descripcin
Operacin
BSET
SREG(s) = 1
BCLR
SEI
CLI
SET
CLT
SEH
CLH
SES
CLS
SEV
CLV
SEN
CLN
SEZ
CLZ
SEC
CLC
SREG(s) = 0
I=1
I=0
T=1
T=0
H=1
H=0
S=1
S=0
V=1
V=0
N=1
N=0
Z=1
Z=0
C=1
C=0
19
Instrucciones Especiales
Instruccin
Descripcin
NOP
No operacin, empleada para forzar una espera de 1 ciclo de reloj
SLEEP
Introduce al MCU al modo de bajo consumo previamente seleccionado
Reinicia al Watchdog Timer, para evitar reinicios por su
WDR
desbordamiento
Utilizada para depuracin, desde la interfaz JTAG en un ATMega16 o
BREAK
DebugWire en un ATMega328
20
Modos de direccionamiento
Los Modos de Direccionamiento indican la ubicacin de los
datos sobre los que operan las instrucciones. Los
Microcontroladores AVR manejan los siguientes modos de
direccionamiento:
1.
2.
3.
4.
5.
6.
7.
21
5 bits
OPCODE
Rd
REGISTROS
R0
5
2=32
R1
...
R30
R31
Ejemplos:
COM
INC
SER
R3
R5
R7
22
Dos registros:
6 bits
5 bits
5 bits
OPCODE
Rr
Rd
Ejemplos:
ADD
SUB
AND
MOV
R1,
R1,
R1,
R1,
R2
R2
R2
R2
23
5 bits
6 bits
OPCODE
REGISTROS I/O
REGISTROS
5
R0
2=32
2=64
SREG
R1
SPH
...
...
R30
R31
Ejemplos:
OUT
IN
PORTB, R13
R15, PINA
24
11 bits
R1
...
OPCODE
R30
DIRECCIN DE DATOS
R31
SRAM
0
16
2 = 64k
....
...
0x45F (limitado por el dispositivo)
Ejemplos:
STS 0x0100, R5
LDS R16, 0x0110
25
5 bits
OPCODE
Rd
2=32
REGISTROS
SRAM
R0
R1
Ejemplos:
LD R5, Y
ST X, R11
....
R26
...
R27
R28
X, Y o Z quedan
especificados como
parte del opcode
R29
R30
R31
0x045F
26
SRAM
5 bits
5 bits
6 bits
OPCODE
R0
R1
...
Ejemplos:
R30
R31
LDD
STD
R5, Y+0x020
Z+0x10, R11
Y o Z quedan especificados
como parte del opcode
27
SRAM
-1
REGISTROS
R0
5 bits
11 bits
OPCODE
R1
...
R30
Ejemplos:
LD R5, -Y
ST Z, R11
R31
28
Con post-incremento
X, Y o Z
SRAM
REGISTROS
R0
5 bits
11 bits
OPCODE
R1
...
R30
Ejemplos:
LD R5, Y+
ST X+, R6
R31
29
Z
FLASH
REGISTROS
R0
11 bits
OPCODE
5 bits
n
R1
...
R30
Ejemplos:
LPM
LPM
SPM
(R0 y Z implcitos)
R3, Z
(R1:R0 y Z implcitos)
R31
30
Direccionamiento inmediato
4 bits
4 bits
OPCODE
8 bits
REGISTROS
4
R16
2 =16
R17
...
R30
R31
Ejemplos:
ANDI
SUBI
ORI
R17, 0xF3
R19, 0x12
R31, 0x03
31
Direccionamientos en Bifurcaciones
Las bifurcaciones o saltos (pueden ser condicionales o incondicionales)
permiten cambiar el flujo secuencial, durante la ejecucin de un
programa. Esto se consigue modificando el valor del registro contador
del programa (Program Counter).
Cuando no hay una bifurcacin, el PC automticamente debe
incrementarse en 1.
Indirectas
Z
PC
Ejemplos:
IJMP
ICALL
Nota: El apuntador Z queda implcito en la instruccin.
32
Direccionamientos en Bifurcaciones
Relativas
PC
+
1
OPCODE
Ejemplos:
RJMP
RCALL
-20
32
BREQ
BRNE
BRGE
15
-10
10
En bifurcaciones incondicionales,
se dispone de 12 bits para K.
En bifurcaciones condicionales,
Solo se dispone de 7 bits.
33
Direccionamientos en Bifurcaciones
Absolutas
6 bits
10 bits
K ( 21 : 16 )
OPCODE
PC
K ( 15 : 0 )
Ejemplos:
JMP
CALL
Nota:
0x300000
0x1FFFFF
34
Lenguaje ensamblador
Un programa en Ensamblador puede incluir:
Instrucciones: Elementos del lenguaje que se traducen a
35
Directivas comunes:
INCLUDE: Se utiliza para leer el cdigo fuente de otro archivo
36
37
var1:
const:
.DSEG
.BYTE 1
.CSEG
ldi
R16, 0x25
mov
r0,r16
...
.DB 0x02
.ESEG
eevar1:.DB
0x3f
38
39
de las instrucciones.
Ejemplo:
; Limpia el registro 2
; Escribe a portA
40
var1:
.DSEG
.ORG 0x120
.Byte 1
.CSEG
.ORG 0x000
RJMP inicio
.ORG 0x010
inicio:
MOV R1, R2
....
41
42
var1:
var2:
.DSEG
.BYTE 1
.BYTE 10
; variable de 1 byte
; variable de 10 bytes
.CSEG
STS
var1, R17
LDI
LDI
LD
; Z apunta a Var2
; acceso indirecto a var2
43
Tamao (bits)
Rango
char
-128 a 127
unsigned char
0 a 255
signed char
-128 a 127
int
16
short int
16
unsigned int
16
0 a 65, 535
signed int
16
long int
32
32
32
float
32
double
32
44
Definiciones en WINAVR
typedef
typedef
typedef
typedef
typedef
typedef
signed char
unsigned char
signed int
unsigned int
signed long int
unsigned long int
int8_t
uint8_t
int16_t
uint16_t
int32_t
uint32_t
45
Operadores Lgicos
Complemento Uno
AND
&&
Desplazamiento a la
Izquierda
<<
OR
||
Desplazamiento a la Derecha
>>
AND
&
OR
OR Exclusiva
46
Tipos de Memoria
Datos en SRAM
Variables: Datos que van a ser ledos o escritos
repetitivamente. SRAM este es el espacio de almacenamiento
por default.
unsigned char x, y;
unsigned int a, b, c;
47
Datos en FLASH
Constantes: Datos que no cambiarn durante la ejecucin normal
de un programa.
Si las constantes se manejan en memoria FLASH, se liberarn
espacios significativos de SRAM. til para cadenas de texto o
tablas de bsqueda.
Se requiere el uso de la palabra reservada const e incluir al
atributo PROGMEM, definido en la biblioteca pgmspace.h (en
WinAVR).
Ejemplos de declaraciones:
const char cadena[] PROGMEM = Cadena con un mensaje constante;
const unsigned char tabla[] PROGMEM = { 0x24, 0x36, 0x48, 0x5A, 0x6C };
48
// Lee 8 bits
// Lee 16 bits
// Lee 32 bits
49
50
Datos en EEPROM
Variables en las que se requiera conservar su contenido an en
ausencia de energa. Debern almacenarse en la EEPROM.
Deber utilizarse el atributo EEMEM, definido en la biblioteca
eeprom.h, tambin en WinAVR.
Son declaraciones globales y se deben hacer antes de cualquier
declaracin enfocada hacia la SRAM.
#include <avr/eeprom.h>
En la EEPROM:
34 12 01 02 03 04 FF FF FF . . .
51
52
PROGRAMAS DE
EJEMPLO
En Ensamblador y en Lenguaje C
53
Parpadeo de un LED
Realice un programa que haga parpadear un LED
54
Parpadeo de un LED
55
a
2
3
4
5
PD0
PD1
PD2
PD3
PB0
PB1
PB2
PB3
PB4
PB5
PB6
14
15
16
17
18
19
9
a
b f
c
d
e
f e
g
c
d
Num
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
g
0
0
1
1
1
1
1
0
1
1
1
1
0
1
1
1
f
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
e
1
0
1
0
0
0
1
0
1
0
1
1
1
1
1
1
d
1
0
1
1
0
1
1
0
1
0
0
1
1
1
1
0
c
1
1
0
1
1
1
1
1
1
1
1
1
0
1
0
0
b
1
1
1
1
1
0
0
1
1
1
1
0
0
1
0
0
a HEX
1 0x3F
0 0x06
1 0x5B
1 0x4F
0 0x66
1 0x6D
1 0x7D
1 0x07
1 0x7F
1 0x67
1 0x77
0 0x7C
1 0x39
0 0x5E
1 0x79
1 0x71
56
= 0x00
= 0x0F
Dato?
= 0x01
= 0x0E
= 0x02
Portb ! 0x3F
Portb ! 0x06
Portb ! 0x 5B
...
Portb ! 0x79
Portb ! 0x71
57
18
PB4
19
PB5
9
PB6
10
PB7
PD3
PD1
PD2
PD4
PD5
23 PC0
24 PC1
25
PC2
PD6
PD7
2
3
4
5
6
11
12
13
Resultado
Operando A
PD0
Operacin
14
PB0
15
PB1
16
PB2
17
PB3
Operando B
ATMEGA8
PortC[2:0]
000
001
010
011
100
101 a 111
Operacin
R=A+B
R=A-B
R=A*B
R = A AND B
R = A OR B
R=0
58
= 000
otros
Op?
= 001
= 100
= 010
R !A + B
R !A - B
= 011
R !A * B
R !A & B
PortD ! R
R !A | B
R!0