Está en la página 1de 65

07/06/2022

CAPÍTULO 2.
MICROCONTROLADOR

2.1 Arquitectura interna.


2.2 Lenguajes de programación.
2.3 Herramientas de desarrollo.
2.4 Set de instrucciones.
07/06/2022 1

1
07/06/2022

Objetivos:

• Analizar la arquitectura básica de un


microcontrolador.
• Explicar los diferentes lenguajes de
programación en el microcontrolador.
• Identificar las herramientas de desarrollo de
software.
• Comprender el uso del set de instrucciones
del microcontrolador Atmega 164P.
07/06/2022 2

2
07/06/2022

Arquitectura interna del


microcontrolador

07/06/2022 3

3
07/06/2022

Microcontrolador
Es un circuito digital secuencial y programable, con
capacidad de procesamiento limitada. Contiene en
un solo chip o encapsulado, el procesador,
memoria de programa y datos, buses de
comunicación y recursos periféricos para conectarle
dispositivos de entrada y salida, que pueden ser
analógicas y digitales. Se presenta generalmente en
empaques robustos y de bajo costo para facilitar su
uso en el desarrollo de múltiples actividades
comerciales e industriales diversas.

07/06/2022 4

4
07/06/2022

Estructura Interna

07/06/2022 5

5
07/06/2022

Microprocesador / Microcontrolador

07/06/2022 6

6
07/06/2022

07/06/2022 7

7
07/06/2022

07/06/2022 8

8
07/06/2022

Microntrolador Atmega 164P

Microchip

Manual

Libro de instrucciones

07/06/2022 9

9
07/06/2022

Diagrama de Bloques
Microcontrolador

07/06/2022 10

10
07/06/2022

07/06/2022 11

11
07/06/2022

Diagrama de Bloques
CPU

07/06/2022 12

12
07/06/2022

Garantiza la correcta
ejecución del programa.
Puede acceder a las
memorias, realizar
cálculos, controlar
periféricos y manejar
interrupciones.

07/06/2022 13

13
07/06/2022

Registro de propósito General


El archivo de registro está optimizado para el conjunto de instrucciones RISC mejorado
de AVR. Para lograr el rendimiento y flexibilidad requeridos, los siguientes esquemas de
entrada/salida son compatibles con el archivo de registro:
• Un operando de salida de 8 bits y una entrada de resultado de 8 bits
• Dos operandos de salida de 8 bits y una entrada de resultado de 8 bits
• Dos operandos de salida de 8 bits y una entrada de resultado de 16 bits
• Un operando de salida de 16 bits y una entrada de resultado de 16 bits

07/06/2022 14

14
07/06/2022

Registros X, Y, Z
Los registros R26..R31 tienen algunas funciones
añadidas a su uso de propósito general. Estos registros
son punteros de 16 bits de dirección para el
direccionamiento indirecto del espacio de datos.

En los diferentes modos de direccionamiento estos registros de


direcciones tienen funciones de desplazamiento fijo, automático
07/06/2022 incremento y decremento automático 15

15
07/06/2022

Memorias
La arquitectura AVR tiene dos espacios de memoria principales,
la memoria de datos y la memoria de programa. Además, el
ATmega164PA cuenta con una memoria EEPROM para
almacenamiento de datos. Los tres espacios de memoria son
lineales y regulares.

07/06/2022 16

16
07/06/2022

Memoria Flash de programa


Ya que todas las instrucciones
AVR son de 16 o 32 bits, la Flash
es organizada como 32/64 X 16.
La memoria Flash tiene una vida
útil de al menos 10.000 ciclos de
escritura/borrado.
El contador de programa (PC)
tiene un tamaño de 15/16 bits.
Las tablas de constantes se
pueden almacenar dentro del
espacio de memoria del
programa (LPM)

07/06/2022 17

17
07/06/2022

SRAM

07/06/2022 18

18
07/06/2022

Tiempo de acceso a memoria de


datos

07/06/2022 19

19
07/06/2022

Memoria de Datos EEPROM


Está organizado como un espacio de datos
separado, en el que se pueden leer y escribir bytes
individuales. La EEPROM tiene una duración de al
menos 100.000 ciclos de escritura/borrado.
El acceso entre la EEPROM y la CPU se describe a
continuación, especificando los registros de
direcciones de la EEPROM, el registro de datos de la
EEPROM y el registro de control de la EEPROM.

07/06/2022 20

20
07/06/2022

Tiempo de ejecución de una


instrucción

07/06/2022 21

21
07/06/2022

Ciclo de operación ALU

07/06/2022 22

22
07/06/2022

SRAM Vs EEPROM en chips AVR

El AVR tiene una memoria EEPROM que se utiliza para


almacenar datos. EEPROM no pierde sus datos cuando
se apaga, mientras que SRAM sí. Entonces, la EEPROM
es utilizada para almacenar datos que rara vez deben
cambiarse y no deben perderse cuando la energía está
apagada (por ejemplo, opciones y configuraciones);
mientras que la SRAM se utiliza para almacenar datos y
parámetros que se modifican con frecuencia.

07/06/2022 23

23
07/06/2022

REGISTRO DE ESTADO AVR


El registro de estado es un registro de 8 bits. También se conoce como el
registro de banderas.
Los bits C, Z, N, V, S y H se denominan banderas condicionales, lo que significa
que indican algunas condiciones que resultan después de ejecutar una
instrucción. Cada una de las banderas condicionales se puede utilizar para
realizar saltos condicionales.

07/06/2022 24

24
07/06/2022

Herramientas de desarrollo, programa


ensamblador, set de
instrucciones.

07/06/2022 25

25
07/06/2022

Lenguajes de Programación

07/06/2022 26

26
07/06/2022

Compilador

07/06/2022 27

27
07/06/2022

Herramienta de desarrollo

https://www.microchip.com/en-us/tools-
resources/develop/microchip-studio
07/06/2022 28

28
07/06/2022

Formato de datos y directivas en AVR


• Tipo de datos AVR
El microcontrolador AVR maneja datos de 8 bits, y el
tamaño de cada registro también es de 8 bits. El trabajo
del programador es descomponer los datos a lo sumo de
8 bits (00 a 0xFF, o 0 a 255 en decimal) para ser
procesado por la CPU. Los tipos de datos utilizados por el
AVR pueden ser positivos o negativos.
• Formato de Representación de Datos
Hay cuatro formas de representar un byte de datos en el
ensamblador AVR: hexadecimal, binario, decimal o ASCII.

07/06/2022 29

29
07/06/2022

Ejemplos formato de datos

07/06/2022 30

30
07/06/2022

Directivas del ensamblador


Mientras que las instrucciones le dicen a la CPU qué hacer, las
directivas (también llamadas pseudo instrucciones) dan instrucciones
al ensamblador.
Por ejemplo, las instrucciones LDI y ADD son comandos para la CPU,
pero .EQU, .DEVICE y .ORG son directivas para el ensamblador.

.EQU (equate): Define una constante


.ORG (origin): Indica el inicio de una dirección (datos y programa)
.INCLUDE: Incluye algún contenido de un archivo al programa

Detalles: http://ww1.microchip.com/downloads/en/devicedoc/40001917a.pdf

07/06/2022 31

31
07/06/2022

Estructura de lenguaje ensamblador

07/06/2022 32

32
07/06/2022

Ensamblado de un programa en AVR

07/06/2022 33

33
07/06/2022

Set de Instrucciones

07/06/2022 34

34
07/06/2022

CAPÍTULO 2.
MICROCONTROLADOR

2.5 Movimiento de Datos.


Modos de direccionamiento de memoria
de datos y programa

07/06/2022 35

35
07/06/2022

Objetivos:

• Comprender las diferentes formas de


direccionamiento de datos.
• Explicar la aplicación de movimiento de datos
entre memorias.
• Aplicar el movimiento de datos en programas
de aplicación en lenguaje ensamblador.

07/06/2022 36

36
07/06/2022

Mapa de memoria de programa

.CSEG : Segmento de código

Tamaño de memoria
Atmega  16KB  8K x 16

Líneas de direccionamiento
n= log 8k/ log2

07/06/2022 Ing. Alex Oña 37

37
07/06/2022

Memoria SRAM

07/06/2022 38

38
07/06/2022

Tamaño de instrucción

07/06/2022 39

39
07/06/2022

Tamaño de instrucción

07/06/2022 40

40
07/06/2022

Tamaño de instrucción

07/06/2022 41

41
07/06/2022

Tamaño de instrucción

07/06/2022 42

42
07/06/2022

Traducción para LDI


1 ldi var1,20
2 var1  R16
3 Reemplazo: ldi R16,20

1110 0001 0000 0100

E 1 0 4

43
07/06/2022

Traducción para ADD


1 add var1,var2
2 var1  R16; var1  R17
3 Reemplazo: add R16,R17

0000 1111 0000 0001

0 F 0 1

44
07/06/2022

Set de Instrucciones
A. Movimiento de datos
Permite mover información de un registro a
otro.

45
07/06/2022

MOV Rd,Rr
El valor de Rr y se copia en Rd.

Palabras: 1
Ciclos: 1

Registro Dato Registro Dato


R2 0x22 R2 0x17
R5 0x17 R5 0x17

Ejemplo: MOV R2,R5

46
07/06/2022

 MOVW Rd,Rr
Copia un par de registros consecutivos
(palabra).
Rd+1:Rd ← Rr+1:Rr

Palabras: 1
Ciclos: 1

Registro Dato Registro Dato


R4 0xA1 R4 0x15
R5 0xF3 R5 0xB4
R26 0x15 R26 0x15
R27 0xB4 R27 0xB4

Ejemplo: MOVW R4,R26


MOVW R3,R24  No válido

47
07/06/2022

LDI Rd,K
Carga inmediata de una constante K (0-255)
a un registro Rd.

Palabras: 1
Ciclos: 1

Ejemplo: LDI R18,0x26


Registro Dato Registro Dato
R5 0xA1 R5 0xA1
R18 0xF9 R18 0x26

48
07/06/2022

LDS Rd,k
Carga a Rd un dato desde espacio de datos
por medio de la dirección k.
Palabras: 2
Ciclos: 2

Dirección Dato Dirección Dato


0x211 0x5A 0x211 0x5A
0x212 0xF9 0x212 0xF9
Ejemplo: LDS R22,0x211
Registro Dato Registro Dato
R21 0x10 R21 0x10
R22 0x65 R22 0x5A

49
07/06/2022

 LD Rd,X
Carga indirecta al registro D del valor apuntado por X.

Palabras: 1
Ciclos: 1

Registro Dato Puntero 0x02C2 Registro Dato


Ejemplo: LD R10,X R10 0x01 R10 0x5B
R26 0xC2 R26 0xC2
R27 0x02 R27 0x02

Dirección Dato Dirección Dato


0x02C2 0x5B 0x02C2 0x5B
0x02C3 0xF8 0x02C3 0xF8

50
07/06/2022

LD Rd,X+
Carga indirecta al registro D del valor apuntado por X. Después, el
puntero se incrementa en uno

Palabras: 1
Ciclos: 2

Ejemplo: LD R10,X+
Registro Dato Puntero 0x02C2 Registro Dato
R10 0x01 R10 0x5B
R26 0xC2 R26 0xC3
R27 0x02 R27 0x02

Dirección Dato Dirección Dato


0x02C2 0x5B 0x02C2 0x5B
0x02C3 0xF8 0x02C3 0xF8

51
07/06/2022

LD Rd,-X
Primero decremento el puntero en uno y luego carga
indirecta al registro D del valor apuntado por X.

Palabras: 1
Ciclos: 2

Ejemplo: LD R10,-X
Registro Dato Puntero 0x02C1 Registro Dato
R10 0x01 R10 0x12
R26 0xC2 R26 0xC1
R27 0x02 R27 0x02

Dirección Dato Dirección Dato


0x02C1 0x12 0x02C1 0x12
0x02C2 0x5A 0x02C2 0x5A

52
07/06/2022

LDD Rd, Y+q


Carga indirecta con desplazamiento, carga indirecta al registro D del
valor apuntado por Y +q. El puntero no se afecta.

Palabras: 1
Ciclos: 3

Ejemplo: LDD R22, Y+2


Registro Dato Registro Dato
Puntero 0x02C3 R22 0x5A
R22 0x01
R28 0xC1 R28 0xC1
R29 0x02 R29 0x02

Dirección Dato Dirección Dato


0x02C2 0x12 0x02C2 0x12
0x02C3 0x5A 0x02C3 0x5A

53
07/06/2022

STS k,Rr
Almacenamiento directo al espacio de datos. Guarda en la
dirección k, el dato de Rr.

Palabras: 2
Ciclos: 2

Ejemplo: STS 0x0115,R30


Registro Dato Registro Dato
R30 0x1B R30 0x1B
R31 0xA1 R31 0xA1

Dirección Dato Dirección Dato


0x0115 0x12 0x0115 0x1B
0x0116 0x5A 0x0116 0x5A

54
07/06/2022

ST X, Rr
Almacenamiento indirecto al espacio de datos. Guarda en
la dirección apuntada por X, el dato de Rr.

Palabras: 1
Ciclos: 2

Ejemplo: ST X,R17
Registro Dato Puntero 0x020E Registro Dato
R17 0xA2 R17 0xA2
R26 0x0E R26 0x0E
R27 0x02 R27 0x02

Dirección Dato Dirección Dato


0x020E 0x13 0x020E 0xA2
0x020F 0x5B 0x020F 0x5B

55
07/06/2022

 STS – ST (extensión)

56
07/06/2022

LPM
Permite mover información de la flash a un registro. Solo
usa el puntero Z.

Palabras: 1
Ciclos: 3

Dirección en 15 bits 0/1

8bits
LSB/ MSB

57
07/06/2022

Ejemplo: LPM

Registro Dato Dirección MSB LSB


R00 0xA2 0x1015 0x13 0x01
R30 0x2B 0x1016 0x5B 0x02
R31 0x20

Z  0x202B
0010 0000 0010 1011 MSB

Dirección: 0x1015

Registro Dato
R00 0x13
R30 0x2B
R31 0x20

58
07/06/2022

Ejemplo: LPM R16,Z

Registro Dato Dirección MSB LSB


R16 0xE2 0x1015 0x13 0x01
R30 0x2B 0x1016 0x5B 0x02
R31 0x20

Z  0x202B
0010 0000 0010 1011 MSB

Dirección: 0x1015

Registro Dato
R16 0x13
R30 0x2B
R31 0x20

59
07/06/2022

Ejemplo: LPM R16,Z+

Registro Dato Dirección MSB LSB


R16 0xE2 0x1015 0x13 0x01
R30 0x2B 0x1016 0x5B 0x02
R31 0x20

Z  0x202B
0010 0000 0010 1011 MSB

Dirección: 0x1015

Registro Dato
R16 0x13
R30 0x2C
R31 0x20

60
07/06/2022

Ejemplo LPM
Se desea extraer el 0xAC

Dirección  0x0F46
MSB  1

Z  0000 1111 0100 0110 1


Z  0001 1110 1000 1101

Z  0x1E8D

LDI ZH,0x1E
LDI ZL,0x8D
LPM

R8  0xAC

61
07/06/2022

Ejemplo con post incremento

Z0x202F

Tomado de apuntes Ing. Patricio Chico

62
07/06/2022

SPM
Permite mover información de un registro a
la flash (usa el puntero Z).

Palabras: 1

Registro Dato
Dirección MSB LSB
R00 0xA2
0x102B 0x13 0x01
R01 0x10
0x102C 0x5B 0x02
R30 0x2B
R31 0x10

Dirección MSB LSB


0x102B 0x10 0xA2
0x102C 0x5B 0x02

Registro Dato
R00 0xA2
R01 0x10
R30 0x2B
R31 0x20

63
07/06/2022

 In – Out
Permite la transferencia de datos entre los
registros I/O y los registros de uso general.

IN R3,0x01
R3 0x94

OUT 0x3C,R15
0x3C 0x04

64
07/06/2022

PUSH - POP
Permite tomar o poner datos en el stack
(subrutinas).

Push: pone un valor de un registro en la


cima del stack
Pop: saca el valor de la cima del stack y lo
pone en un registro.

65

También podría gustarte