Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMACIN
Microcontroladores
Marzo de 2017
2
Lenguaje ensamblador
Un programa en Ensamblador puede incluir:
Conjunto de Instrucciones
El repertorio del ATMega328 cuenta con 131 instrucciones,
las cuales estn organizadas en 5 grupos:
ADIW Rd, k Suma constante a palabra [Rd + 1:Rd] = [Rd + 1:Rd] + k Z,C,N,V,S
SBIW Rd, k Resta constante a palabra [Rd + 1:Rd] = [Rd + 1:Rd] - k Z,C,N,V,S
Las que trabajan con palabras se ejecutan en 2 ciclos de reloj, las dems nicamente en
1 ciclo.
5
Saltitos Condicionales.
Instruccin Descripcin Operacin
CPSE Rd, Rs Un saltito si los registros son iguales si(Rd == Rs) PC = PC + 2 o 3
Un saltito si el bit b del registro Rs est en
SBRS Rs, b si(Rs(b) == 1) PC = PC + 2 o 3
alto
Un saltito si el bit b del registro Rs est en
SBRC Rs, b si(Rs(b) == 0) PC = PC + 2 o 3
bajo
Un saltito si el bit b del registro P est en si(I/O(P, b) == 1)
SBIS P, b
alto, P es un registro I/O PC = PC + 2 o 3
Un saltito si el bit b del registro P est en si(I/O(P, b) == 0)
SBIC P, b
bajo, P es un registro I/O PC = PC + 2 o 3
Pueden tardar 1, 2 o 3 ciclos de reloj.
12
Instrucciones de Transferencia
de Datos
Flash
Registro de Instruccin (IR)
Archivo de Registros
K
1 Transferencias entre registros
4 Memoria
2
de Programa
SRAM 2 Transferencia de una constante
32 x 8 a registro
Registros 1
1024 x 8 3 Transferencias entre memoria de
de propsito Registros I/O datos y registros
Espacio de general
3
Propsito 4 Transferencias entre memoria de
General 64 x 8
cdigo y registros
5
Registros
para el 5 Transferencias entre registros I/O
manejo de y de propsito general
Recursos
13
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
BREAK Utilizada para depuracin desde la interfaz DebugWire
21
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:
11 bits 5 bits
OPCODE Rd
REGISTROS
R0
5
2=32
R1
...
R30
R31
Ejemplos:
COM R3
INC R5
SER R7
23
OPCODE Rr Rd
Ejemplos:
ADD R1, R2
SUB R1, R2
AND R1, R2
MOV R1, R2
24
OPCODE R P
REGISTROS I/O
REGISTROS
5 6
2=32 2=64 SREG
R0
R1 SPH
... ...
R30
R31
Ejemplos:
OUT PORTB, R13
IN R15, PINA
25
OPCODE n ...
SRAM R31
0
16
2 = 64k
1
.... ...
Ejemplos:
STS 0x0100, R5
LDS R16, 0x0110
26
11 bits 5 bits
OPCODE Rd
5
2=32
REGISTROS
SRAM
R0
R1
0
.... 1
Ejemplos:
LD R5, Y R26 ...
X
ST X, R11
R27
0x045F
R28
Y
R29
X, Y o Z quedan
especificados como R30
Z
parte del opcode R31
27
YoZ SRAM
OPCODE n q
R0
R1
...
Ejemplos:
R30 LDD R5, Y+0x020
STD Z+0x10, R11
R31
Y o Z quedan especificados
como parte del opcode
28
X, Y o Z
SRAM
+
-1
REGISTROS
R0
11 bits 5 bits
R1
OPCODE n ...
R30
Ejemplos:
LD R5, -Y R31
ST Z, R11
29
X, Y o Z
+
SRAM
REGISTROS
R0
11 bits 5 bits
R1
OPCODE n ...
R30
Ejemplos:
LD R5, Y+ R31
ST X+, R6
30
FLASH
REGISTROS
R0
11 bits 5 bits
R1
OPCODE n ...
R30
Ejemplos:
LPM (R0 y Z implcitos) R31
LPM R3, Z
SPM (R1:R0 y Z implcitos)
Nota: Tambin existe una carga indirecta de memoria de cdigo con
post-incremento del apuntador Z.
31
Direccionamiento inmediato
OPCODE R K
REGISTROS
4
2 =16
R16
R17
...
R30
Ejemplos:
R31
ANDI R17, 0xF3
SUBI R19, 0x12
ORI R31, 0x03
32
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).
Indirectas
Z PC
Ejemplos:
IJMP
ICALL
Direccionamientos en Bifurcaciones
Relativas
PC
+ +
OPCODE K
Ejemplos:
RJMP -20
En bifurcaciones incondicionales,
RCALL 32
se dispone de 12 bits para K.
BREQ 15
BRNE -10 En bifurcaciones condicionales,
BRGE 10 Solo se dispone de 7 bits.
Direccionamientos en Bifurcaciones
Absolutas
10 bits 6 bits
OPCODE K ( 21 : 16 )
PC
K ( 15 : 0 )
Ejemplos:
JMP 0x300000
CALL 0x1FFFFF
35
Ejercicio:
Ignorando como se llev un conjunto de 20 enteros sin signo a la
memoria SRAM, ubicados a partir de la direccin 0x0200 y ocupando
un byte por cada entero, realice una secuencia de instrucciones en
ensamblador que use direccionamiento indirecto e incluya
comparaciones para que, al final de la secuencia en el registro R20
quede el mayor de los 20 enteros.
Directivas comunes:
INCLUDE: Se utiliza para leer el cdigo fuente de otro archivo
.CSEG
; Constantes en memoria FLASH
const1: .DB 0x33
consts1: .DB 0, 255, 0b01010101, -128, 0xaa
consts2: .DW 0, 0xffff, 0b1001110001010101, -32768, 65535
.ESEG
; Constantes en EEPROM
eevar1: .DB 0x37
eelist1: .DB 1,2,3,4
eelist2: .DW 0,0xffff,10
40
Ejemplo:
.DSEG
.ORG 0x120
var1: .Byte 1 ; Variable en la direccin 0x120 del
; segmento de datos
.CSEG
.ORG 0x000 ; Cdigo ubicado en la direccin 0x00
RJMP inicio
.ORG 0x010
inicio: ; Cdigo ubicado en la direccin 0x10
MOV R1, R2
....
42
.DSEG
var1: .BYTE 1 ; variable de 1 byte
var2: .BYTE 10 ; variable de 10 bytes
.CSEG
STS var1, R17 ; acceso a var1 por dir. Directo
PROGRAMACIN EN
ALTO NIVEL
Lenguaje C
45
Tipos de Datos
Definiciones en WINAVR
Operadores
ejemplo
Operador ternario
Expresin1 ? Expresin2 : Expresin3; Asignacin despus de
una manipulacin de bits.
48
Manipulacin de bits
Complemento Uno ~
Desplazamiento a la <<
Izquierda
Desplazamiento a la Derecha >>
AND &
OR |
OR Exclusiva ^
Trabajan sobre operandos que no
son punto flotante (char, int, long) y
afectan el resultado al nivel de bits.
Operadores Lgicos
AND && Tratan a los
operandos como
OR ||
expresiones FALSAS
NOT ! o VERDADERAS.
49 15
Estructuras de control
Secuencial Seleccin simple Seleccin Doble
if(expresin) if(expresin)
Proposicin proposicin1
// Expresiones en secuencia else
a = conta + 5; proposicin2
...
contador++;
50 15
Estructuras de control
Seleccin Mltiple Repeticin Mientras
switch (expresin){
case exp-const:
proposiciones
case exp-const:
proposiciones
default:
proposiciones
} while(expresin)
proposicin
51 15
Estructuras de control
Repeticin Hacer/Mientras Repeticin Para/Hasta
do
proposicin for (expr1; expr2; expr3)
while(expresin); proposicin
52
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;
pcad = cadena;
53
Datos en FLASH
Constantes: Datos que no cambiarn durante la ejecucin normal
de un programa.
Ejemplos de declaraciones:
const char cadena[] PROGMEM = Cadena con un mensaje constante;
const unsigned char tabla[] PROGMEM = { 0x24, 0x36, 0x48, 0x5A, 0x6C };
54
Ejemplos:
x = pgm_read_byte(&tabla[i]);
Datos en EEPROM
En la EEPROM:
34 12 01 02 03 04 FF FF FF . . .
57
PROGRAMAS DE
EJEMPLO
En Ensamblador y en Lenguaje C
59
Parpadeo de un LED
Realice un programa que haga
parpadear un LED conectado en la
terminal PB0 a una frecuencia
aproximada de 1 Hz (periodo de 1
seg.), considerando un ciclo til del
50 % ( seg. encendido y seg.
apagado).
60
INICIO
= 0x00 = 0x0F
Dato?
= 0x01 = 0x0E
= 0x02
Portb ! 0x3F Portb ! 0x06 Portb ! 0x 5B ... Portb ! 0x79 Portb ! 0x71
62
PortC[2:0] Operacin
000 R=A+B
001 R=A-B
010 R=A*B
011 R = A AND B
100 R = A OR B
101 a 111 R=0
63
= 000 otros
Op?
= 001 = 100
= 010 = 011
R !A + B R !A - B R !A * B R !A & B R !A | B R!0
PortD ! R
64
Motor = "00";
Cerrado
topeC = '1'
sp = '1'
topeA = '1'
sp = '0'
Abierto
Motor = "00";
sp = '1'