Wuolah-Free-Asignatura Completa + Examenes
Wuolah-Free-Asignatura Completa + Examenes
Wuolah-Free-Asignatura Completa + Examenes
Microcontroladores
Tema 1:
Introducción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.0
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.1
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.2
1. Introducción
1. Introducción
Sistemas Electrónicos
Analógicos Digitales
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.3
1. Introducción
Cableados Programables
Diseño general con un
Diseño específico para
módulo de control (CPU)
cada aplicación con
que permite controlar el
circuitos conectados
hardware mediante
físicamente entre sí
programación software
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.4
1. Introducción
Basados en Basados en
microcontrolador microprocesador
(μC) (μP)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.5
1. Introducción
Basados en Basados en
microcontrolador microprocesador
(μC) (μP)
μC
μP
Memoria Memoria
CPU CPU
Periféricos Periféricos
E/S E/S
Buses Buses
Mundo Mundo
Exterior Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.6
1. Introducción
Basados en Basados en
microcontrolador microprocesador
(μC) (μP)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.7
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.8
2. Diagrama de bloques
2. Diagrama de bloques
Almacenamiento
Controla transferencias Memoria programa y datos
de datos en el sistema
CPU
Realiza operaciones
sobre los datos Periféricos Comunicación con el
E/S mundo exterior
Buses
• Direcciones: indica
el elemento del
sistema sobre el que
se va a operar Mundo
Exterior
• Datos: transporta la
información con la
que se va a operar
Interconexión de los
• Control: señales elementos del sistema
auxiliares de gestión
del sistema (relojes,
reset…)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.9
2. Diagrama de bloques
MSP430G2533
Memoria
Módulo auxiliar
de gestión
Periféricos
E/S
CPU
Buses
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.10
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.11
3. CPU
3. CPU
Buses
Mundo
Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.12
3. CPU
Características:
─ Longitud de palabra(1): número máximo de bits a procesar en una instrucción
(relacionado con el tamaño del bus de datos: 8, 16, 32…)
─ Capacidad de direccionamiento: número máximo de elementos que se
pueden seleccionar mediante una determinada dirección (relacionado con el
tamaño del bus de direcciones: n bits 2n posiciones)
─ Organización de la memoria: forma de almacenar en la memoria los datos
(little endian, big endian)
─ Velocidad de proceso: tiempo empleado en ejecutar las instrucciones que
procesan la infomación (relacionado con la frecuencia de la señal de reloj que
controla la CPU: KHz – MHz – GHz)
─ Conjunto de instrucciones: grupo de operaciones que puede llevar a cabo la
CPU (aritméticas, lógicas, condicionales…)
─ Modos de direccionamiento: forma de acceder a los datos con los que operar
(registro, indexado, inmediato…)
─ Registros: número, tamaño y funcionalidad de los registros propios de la CPU
para almacenar los datos con los que operar
(1) Se puede definir una palabra como la unidad básica de información con la que puede operar la CPU
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.13
3. CPU
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.14
3. CPU
MSP430G2533
MSP430G2533 Datasheet
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.15
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.16
4. Memoria
4. Memoria
Almacenamiento
Memoria programa y datos
CPU
Periféricos
E/S
Buses
Mundo
Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.17
4. Memoria
Características:
─ Capacidad de almacenamiento: cantidad de información que se puede
almacenar (KB – MB – GB)
─ Mutabilidad: capacidad de modificar la información almacenada:
• Sólo lectura: la información no se puede modificar
• Lectura y escritura: la información se puede modificar
─ Volatilidad: capacidad de mantener la información una vez interrumpida la
alimentación:
• Volátil: la información se pierde una vez interrumpida la alimentación
• No volátil: la información no se pierde una vez interrumpida la alimentación
─ Modo de acceso: técnica para acceder a la información almacenada:
• Aleatorio: accede a cualquier información almacenada (RAM)
• Asociativo: accede a la información almacenada buscándola a partir de una
parte de la misma (caché)
─ Tiempo de acceso: retardo en proporcionar la información solicitada
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.18
4. Memoria
Tipos:
Máscara (R)
Mayor velocidad
PROM
Programa ROM EPROM
(NV) (Rw)
EEPROM
Firmware
Flash
SRAM FMP
Mayor velocidad
Datos RAM EDO
(V)
DRAM BEDO
(RW)
SDRAM
DDR
V : Volátil
NV : No volátil
R : Sólo lectura
Rw : Lectura y escritura (escritura más lenta)
RW : Lectura y escritura
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.19
4. Memoria
Arquitectura:
─ Harvard: separa la memoria en dos bloques de memoria independientes, uno
para almacenar el programa y otro para almacenar los datos. Existen buses
diferenciados para acceder a cada bloque de memoria, los cuales pueden tener
distinto tamaño:
Memoria
Instrucciones
Programa
Direcciones
CPU Direcciones
Datos
Datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.20
4. Memoria
Arquitectura:
─ Von Neumann: utiliza la memoria para almacenar tanto el programa como los
datos. Los buses para acceder a la memoria son compartidos:
Memoria
Direcciones Programa
CPU
Instrucciones – Datos Datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.21
4. Memoria
MSP430G2533
MSP430G2533 Datasheet
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.22
Índice
1. Introducción
2. Diagrama de bloques
3. CPU
4. Memoria
5. Periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.23
5. Periféricos
5. Periféricos
Memoria
CPU
Periféricos Comunicación con el
E/S mundo exterior
Buses
Mundo
Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.24
5. Periféricos
Características:
─ Funcionalidad: aumentan las capacidades del sistema al incorporar nuevas
funcionalidades (sobre todo de interfaz con el mundo exterior)
─ Utilización: disponen de distintos registros de control, de forma que escribiendo
los valores adecuados en los mismos se pueden configurar para que realicen las
funciones deseadas:
Activación
Periférico
Periférico
Registro 1 1 0 1 1 1 0 0 0
Registro 2
Registro N 0 0 0 1 1 0 1 0
Generación
Interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.25
5. Periféricos
Tipos:
─ Puertos E/S: adquirieren señales digitales del exterior (pulsadores, teclados…)
y proporcionan señales digitales al exterior (LEDs, displays…)
─ Temporizadores: miden intervalos de tiempo, generan eventos periódicamente,
cuentan sucesos, proporcionan pulsos modulados en anchura (PWMs)…
─ Comunicaciones: implementan distintos protocolos de comunicación para
realizar la interconexión con dispositivos externos (serie, SPI, I2C…)
─ Convertidores: adquieren señales analógicas externas (ADC) o proporcionan
señales analógicas (DAC), útiles para muestrear sensores o controlar actuadores
─ Watchdog: controlan el correcto funcionamiento del sistema generando un reset
si el programa se bloquea
─ Comparadores: controlan el nivel de tensión de señales analógicas
comparándolas con una tensión umbral
─ DMAs: mueven cantidades masivas de datos sin intervención de la CPU
─ Multiplicadores: realizan operaciones de multiplicación
─ Amplificadores operacionales: realizan acondicionamiento de señales
─ Supervisores de alimentación: controlan cortes en la alimentación (brownout)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.26
5. Periféricos
MSP430G2533
Convertidor
Puertos E/S
MSP430G2533 Datasheet
Comunicaciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T1.27
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Tema 2:
MSP430
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.0
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.1
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.2
1. Introducción
1. Introducción
Microcontroladores comerciales: amplio abanico de posibilidades:
─ Elevado número de fabricantes
─ Cada fabricante proporciona distintas familias (sistemas que comparten la
misma filosofía de diseño: bajo consumo, alto rendimiento, bajo coste…)
─ Cada familia ofrece distintas subfamilias (dispositivos que comparten la misma
arquitectura de diseño: tensiones de alimentación, frecuencias de operación,
tipos de memoria…)
─ Cada subfamilia contiene distintos dispositivos (cada uno con unas
características propias: tamaño de la memoria, periféricos disponibles, tipos de
encapsulados…)
Elección: es fundamental elegir adecuadamente el microcontrolador a utilizar:
─ Consumo (sistemas portables)
─ Tamaño de la memoria (cantidad de código y/o datos)
─ Periféricos disponibles (funcionalidades de E/S necesarias)
─ Capacidad de proceso (instrucciones por segundo)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.3
1. Introducción
Fabricantes de μC:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.4
1. Introducción
Texas Instruments:
Fabricante Familia Dispositivo
Subfamilia
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.5
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.6
2. Familia MSP430
2. Familia MSP430
MSP430 Texas Instruments (http://www.ti.com)
Características:
─ Diseño optimizado para ultra bajo consumo: bajas tensiones de alimentación
(0.9 V – 3.6 V), distintos modos de bajo consumo y periféricos inteligentes
capaces de operar autónomamente idóneo para sistemas portables
─ CPU con arquitectura Von Neumann y RISC de 16 bits: pocas instrucciones
pequeñas y rápidas de ejecutar buena capacidad de proceso
─ Gran cantidad de periféricos de altas prestaciones: temporizadores,
comunicaciones, convertidores, controladores de LCDs… amplio abanico de
aplicaciones
─ Facilidad de uso: sistema de depuración integrado(1) y potentes entornos de
desarrollo IDE gratuitos reducido tiempo de diseño
─ Bajo coste: kits de desarrollo completos y numerosos microcontroladores a muy
bajo coste sistemas económicos
(1) Sistema de depuración basado en el interfaz de comunicación JTAG, que permite el acceso a la CPU en tiempo real para
realizar la depuración de cualquier aplicación (detención del programa, ejecución paso a paso, puntos de ruptura,
exploración de la memoria, visualización de los registros de la CPU y de los periféricos…)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.7
2. Familia MSP430
Aplicaciones:
─ Instrumentación portátil
─ Instrumentación médica
─ Instrumentación de medida
─ Redes de sensores inalámbricos
─ Monitorización de señales
─ Recolección de datos
─ Dispositivos táctiles
─ Electrónica de consumo
…
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.8
2. Familia MSP430 – 2.1. Comparativa de microcontroladores
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.9
2. Familia MSP430 – 2.2. Subfamilia G2xx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.10
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.11
3. Arquitectura
3. Arquitectura
MSP430G2533:
─ Von Neumann: utiliza la memoria para almacenar tanto el programa como los
datos
─ RISC de 16 bits: buses de datos y de direcciones de 16 bits:
• Bus de datos de 16 bits longitud de palabra de 16 bits
• Bus de direcciones de 16 bits capacidad de direccionamiento de 216
posiciones (216 = 65.536 = 64 KB)
Memoria
16 bits = 64 KB
Direcciones Programa
CPU
Instrucciones – Datos Datos
16 bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.12
3. Arquitectura – 3.1. Diagrama de bloques
Módulo auxiliar
de gestión
Periféricos
E/S
CPU
Buses
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.13
3. Arquitectura – 3.2. Periféricos
3.2. Periféricos
MSP430G2533:
Convertidor
Analógico/Digital
Puertos E/S
Comunicaciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.14
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.15
4. Mapa de memoria
4. Mapa de memoria
─ Definición: esquema que representa la distribución de las direcciones que
permiten seleccionar los distintos elementos del sistema:
• Registros especiales de la CPU
• Registros de configuración de los periféricos E/S (“Periféricos Mapeados en
Memoria” se accede a ellos como a posiciones de memoria)
• Memoria del sistema
─ Exclusividad: cada dirección se corresponde con un único elemento del
sistema, y cada elemento del sistema posee una única dirección
─ Niveles de descripción: el mapa de memoria se puede representar en dos
niveles distintos:
• Funcional: uso o funcionalidad que le asigna el sistema a cada dirección
(programa, datos, vectores de interrupción…)
• Físico: tipo de elemento que se encuentra ubicado en cada dirección (Flash,
RAM, periféricos E/S, registros especiales de la CPU…)
─ Tamaño: el mapa de memoria no tiene por qué cubrir la capacidad de
direccionamiento completa de la CPU (depende del tamaño de la memoria
utilizada)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.16
4. Mapa de memoria
Físico Funcional
Dependiente del dispositivo
0xFFFF Vectores
Flash 64 B
0xFFC0 Interrupción
0xFFBF
Flash Código 16 KB
0xC000
NO UTILIZADA
0x10FF Información
Flash 256 B 64 KB
0x1000 Calibración
MSP430x2xx Family User's Guide
+
NO UTILIZADA
0x03FF
RAM Datos 512 B
0x0200
0x01FF
Periféricos 16 bits 256 B
0x0100
0x00FF
Periféricos 8 bits 240 B
0x0010
0x000F
Registros especiales 16 B
0x0000
MSP430G2533
MSP430G2533 Datasheet
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.17
4. Mapa de memoria – 4.1. Zonas de memoria
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.18
4. Mapa de memoria – 4.2. Organización de la memoria
MSb 0 0 0 1 1 0 1 0 LSb
(1) Esta definición no es correcta, pues se utiliza el término LSB para denotar tanto al byte menos significativo como al bit
menos significativo indistintamente, y se utiliza el término MSB para denotar tanto al byte más significativo como al bit
más significativo indistintamente. No obstante, se empleará esta notación para evitar ambigüedades
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.19
4. Mapa de memoria – 4.2. Organización de la memoria
MSB 1 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 LSB
0xB81A
0x0005 0x0005
0x0004 0x0004
0x0000 0x0000
MSb LSb
Little endian
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.21
4. Mapa de memoria – 4.2. Organización de la memoria
MSB Palabra de la
LSB dirección xxx8h Alineamiento 2-bytes
MSB Sencillez
Palabra de la
LSB dirección xxx6h Velocidad
Huecos
MSB Palabra de la
LSB dirección xxx4h
Little endian
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.22
Índice
1. Introducción 5. CPU
2. Familia MSP430 5.1. Registros
5.1.1. Específicos
2.1. Comparativa de
5.1.2. Propósito general
microcontroladores
5.2. Modos de
2.2. Subfamilia G2xx
direccionamiento
3. Arquitectura 5.3. Instrucciones
3.1. Diagrama de bloques 5.3.1. Formato
3.2. Periféricos 5.3.2. Tamaño y tiempo de
ejecución
4. Mapa de memoria 5.3.3. Codificación
a) Formato I
4.1. Zonas de memoria b) Formato II
4.2. Organización de la c) Formato III
d) Ejemplo
memoria
5.3.4. Descripción
a) Aritméticas
b) Lógicas
c) Bit
d) Datos
e) Control de flujo
f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.23
5. CPU
5. CPU
Características:
─ Registros: dispone de 16 registros de 16 bits
─ Modos de direccionamiento: posee 7 modos de direccionamiento para
acceder a los datos
─ Instrucciones: arquitectura RISC con 27 instrucciones básicas y 24
instrucciones emuladas:
• Básicas: son ejecutadas directamente por la CPU
• Emuladas: son instrucciones ficticias que simplifican el desarrollo del
código, y son sustituidas por instrucciones básicas equivalentes
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.24
5. CPU – 5.1. Registros
5.1. Registros
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.25
5. CPU – 5.1. Registros – 5.1.1. Específicos
5.1.1. Específicos
R0: Contador de programa (PC: “Program Counter”)
─ Funcionalidad: apunta a la dirección de la siguiente instrucción a ejecutar
─ Características: como todas las instrucciones tienen un tamaño par en bytes (2,
4 ó 6 bytes), siempre contiene una dirección par
─ Operación: la CPU se encarga de actualizar automáticamente el contador de
programa en función de la instrucción ejecutada
Dirección par
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.26
5. CPU – 5.1. Registros – 5.1.1. Específicos
Dirección par
(1) Igualmente, se suele utilizar como comienzo de la zona de variables el principio de la RAM (0x0200 en el caso del
MSP430G2533), pues las variables se van almacenando en posiciones crecientes de memoria. Con este esquema se
optimiza el uso de la memoria, ya que las variables se van creando desde las posiciones bajas a las posiciones altas de
memoria y la pila va ocupando desde las posiciones altas a las posiciones bajas de memoria, maximizando la distancia
entre ambas zonas (variables y pila) y permitiendo el mayor uso de toda la memoria disponible
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.28
5. CPU – 5.1. Registros – 5.1.1. Específicos
PUSH POP
Predecremento Postincremento
Datos
almacenados
Base de la pila
(BOS)
2 1
1
Parte superior de
la pila (TOS) con
el último dato
alnmacenado
NOTA: Con el esquema de predecremento/postincremento utilizado la base de la pila (BOS) nunca contiene datos
almacenados
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.29
5. CPU – 5.1. Registros – 5.1.1. Específicos
Operaciones aritméticas
Bajo consumo
Interrupciones
rw-0: Indica que este bit se puede leer (r) y escribir (w),
y que tras un reset se inicializa a cero (0)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.30
5. CPU – 5.1. Registros – 5.1.1. Específicos
Desbordamiento: resultado
inválido en operaciones
aritméticas (V=1)
Bajo consumo: controlan los
relojes activos en el sistema
Interrupciones: habilita las
interrupciones enmascarables
(GIE=1)
Negativo: resultado negativo
en operaciones aritméticas
(N=1)
Cero: resultado nulo en
operaciones aritméticas (Z=1)
Acarreo: acarreo generado en
operaciones aritméticas (C=1)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.31
5. CPU – 5.1. Registros – 5.1.1. Específicos
Codificación Constante
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.33
5. CPU – 5.2. Modos de direccionamiento
Destino
Origen
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.34
5. CPU – 5.2. Modos de direccionamiento
Registro:
─ Operación: el operando se encuentra en un registro (Rn) se puede utilizar
para mover datos desde/hasta registros
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.35
5. CPU – 5.2. Modos de direccionamiento
Localización Origen
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.36
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.37
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.38
5. CPU – 5.2. Modos de direccionamiento
Indexado:
─ Operación: el operando se encuentra en la dirección a la que apunta un registro
(Rn) más un determinado desplazamiento (X) se puede utilizar para mover
datos desde/hasta arrays en memoria
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.39
5. CPU – 5.2. Modos de direccionamiento
Localización Origen
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.40
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.41
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Código Instrucción
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.42
5. CPU – 5.2. Modos de direccionamiento
Simbólico:
─ Operación: el operando se encuentra en la dirección identificada por una
etiqueta se puede utilizar para mover datos desde/hasta posiciones de
memoria identificadas mediante etiquetas (es el modo de direccionamiento
utilizado para referenciar variables)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.43
5. CPU – 5.2. Modos de direccionamiento
Localización Origen
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.44
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.45
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Código Instrucción
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.46
5. CPU – 5.2. Modos de direccionamiento
Absoluto:
─ Operación: el operando se encuentra en la dirección identificada por una
determinada posición se puede utilizar para mover datos desde/hasta
determinadas posiciones de memoria (es el modo de direccionamiento utilizado
para referenciar periféricos)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.47
5. CPU – 5.2. Modos de direccionamiento
Localización Origen
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.48
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.49
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Código Instrucción
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.50
5. CPU – 5.2. Modos de direccionamiento
Indirecto:
─ Operación: el operando se encuentra en la dirección a la que apunta un registro
(Rn) se puede utilizar para mover datos desde posiciones de memoria
identificadas mediante punteros
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.51
5. CPU – 5.2. Modos de direccionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.52
5. CPU – 5.2. Modos de direccionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.53
5. CPU – 5.2. Modos de direccionamiento
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.54
5. CPU – 5.2. Modos de direccionamiento
Localización Origen
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.56
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.57
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Código Instrucción
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.58
5. CPU – 5.2. Modos de direccionamiento
Inmediato:
─ Operación: el operando se encuentra en la propia instrucción se puede
utilizar para introducir constantes en memoria/registros (es el modo de
direccionamiento utilizado para configurar periféricos)
Localización Origen
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.60
5. CPU – 5.2. Modos de direccionamiento
Localización Destino
Código Instrucción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.61
5. CPU – 5.2. Modos de direccionamiento
Copia Dato
Código Instrucción
Origen
modificado
Destino
modificado
Dato
copiado
PC
modificado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.62
5. CPU – 5.2. Modos de direccionamiento
Resumen
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.63
5. CPU – 5.3. Instrucciones
5.3. Instrucciones
Palabra Palabra Palabra
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.64
5. CPU – 5.3. Instrucciones
Mover R7 Byte R8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.65
5. CPU – 5.3. Instrucciones
Emulada Básica
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.66
5. CPU – 5.3. Instrucciones
Nemónico
Descripción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.67
5. CPU – 5.3. Instrucciones – 5.3.1. Formato
5.3.1. Formato
(2 operandos)
realizan la operación para las que están
Formato I
diseñadas, sin tener en cuenta el tipo de
datos sobre los que operan. Es tarea del
programador elegir la instrucción
adecuada en función de los datos a
procesar (sin signo, con signo, byte,
palabra…) e interpretar el resultado de
dichas instrucciones
(1 operando)
Formato II
Las instrucciones de salto condicional se
Formato III
suelen utilizar en combinación con otras
(Saltos)
instrucciones (aritméticas, comparación,
testeo de bits…), de forma que estas otras
instrucciones actualicen los bits del
registro de estado (SR) antes de
comprobar la condición del salto
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.68
5. CPU – 5.3. Instrucciones – 5.3.2. Tamaño y tiempo de ejecución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.69
5. CPU – 5.3. Instrucciones – 5.3.2. Tamaño y tiempo de ejecución
(1 operando)
Formato II
(direccionamiento a registro)
Formato III
(Saltos)
Conclusiones:
─ Los modos de direccionamiento tienen una gran influencia en el tamaño y
tiempo de ejecución de las instrucciones. Si hay que optimizar el código en
tamaño y/o velocidad, es necesario elegir el modo de direccionamiento más
eficiente según cada caso (el modo de direccionamiento más eficiente es el
direccionamiento a registro)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.70
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación
5.3.3. Codificación
(2 operandos)
Formato I
(1 operando)
Formato II
Formato III
(Saltos)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.71
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – a) Formato I
a) Formato I
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.72
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – a) Formato I
Código de operación:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.73
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – a) Formato I
Modo de direccionamiento:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.74
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – a) Formato I
Tamaño:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.75
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – b) Formato II
b) Formato II
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.76
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – b) Formato II
Código de operación:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.77
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – b) Formato II
Modo de direccionamiento:
NOTA: Todos los modos de direccionamiento son válidos para las instrucciones PUSH y CALL, y todos los modos de
direccionamiento excepto el inmediato son válidos para el resto de instrucciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.78
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – b) Formato II
Tamaño:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.79
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – c) Formato III
c) Formato III
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.80
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – c) Formato III
Código de operación:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.81
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – c) Formato III
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.82
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – c) Formato III
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.83
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
d) Ejemplo
Loop 0xC000
cont 0x0200
Little endian
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.84
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
0 0 0 1 0 0 0 0 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.85
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
0 0 1 0 1 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.86
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.87
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0
0x108A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.88
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
1 0 0 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.89
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
X = cont – PC
= 0x0200 – 0xC004
= 0x41FC
1 0 1 0 1 1 1 0 0 0 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.90
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.91
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0
0x9AF0
0x41FC
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.92
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
0 0 1 0 0 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.93
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
1 1 1 1 1 1 1 1 0 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.94
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0
0x23FC
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.95
5. CPU – 5.3. Instrucciones – 5.3.3. Codificación – d) Ejemplo
Loop 0xC000
cont 0x0200
Little endian
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.96
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción
5.3.4. Descripción
Tipos de instrucciones:
─ Aritméticas
─ Lógicas
─ Bit
─ Datos
─ Control de flujo
─ Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.97
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – a) Aritméticas
a) Aritméticas
Realizan operaciones de cálculo con los datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.98
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – a) Aritméticas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.99
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – a) Aritméticas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.100
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – a) Aritméticas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.101
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – a) Aritméticas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.102
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – b) Lógicas
b) Lógicas
Realizan operaciones booleanas con los datos (a nivel de bit)
NOTA: Aunque la instrucción OR no está implementada, la instrucción BIS es equivalente (salvo en los bits de estado)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.103
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – b) Lógicas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.104
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – c) Bit
c) Bit
Realizan operaciones a nivel de bit con los datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.105
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – c) Bit
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.106
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – c) Bit
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.107
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – c) Bit
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.108
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – d) Datos
d) Datos
Realizan operaciones de modificación de datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.109
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – d) Datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.110
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – d) Datos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.111
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – e) Control de flujo
e) Control de flujo
Controlan el orden de ejecución del código
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.112
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – e) Control de flujo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.113
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – e) Control de flujo
MUY IMPORTANTE
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.114
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – e) Control de flujo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.115
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – f) Sistema
f) Sistema
Realizan operaciones especiales para controlar el sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.116
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.117
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.118
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.119
5. CPU – 5.3. Instrucciones – 5.3.4. Descripción – f) Sistema
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T2.120
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Ejercicios Tema 2:
MSP430
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.0
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.1
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.2
1. Enunciados – Ejercicio 1
Ejercicio 1:
─ Almacenar las palabras 0x0123, 0x4567 y 0x89AB en una memoria con
formato Little endian comenzando en la posición 0x0000, utilizando para ello
las siguientes representaciones:
0x0004 0x0004
0x0002 0x0002
0x0005 0x0000
0x0000 0x0000
0x0004 0x0001
N+1 N N N+1
0x0003 0x0002
0x0004 0x0004
NOTA: Los símbolos “N” y “N+1” indican que, a nivel de byte, la columna correspondiente de la memoria donde se
encuentran dichos símbolos contienen las direcciones pares e impares respectivamente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.3
1. Enunciados – Ejercicio 1
0x0004 0x0004
0x0002 0x0002
0x0005 0x0000
0x0000 0x0000
0x0004 0x0001
N+1 N N N+1
0x0003 0x0002
0x0004 0x0004
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.4
1. Enunciados – Ejercicio 2
Ejercicio 2:
─ En un microcontrolador de altas prestaciones se dispone de dos CPUs de 16
bits que comparten una misma memoria. La CPU1 opera con formato Little
endian mientras que la CPU2 opera con formato Big endian.
Memoria
CPU1 CPU2
R0 0x1122 R0 0x5566
0x0004
R1 0x3344 R1 0x7788
0x0002
R2 R2
0x0000
R3 R3
N+1 N
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.5
1. Enunciados – Ejercicio 2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.6
1. Enunciados – Ejercicio 3
Ejercicio 3:
─ En un microcontrolador de la familia MSP430 se dispone de los siguientes datos
en los registros de la CPU y en la memoria:
CPU
0x0208 0x09 0x01
R4 0x4004
0x0206 0x03 0x08
R5 0x0550
label 0x0204 0x02 0x00
R6 0x0606
0x0202 0x04 0x06
R7 0x7070
0x0200 0x05 0x07
R8 0x8888
N+1 N
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.7
1. Enunciados – Ejercicio 3
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.8
1. Enunciados – Ejercicio 4
Ejercicio 4:
─ El contenido de la memoria de un microcontrolador cuya CPU opera con formato
Little endian es el que se muestra a continuación, el cual se corresponde con un
programa en código máquina:
N+1 N
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.9
1. Enunciados – Ejercicio 4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.10
1. Enunciados – Ejercicio 5
Ejercicio 5:
─ Indicar el contenido del registro R10 tras ejecutar el siguiente conjunto de
instrucciones en un microcontrolador de la familia MSP430:
MOV.W #0x1111,R10
ADD.W #6,PC
MOV.W #0x2222,R10
JMP FIN
MOV.W #0x3333,R10
JMP FIN
MOV.W #0x4444,R10
FIN JMP FIN
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.11
1. Enunciados – Ejercicio 6
Ejercicio 6:
─ Obtener el código máquina de las siguientes instrucciones en el MSP430:
• MOV.W #0x03,R10
• MOV.W #0x04,R10
• MOV.W @R2,R10
• CLR.W R10
• ADD.W #0x10,R10
• ADD.W #-0x01,R10
• ADD.W @R3+,R10
• INC.W R10
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.12
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.13
2. Solución – Ejercicio 1
Ejercicio 1:
Little endian
0x0000 0x01 0x23 0x0000 0x23 0x01 0x0001 0x01 0x0004 0xAB
0x0002 0x45 0x67 0x0002 0x67 0x45 0x0000 0x23 0x0005 0x89
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.14
2. Solución – Ejercicio 1
Big endian
0x0000 0x23 0x01 0x0000 0x01 0x23 0x0001 0x23 0x0004 0x89
0x0002 0x67 0x45 0x0002 0x45 0x67 0x0000 0x01 0x0005 0xAB
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.15
2. Solución – Ejercicio 2
Ejercicio 2:
Memoria
CPU1 CPU2
R0 0x1122 R0 0x5566
0x0004 0x66 0x44
R1 0x3344 R1 0x7788
0x0002 0x11 0x22
R2 0x8877 R2 0x2211
0x0000 0x88 0x77
R3 0x6644 R3 0x4466
N+1 N
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.16
2. Solución – Ejercicio 3
Ejercicio 3:
CPU
0x0208 0x09 0x01
R4 0x0200
0x0206 0x04 0x06
R5 0x0205
label 0x0204 0x00 0x00
R6 0x0901
0x0202 0x04 0x06
R7 0x0308
0x0200 0x05 0x07
R8 0x0007
N+1 N
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.17
2. Solución – Ejercicio 4
Ejercicio 4:
a) ¿Cuáles son las instrucciones del programa?
b) ¿Qué longitud de palabra tiene el microcontrolador, sabiendo que es
mayor de 8 bits?
c) ¿Qué tamaño tiene cada una de las instrucciones del programa?
d) ¿Cuántos operandos admite como máximo una instrucción?
0x40310280
0x40B25A800120
0x400A
0x832A
0x4239
0x4ABA000C
0x8319
0x23FC
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.18
2. Solución – Ejercicio 4
Instrucción
más
0x40310280 pequeña
0x40B25A800120
0x400A 16 bits
0x832A 16 bits
0x4239 16 bits
Código Operación = Longitud Palabra
0x4ABA000C
0x8319 16 bits
0x23FC 16 bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.19
2. Solución – Ejercicio 4
0x40310280 2 palabras
0x40B25A800120 3 palabras
0x400A 1 palabra
0x832A 1 palabra
0x4239 1 palabra
0x4ABA000C 2 palabras
0x8319 1 palabra
0x23FC 1 palabra
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.20
2. Solución – Ejercicio 4
0x40310280
0x40B25A800120 3 palabras = Código Operación + 2 operandos
0x400A
0x832A
0x4239
0x4ABA000C
0x8319
0x23FC
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.21
2. Solución – Ejercicio 5
Ejercicio 5:
• R10 0x3333
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.22
2. Solución – Ejercicio 6
Ejercicio 6:
• MOV.W #0x03,R10 0x403A – 0x0003
• MOV.W #0x04,R10 0x422A
• MOV.W @R2,R10 0x422A
• CLR.W R10 0x430A
• ADD.W #0x10,R10 0x503A – 0x0010
• ADD.W #-0x01,R10 0x533A
• ADD.W @R3+,R10 0x533A
• INC.W R10 0x531A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET2.23
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Tema 3:
Programación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.0
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.1
Índice
4.2. Ejemplos
4.2.1. Manipulación de bytes
a) Punteros
b) Desplazamientos
5. Entornos IDE
5.1. IAR
5.1.1. Estructura
a) Espacio de trabajo
b) Proyecto
5.1.2. Características
extendidas de C
a) Ficheros de cabecera
b) Manipulación de bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.2
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.3
1. Introducción
1. Introducción
Usuario
Eficiencia
Sencillez
Estructuras de código de alto nivel y acceso al
Nivel Medio
Software
Microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.4
1. Introducción
Código(s) fuente
(C)
Compilador
Código(s) fuente
(Ensamblador)
Desarrollo
Ensamblador
Código(s) objeto
Enlazador
Código Máquina
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.5
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.6
2. Modelo de programación
2. Modelo de programación
─ Existen distintos modelos de programación de microcontroladores, siendo los
más habituales:
• Bucle infinito
• Bajo consumo
─ Para aprovechar al máximo las prestaciones de los microcontroladores MSP430
es recomendable basar su programación en el modelo de bajo consumo:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.7
2. Modelo de programación – 2.1. Bucle infinito
Bucle infinito
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.8
2. Modelo de programación – 2.2. Bajo consumo
(1) Una interrupción es un evento que provoca que la CPU detenga la ejecución del código en curso y comience a ejecutar
un código específico asociado a la misma, conocido como RTI (Rutina de Tratamiento de Interrupción) o ISR (Interrupt
Service Routine), para atender y gestionar dicho evento. Tras la ejecución de la RTI finaliza el tratamiento de la
interrupción, por lo que la CPU continúa con la ejecución del código en curso a partir de la última instrucción ejecutada
antes de recibir la interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.9
2. Modelo de programación – 2.2. Bajo consumo
Interrupciones(1):
Interrupción
RTI
Programa
Tareas:
─ Interrupciones: asociadas a eventos importantes que deben ser atendidos lo
antes posible, por lo que el código específico asociado a cada interrupción (RTI)
debe ser lo más corto y rápido posible
─ Tarea: si una interrupción requiere un procesamiento intenso (largo y lento)
debe realizarse fuera del código específico asociado a la misma (RTI), por lo que
hay que activar al microcontrolador para sacarlo del bajo consumo y continuar
ejecutando código adicional (conocido como Tarea) una vez finalizado el
tratamiento de la interrupción. Tras la ejecución de este código adicional el
microcontrolador regresa al bajo consumo(1)
─ Interacción: el mecanismo de interacción entre las interrupciones y las tareas
se basa en flags, existiendo un flag para cada tarea que será activado por la
interrupción que requiera la ejecución de la misma
Eficiencia
Complejidad
(1) No todas las interrupciones necesitan tener una tarea asociada, en función del procesamiento que deba realizar cada
una. De este modo, las interrupciones que requieran un procesamiento corto y rápido pueden realizarlo en el código
específico asociado (RTI) sin necesidad de utilizar ninguna tarea adicional
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.11
2. Modelo de programación – 2.2. Bajo consumo
Rutinas de Tratamiento
Flujograma: Código principal
de Interrupciones (RTIs)
Activar
flags
Bajo Consumo
Salir bajo
consumo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.13
3. Ensamblador
3. Ensamblador
─ Bajo nivel: es el lenguaje de programación más cercano al código máquina, y,
por lo tanto, al propio hardware (microcontrolador):
Eficiencia: traducción directa entre instrucciones en lenguaje ensamblador
e instrucciones en código máquina programas cortos y rápidos
Control: acceso sin restricciones a todos los recursos hardware código
muy optimizado difícilmente implementable en lenguajes de alto nivel
Complejidad: escasa abstracción en el lenguaje poco adecuado para
programas complejos
Portabilidad: dependencia absoluta del hardware necesidad de
reescribir el código para cada plataforma hardware
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.14
3. Ensamblador
Código(s) fuente
(Ensamblador)
Ensamblador
Código(s) objeto
Enlazador
Código Máquina
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.15
3. Ensamblador
─ Código Máquina: patrón de bits que describe la instrucción a ejecutar, así como
el tamaño, número y localización de sus operandos
Muy complejo de utilizar propenso a cometer errores de programación
Mover R7 Byte R8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.16
3. Ensamblador
(1) Aunque la aplicación esté formada por un único archivo es necesario utilizar el enlazador para generar el archivo con
código máquina ejecutable
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.17
3. Ensamblador
Ejemplo:
Código fuente Código ejecutable
Loop 0xC000
cont 0x0200
Enlazado
Little endian
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.18
3. Ensamblador – 3.1. Lenguaje ensamblador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.19
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.1. Sintaxis
3.1.1. Sintaxis
─ Una línea de código en lenguaje ensamblador puede estar formada por hasta
cuatro campos separados por espacios o tabulaciones:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.20
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.21
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Fichero de cabecera
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.22
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Constantes genéricas
Registro de estado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.23
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Direcciones de memoria
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.24
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Registros de periféricos
Configuración de periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.25
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Calibración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.26
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.2. Ficheros de cabecera
Vectores de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.27
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.3. Directivas
3.1.3. Directivas
─ Comandos que acepta el ensamblador para controlar el proceso de ensamblado
(no son instrucciones de la CPU, por lo que no generan código):
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.28
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.3. Directivas
─ Control:
• #include “filename” inserta el contenido del archivo filename en
el archivo actual
• ORG expr establece el valor del contador de programa (PC) en la
dirección expr
• EVEN alinea el valor del contador de programa (PC) a la siguiente
dirección par
• END finaliza el proceso de ensamblado
─ Constantes:
• label EQU expr asigna el valor expr al símbolo label
─ Macros:
• name MACRO comienza la definición de una macro denominada name
• ENDM finaliza la definición de una macro
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.29
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.3. Directivas
─ Datos:
• DB expr1 [,expr2]… ; DC8 expr1 [,expr2]… reserva tantas
posiciones de tamaño byte como operandos tenga la directiva, y las inicializa
a los valores de dichos operandos (expr1, expr2…)
• DW expr1 [,expr2]… ; DC16 expr1 [,expr2]… reserva tantas
posiciones de tamaño palabra como operandos tenga la directiva, y las
inicializa a los valores de dichos operandos (expr1, expr2…)
• DS size_expr ; DS8 size_expr reserva size_expr posiciones
consecutivas de tamaño byte
• DS16 size_expr reserva size_expr posiciones consecutivas de
tamaño palabra
NOTA: Las directivas DB, DC8, DW y DC16 reservan espacio en memoria y lo inicializan a un valor determinado. Estas
directivas se utilizan tanto para crear variables inicializadas (caso de ubicarlas en la RAM) como para crear
constantes (caso de ubicarlas en la Flash)
NOTA: Las directivas DS, DS8 y DS16 reservan espacio en memoria, pero no lo inicializan a ningún valor determinado (ni
siquiera al valor ‘0’, por lo que inicialmente tendrán el valor que tenga la memoria en dichas posiciones). Estas directivas
se utilizan para crear variables no inicializadas (sólo tiene sentido ubicarlas en la RAM)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.30
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.4. Constantes
3.1.4. Constantes
─ Formatos utilizados por el ensamblador para la especificación de constantes:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.31
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.5. Reserva de memoria
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.32
3. Ensamblador – 3.1. Lenguaje ensamblador – 3.1.6. Macros
3.1.6. Macros
─ Se utilizan para definir símbolos que representan bloques de código
─ Se definen mediante las directivas de macros: MACRO ; ENDM
─ Cada macro posee un nombre asignado, y cuando el ensamblador encuentra
dicho nombre en el programa lo sustituye automáticamente por el bloque de
código que representa
─ Son muy útiles para clarificar la estructura del programa, pues utilizando
únicamente el nombre asignado a la macro se puede describir la operación que
realiza el bloque de código completo que representa sin necesidad de conocer
los detalles de implementación del mismo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.33
3. Ensamblador – 3.2. Inicialización
3.2. Inicialización
─ En cualquier programa implementado mediante el lenguaje ensamblador es
necesario realizar una serie de operaciones básicas para su correcto
funcionamiento:
• Watchdog: detener el watchdog del microcontrolador si no se va a utilizar
• Pila: establecer la posición de memoria inicial de la pila (base de la pila)
• Interrupciones: habilitar las interrupciones del microcontrolador
• Periféricos: configurar adecuadamente los periféricos a utilizar
• Rutina Reset: especificar la dirección de memoria donde se encuentra el
código a ejecutar al encender el microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.34
3. Ensamblador – 3.2. Inicialización – 3.2.1. Watchdog
3.2.1. Watchdog
─ El watchdog es un periférico del microcontrolador utilizado para evitar bloqueos
software debido a cualquier circunstancia imprevista en la aplicación
─ Se implementa mediante un temporizador que genera un reset cada vez que la
cuenta alcanza el valor programado
─ Su utilización se basa en las siguientes premisas:
• Código ejecutándose: periódicamente el programa debe reiniciar la cuenta
del watchdog(1) antes de que alcance el valor programado, evitando así que
se genere un reset
• Código bloqueado: si el programa se ha bloqueado por cualquier
circunstancia no podrá reiniciar la cuenta del watchdog antes de que alcance
el valor programado, generándose así un reset que reinicie la aplicación
─ El watchdog se encuentra habilitado por defecto al encender el
microcontrolador(2), por lo que si no se va a utilizar en la aplicación es
imprescindible deshabilitarlo(3) antes de que la cuenta alcance el valor
programado y genere un reset
(1) La cuenta del watchdog se reinicia escribiendo un 1 en el bit WDTCNTCL del registro WDTCTL
(2) Inicialmente el watchdog está configurado para generar un reset cada 30ms aproximadamente
(3) El watchdog se deshabilita con la instrucción: MOV.W #WDTPW+WDTHOLD,&WDTCTL
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.35
3. Ensamblador – 3.2. Inicialización – 3.2.2. Pila
3.2.2. Pila
─ Al margen del posible uso que le pueda dar el usuario, la pila la utiliza
automáticamente la CPU para almacenar la dirección de retorno (PC) de las
llamadas a subrutinas, así como la dirección de retorno (PC) y el registro de
estado (SR) durante las interrupciones
─ Es necesario inicializar el valor del puntero de pila con la posición a partir de la
cual se quieren empezar a almacenar valores (posición conocida como base de
la pila). Normalmente se utiliza como dicha posición el final de la RAM (0x0400
en el caso del MSP430G2533(1)), ya que la pila crece hacia las direcciones bajas
de memoria, mientras que las variables crecen hacia las direcciones altas de
memoria (así se garantiza el mejor uso del tamaño completo de la RAM)
Pila: 0x0400
0x03FF
NO UTILIZADA
Crecimiento de la pila
0x03FF
RAM Datos 512 B RAM Datos
0x0200 512 B
(1) En verdad el final de la RAM se encuentra en la posición 0x03FF, estando la posición 0x0400 en una zona no utilizada
del mapa de memoria. No obstante, al operar la pila con predecremento para introducir datos, la primera vez que se
introduzca un dato el puntero de pila SP se situará en la posición 0x03FE, que se encuentra al final de la RAM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.36
3. Ensamblador – 3.2. Inicialización – 3.2.3. Interrupciones
3.2.3. Interrupciones
─ Las interrupciones constituyen un recurso imprescindible en cualquier
microcontrolador para poder realizar una programación eficiente
─ Las interrupciones se encuentran deshabilitadas por defecto al encender el
microcontrolador, por lo que es imprescindible habilitarlas(1) antes de que la
aplicación haga uso de ellas
rw-0: Indica que este bit se puede leer (r) y escribir (w),
y que tras un reset se inicializa a cero (0)
3.2.4. Periféricos
─ Los periféricos aumentan las capacidades del sistema al incorporar nuevas
funcionalidades (sobre todo de interfaz con el mundo exterior)
─ Su uso es imprescindible en cualquier aplicación, pues la interacción con el
exterior es una necesidad en todo sistema. Es por ello por lo que deben ser
adecuadamente configurados en función de las necesidades de la aplicación a
desarrollar, escribiendo los valores adecuados en los registros de configuración
de los mismos antes de que sean utilizados
Activación
Periférico
Periférico
Registro 1 1 0 1 1 1 0 0 0
Registro 2
Registro N 0 0 0 1 1 0 1 0
Generación
Interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.38
3. Ensamblador – 3.2. Inicialización – 3.2.5. Rutina Reset
Flash Código 16 KB
0xC000
Código: 0xC000
NO UTILIZADA
(1) El código asociado a la rutina reset comienza con la instrucción ubicada en la dirección de memoria que indica la palabra
de la posición 0xFFFE (vector de interrupción de la rutina reset)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.39
3. Ensamblador – 3.3. Estructura
3.3. Estructura
─ Debido a la complejidad en el desarrollo de programas mediante el lenguaje
ensamblador es conveniente seguir una serie de recomendaciones para
estructurar adecuadamente el código y facilitar así su comprensión
(imprescindible no sólo durante el desarrollo y depuración del mismo, sino
también para su mantenimiento, ampliación y reutilización en otros programas):
• Sangría: escribir adecuadamente el programa para localizar rápidamente
los distintos campos de cada línea de código
• Constantes del microcontrolador: utilizar las constantes del
microcontrolador del fichero de cabecera correspondiente
• Variables y etiquetas: utilizar un nombre representativo para las variables y
las etiquetas
• Comentarios: comentar ampliamente el código
• Modularidad: utilizar macros y subrutinas para dividir el código en módulos
de menor complejidad
• Flujo de ejecución: intentar mantener un flujo lineal de ejecución
minimizando el número de saltos realizados
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.40
3. Ensamblador – 3.3. Estructura – 3.3.1. Sangría
3.3.1. Sangría
... ...
BIC.B #0x08,&0x0022 BIC.B #0x08,&0x0022
BIS.B #0x41,&0x0022 BIS.B #0x41,&0x0022
JMP o JMP o
JMP p JMP p
k JMP g k JMP g
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.41
3. Ensamblador – 3.3. Estructura – 3.3.2. Constantes del microcontrolador
JMP o JMP o
JMP p JMP p
k JMP g k JMP g
NOTA: Las constantes del microcontrolador vienen definidas en el fichero de cabecera “msp430g2533.h” en el caso del
MSP430G2533
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.42
3. Ensamblador – 3.3. Estructura – 3.3.3. Variables y etiquetas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.43
3. Ensamblador – 3.3. Estructura – 3.3.4. Comentarios
3.3.4. Comentarios
... ...
BIC.B #BIT3,&P1DIR BIC.B #BIT3,&P1DIR ; P1.3: Entrada -> S2
BIS.B #BIT0+BIT6,&P1DIR BIS.B #BIT0+BIT6,&P1DIR ; P1.0: Salida -> LED1
; P1.6: Salida -> LED2
BIC.B #BIT0+BIT6,&P1OUT BIC.B #BIT0+BIT6,&P1OUT ; Apaga LED1 y LED2
BIS.B #BIT0,flags BIS.B #BIT0,flags ; Copia dst -> org (no inv)
sentido_copia BIT.B #BIT0,flags sentido_copia BIT.B #BIT0,flags ; Copia org -> dst (invertido)?
JZ org_dst_inv JZ org_dst_inv ; Si
JMP dst_org_norm JMP dst_org_norm ; No
org_dst_inv ADD.W #STRING_SIZE,R11 org_dst_inv ADD.W #STRING_SIZE,R11 ; R11 -> final cadena dst
org_dst_inv_1 DEC.W R11 org_dst_inv_1 DEC.W R11 ; Siguiente caracter
MOV.B @R10+,0(R11) MOV.B @R10+,0(R11) ; Copia org(i) -> dst(N-i)
INC.B cont INC.B cont ; Incrementa contador
CMP.B #STRING_SIZE,cont CMP.B #STRING_SIZE,cont ; Final de la cadena?
JNE org_dst_inv_1 JNE org_dst_inv_1 ; No
JMP Loop_End JMP Loop_End ; Si
... ...
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.44
3. Ensamblador – 3.3. Estructura – 3.3.5. Modularidad
3.3.5. Modularidad
... ...
BIC.B #BIT3,&P1DIR ; P1.3: Entrada -> S2 M_Conf_Perif ; MACRO
BIS.B #BIT0+BIT6,&P1DIR ; P1.0: Salida -> LED1 M_Ini_Var ; MACRO
; P1.6: Salida -> LED2
BIC.B #BIT0+BIT6,&P1OUT ; Apaga LED1 y LED2 Loop_Begin BIC.B #BIT0+BIT6,&P1OUT ; Apaga LED1 y LED2
BIS.B #BIT0,flags ; Copia dst -> org (no inv) JMP S2_on_wait
NOTA: Las diferencias entre las macros y las subrutinas radican en primer lugar en que las macros operan en tiempo de
compilación (periodo en el que el código está siendo ensamblado por el ensamblador) y las subrutinas operan en
tiempo de ejecución (periodo en el que el código está siendo ejecutado por el microcontrolador), y en segundo lugar en
que las macros originan más código (al actuar mediante un proceso de sustitución de un símbolo por un bloque de
código) y las subrutinas son más lentas (al requerir un tiempo de procesado para introducir y extraer el contador de
programa PC de la pila SP)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.45
3. Ensamblador – 3.3. Estructura – 3.3.6. Flujo de ejecución
Loop_Begin BIC.B #BIT0+BIT6,&P1OUT ; Apaga LED1 y LED2 Loop_Begin BIC.B #BIT0+BIT6,&P1OUT ; Apaga LED1 y LED2
Loop_End BIS.B #BIT6,&P1OUT ; Enciende LED2 dst_org_norm MOV.B @R11+,0(R10) ; Copia dst(i) -> org(i)
INC.W R10 ; Siguiente caracter
JMP S2_off_wait INC.B cont ; Incrementa contador
CMP.B #STRING_SIZE,cont ; Final de la cadena?
S2_off JMP Loop_Begin JNE dst_org_norm ; No
JMP Loop_End
org_dst_inv ADD.W #STRING_SIZE,R11 ; R11 -> final cadena dst
org_dst_inv_1 DEC.W R11 ; Siguiente caracter org_dst_inv ADD.W #STRING_SIZE,R11 ; R11 -> final cadena dst
MOV.B @R10+,0(R11) ; Copia org(i) -> dst(N-i) org_dst_inv_1 DEC.W R11 ; Siguiente caracter
INC.B cont ; Incrementa contador MOV.B @R10+,0(R11) ; Copia org(i) -> dst(N-i)
CMP.B #STRING_SIZE,cont ; Final de la cadena? INC.B cont ; Incrementa contador
JNE org_dst_inv_1 ; No CMP.B #STRING_SIZE,cont ; Final de la cadena?
JMP Loop_End ; Si JNE org_dst_inv_1 ; No
... ...
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.46
3. Ensamblador – 3.4. Ejemplos
3.4. Ejemplos
─ Arrays: estructuras de datos que permiten almacenar un conjunto de datos
ordenados en una disposición tipo tabla
─ Sentencias básicas: implementación de estructuras de código propias de
lenguajes de alto nivel
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.47
3. Ensamblador – 3.4. Ejemplos – 3.4.1. Arrays
3.4.1. Arrays
• Unidimensionales: lista de datos con una única fila y varias columnas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.48
3. Ensamblador – 3.4. Ejemplos – 3.4.1. Arrays – a) Unidimensionales
a) Unidimensionales
; Array unidimensional: 01x08 (columnas: 00 -> 07)
array DC8 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 ; Array: columnas (datos)
...
MOV.W #array,R10 ; Direccion del array
MOV.B #3,R11 ; Columna a acceder (R11)
CALL #val_array ; Acceder al dato (R15)
...
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.49
3. Ensamblador – 3.4. Ejemplos – 3.4.1. Arrays – b) Bidimensionales
b) Bidimensionales
; Array bidimensional: 04x08 (filas: 00 -> 03; columnas: 00 -> 07)
array DC16 array_f0,array_f1,array_f2,array_f3 ; Array: direcciones de las filas
...
MOV.W #array,R10 ; Direccion del array
MOV.B #2,R11 ; Fila a acceder (R11)
MOV.B #5,R12 ; Columna a acceder (R12)
CALL #val_array ; Acceder al dato (R15)
...
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.50
3. Ensamblador – 3.4. Ejemplos – 3.4.2. Sentencias básicas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.51
3. Ensamblador – 3.4. Ejemplos – 3.4.2. Sentencias básicas – a) Comparaciones
a) Comparaciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.52
3. Ensamblador – 3.4. Ejemplos – 3.4.2. Sentencias básicas – a) Comparaciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.53
3. Ensamblador – 3.4. Ejemplos – 3.4.2. Sentencias básicas – b) Condiciones
b) Condiciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.54
3. Ensamblador – 3.4. Ejemplos – 3.4.2. Sentencias básicas – c) Bucles
c) Bucles
• do – while do { do INC.W A
A++; CMP.W A,B ; A≠B?
} while (A!=B); JNE do ; Si
end … ; No
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.55
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.56
Índice
4.2. Ejemplos
4.2.1. Manipulación de bytes
a) Punteros
b) Desplazamientos
5. Entornos de desarrollo
5.1. IAR Embedded
Workbench
5.1.1. Estructura
a) Espacio de trabajo
b) Proyecto
5.1.2. Características
extendidas de C
a) Ficheros de cabecera
b) Manipulación de bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.57
4. C
4. C
─ Nivel medio: lenguaje de programación con estructuras de control de alto nivel
y acceso al hardware a bajo nivel
Sencillez: mayor nivel de abstracción (tipos de datos, sentencias básicas,
librerías, gestión del acceso a memoria, uso de los modos de
direccionamiento, inicialización de la pila, inicialización del vector de
interrupción de la rutina reset con la función main, acceso al mapa de
memoria completo mediante punteros…) simplificación en el
desarrollo del código
Portabilidad: independencia del hardware código válido para distintas
plataformas hardware
Eficiencia: cada sentencia se traduce en varias instrucciones en código
máquina la eficiencia del código depende del compilador(1)
Control: acceso limitado a los recursos hardware algunas operaciones
difícilmente implementables(2)
(1) Los compiladores son cada vez más eficientes en la optimización del código máquina generado, por lo que la pérdida de
eficiencia es poco apreciable en general, restringiéndose el uso de lenguajes de bajo nivel a rutinas realmente críticas
en tamaño y/o velocidad
(2) Cada lenguaje de alto nivel posee sus propias restricciones a la hora de acceder a los recursos hardware, aunque el
lenguaje C permite acceder prácticamente a todos los recursos del mismo (salvo escasas excepciones, como por
ejemplo algunos registros específicos de la CPU, a los cuales no se puede acceder)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.58
4. C
Código(s) fuente
(C)
Compilador
Código(s) fuente
(Ensamblador)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.59
4. C
(1) Los archivos con código en lenguaje ensamblador deben ser posteriormente ensamblados y enlazados para generar un
archivo con código máquina ejecutable
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.60
4. C
Ejemplo:
Compilación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.61
4. C – 4.1. Lenguaje C
4.1. Lenguaje C
─ Entre los aspectos más importantes que determinan el correcto uso del lenguaje
C para la programación de microcontroladores se encuentran:
• Ficheros de cabecera: definición de constantes para el microcontrolador
utilizado
• Tipos de datos: formato y tamaño de los datos básicos disponibles
• Palabras clave: extensión de las palabras clave básicas del lenguaje C para
soportar características especiales del microcontrolador
• Directivas: comandos proporcionados al programa compilador para
controlar el proceso de compilación
• Funciones intrínsecas: funciones predefinidas que permiten acceder a
recursos específicos del microcontrolador
• Reserva de memoria: consideraciones a tener en cuenta durante la reserva
e inicialización de memoria
• Rutinas de tratamiento de interrupción: declaración de las rutinas de
tratamiento de interrupción
• Manipulación de bits: sentencias a utilizar para la manipulación de los bits
de cualquier dato
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.62
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.63
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Fichero de cabecera
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.64
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Definiciones para el
Lenguaje Ensamblador
Definiciones para el
Lenguaje C
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.65
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Constantes genéricas
Registro de estado
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.66
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Direcciones de memoria
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.67
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Registros de periféricos
Configuración de periféricos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.68
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Calibración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.69
4. C – 4.1. Lenguaje C – 4.1.1. Ficheros de cabecera
Vectores de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.70
4. C – 4.1. Lenguaje C – 4.1.2. Tipos de datos
Tamaño byte
Tamaño palabra
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.71
4. C – 4.1. Lenguaje C – 4.1.3. Palabras clave
(1) Para el correcto funcionamiento del microcontrolador es necesario indicar qué función implementa una rutina de
tratamiento de interrupción, pues este tipo de funciones deben realizar operaciones especiales durante su ejecución
(salvar y restaurar el registro de estado SR, inicializar el bit GIE del registro de estado SR a ‘0’…)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.72
4. C – 4.1. Lenguaje C – 4.1.4. Directivas
4.1.4. Directivas
─ Se especifican mediante la palabra #pragma seguida de la directiva a aplicar:
(1) Para especificar el número del vector <N> de la rutina de tratamiento de interrupción de pueden utilizar tanto valores
numéricos como las constantes definidas en el fichero de cabecera “msp430g2533.h” para los vectores de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.73
4. C – 4.1. Lenguaje C – 4.1.5. Funciones intrínsecas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.74
4. C – 4.1. Lenguaje C – 4.1.5. Funciones intrínsecas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.75
4. C – 4.1. Lenguaje C – 4.1.5. Funciones intrínsecas
(1) Una descripción detallada de estas funciones y sus parámetros se puede encontrar en el documento “IAR C/C++
Compiler”
(2) El valor del modo de bajo consumo deseado “n” debe estar comprendido entre 0 y 4
(3) Estas funciones también habilitan las interrupciones enmascarables mediante el bit GIE del registro de estado SR
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.76
4. C – 4.1. Lenguaje C – 4.1.6. Reserva de memoria
(1) Sólo se reserva memoria para el montón (“heap”) si se utilizan variables dinámicas en el código
(2) La pila y el montón pueden tener distinto tamaño, aunque por defecto ambos tienen un tamaño de 80 bytes
(3) Para evitar sobrepasar el tamaño de la pila y del montón no se deben definir ni muchas variables ni variables muy
extensas (como arrays con muchos elementos) de forma local en una función (para la pila) o de forma dinámica (para el
montón)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.77
4. C – 4.1. Lenguaje C – 4.1.6. Reserva de memoria
(1) Un ejemplo de este tipo de variables pueden ser las que contienen el valor de algunos registros de algunos periféricos
E/S que pueden modificar sus valores en función de eventos externos, como pueden ser los flags de interrupción
(2) La principal función de este modificador consiste en indicarle al compilador que no optimice los accesos a este tipo de
variables, ya que sus valores pueden modificarse independientemente de las instrucciones ejecutadas en el código
(3) Si se utilizan simultáneamente los modificadores volatile y const la variable no se puede alterar mediante el código
pero se ubica en la memoria RAM del microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.78
4. C – 4.1. Lenguaje C – 4.1.7. Rutinas de tratamiento de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.79
4. C – 4.1. Lenguaje C – 4.1.8. Manipulación de bits
P1OUT X X X X X X X X
0xFA 1 1 1 1 1 0 1 0
0∙X=0
AND
1∙X=X
P1OUT X X X X X 0 X 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.80
4. C – 4.1. Lenguaje C – 4.1.8. Manipulación de bits
P1OUT |= (BIT2+BIT0);
P1OUT X X X X X X X X
0x05 0 0 0 0 0 1 0 1
0+X=X
OR
1+X=1
P1OUT X X X X X 1 X 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.81
4. C – 4.1. Lenguaje C – 4.1.8. Manipulación de bits
─ Conmutar: [XOR]
P1OUT ^= (BIT2+BIT0);
P1OUT X X X X X X X X
0x05 0 0 0 0 0 1 0 1
0+X=X
XOR
1+X=X
P1OUT X X X X X X X X
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.82
4. C – 4.1. Lenguaje C – 4.1.8. Manipulación de bits
─ Comprobar: [AND]
P1OUT X X X X X X X X
0x04 0 0 0 0 0 1 0 0
0∙X=0
AND
1∙X=X
0 0 0 0 0 X 0 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.83
4. C – 4.2. Ejemplos
4.2. Ejemplos
─ Manipulación de bytes: acceso y modificación de los bytes que forman una
palabra
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.84
4. C – 4.2. Ejemplos – 4.2.1. Manipulación de bytes
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.85
4. C – 4.2. Ejemplos – 4.2.1. Manipulación de bytes – a) Punteros
a) Punteros
// Descomposición de una palabra en los bytes que la forman
NOTA: Este esquema es más eficiente al utilizar únicamente accesos a memoria, aunque es dependiente de la organización
de la memoria (“little endian” o “big endian”) que utilice el microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.86
4. C – 4.2. Ejemplos – 4.2.1. Manipulación de bytes – b) Desplazamientos
b) Desplazamientos
// Descomposición de una palabra en los bytes que la forman
NOTA: Este esquema es in dependiente de la organización de la memoria (“little endian” o “big endian”) que utilice el
microcontrolador, aunque es menos eficiente al utilizar operaciones de desplazamiento a nivel de bit
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.87
Índice
4.2. Ejemplos
4.2.1. Manipulación de bytes
a) Punteros
b) Desplazamientos
5. Entornos IDE
5.1. IAR
5.1.1. Estructura
a) Espacio de trabajo
b) Proyecto
5.1.2. Características
extendidas de C
a) Ficheros de cabecera
b) Manipulación de bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.88
5. Entornos IDE
5. Entornos IDE
─ El desarrollo de grandes aplicaciones en lenguaje ensamblador es altamente
complejo, por lo que suele ser imprescindible la utilización de un entorno de
desarrollo integrado o IDE (“Integrated Development Environment”) que
incorpore todas los herramientas necesarias para llevar a cabo de forma
centralizada el flujo de desarrollo software:
• Editor
• Ensamblador
• Compilador
• Enlazador
• Depurador
• Simulador
• Librerías
• Proyectos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.89
5. Entornos IDE
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.90
5. Entornos IDE – 5.1. IAR
5.1. IAR
─ El entorno de desarrollo IAR Embedded Workbench dispone de numerosas
facilidades para llevar a cabo la edición y depuración de cualquier aplicación:
• Estructura
• Características extendidas de C
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.91
5. Entornos IDE – 5.1. IAR – 5.1.1. Estructura
5.1.1. Estructura
─ El entorno de desarrollo IAR Embedded Workbench organiza las aplicaciones a
implementar en una estructura jerárquica:
• Espacios de trabajo
• Proyecto
Espacio de trabajo
Proyectos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.92
5. Entornos IDE – 5.1. IAR – 5.1.1. Estructura – a) Espacio de trabajo
a) Espacio de trabajo
─ Un espacio de trabajo (“Workspace”) constituye la entidad de mayor jerarquía,
y permite agrupar a todos aquellos proyectos relacionados entre sí en la
implementación de una determinada aplicación
Espacio de trabajo
Proyectos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.93
5. Entornos IDE – 5.1. IAR – 5.1.1. Estructura – b) Proyecto
b) Proyecto
─ Un proyecto (“Project”) constituye la entidad que permite agrupar a todos
aquellos módulos de código fuente que se realizan conjuntamente para
desarrollar un determinado programa, los cuales serán ensamblados/compilados
y enlazados conjuntamente para generar el código ejecutable
─ Cada proyecto tiene sus propias opciones de configuración, entra las cuales
se encuentra por ejemplo el microcontrolador para el que se desarrolla el código
Proyecto
Código fuente
Código fuente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.94
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.95
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C – a) Ficheros de cabecera
a) Ficheros de cabecera
─ El fichero de cabecera “io430g2533.h” incorpora todas las características del
fichero de cabecera “msp430g2533.h”(1), y adicionalmente define nuevas
estructuras de datos para operar más fácilmente con cada uno de los registros:
Fichero de cabecera
(1) En el código únicamente se puede incluir uno de estos ficheros de cabecera: “msp430g2533.h” o “io430g2533.h”
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.96
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C – a) Ficheros de cabecera
8 bits (1 byte)
Estructura P1OUT_bit de
campo de bits (“bitfields”) que P7 P6 P5 P4 P3 P2 P1 P0
permite acceder al contenido
de cada bit del registro P1OUT
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.97
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C – a) Ficheros de cabecera
P1OUT
P7 P6 P5 P4 P3 P2 P1 P0
1 byte = 8 bits
(1) Una unión es una agrupación de variables que comparten la misma zona de memoria, por lo que el acceso a la misma se
puede realizar mediante cualquiera de las variables que la forman. Las variables que comparten la zona de memoria se
conocen como miembros de la unión, y el tamaño de la zona de memoria ocupada por una unión es siempre igual al
tamaño del mayor de sus miembros
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.98
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C – a) Ficheros de cabecera
P1OUT
P7 P6 P5 P4 P3 P2 P1 P0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.99
5. Entornos IDE – 5.1. IAR – 5.1.2. Características extendidas de C – b) Manipulación de bits
b) Manipulación de bits
─ Con las nuevas estructuras de datos definidas en el fichero de cabecera
“io430g2533.h” el acceso a los registros a nivel de bit se simplifica
enormemente:
• Inicializar a ‘0’ : P1OUT_bit.P0 = P1OUT_bit.P2 = 0;
• Inicializar a ‘1’ : P1OUT_bit.P0 = P1OUT_bit.P2 = 1;
• Conmutar : P1OUT_bit.P0 = ~(P1OUT_bit.P0);
P1OUT_bit.P2 = ~(P1OUT_bit.P2);
• Comprobar : (P1OUT_bit.P2 == 0)
(P1OUT_bit.P2 != 0)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T3.100
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Ejercicios Tema 3:
Programación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.0
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.1
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.2
1. Enunciados – Ejercicio 1
Ejercicio 1:
─ Se representa a continuación el mapa de memoria del microcontrolador
MSP430G2533:
0xFFFF Vectores
Flash 64 B
0xFFC0 Interrupción
0xFFBF
Flash Código 16 KB
0xC000
NO UTILIZADA
0x10FF Información
Flash 256 B 64 KB
0x1000 Calibración
NO UTILIZADA
0x03FF
RAM Datos 512 B
0x0200
0x01FF
Periféricos 16 bits 256 B
0x0100
0x00FF
Periféricos 8 bits 240 B
0x0010
0x000F
Registros especiales 16 B
0x0000
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.3
1. Enunciados – Ejercicio 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.4
1. Enunciados – Ejercicio 2
Ejercicio 2:
─ Utilizando el fichero de cabecera “msp430g2533.h”, indicar el valor de las
siguientes constantes en binario, decimal y hexadecimal:
• BIT9+BIT3+BIT2+BIT0
• LPM3
• TASSEL_2+ID_3+MC_1+TAIE
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.5
1. Enunciados – Ejercicio 3
Ejercicio 3:
─ El Watchdog se deshabilita con la instrucción:
MOV.W #WDTPW+WDTHOLD,&WDTCTL
a) Utilizando el fichero de cabecera “msp430g2533.h”, indicar el valor de los
operandos de dicha instrucción en binario, decimal y hexadecimal
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.6
1. Enunciados – Ejercicio 4
Ejercicio 4:
─ Se dispone del siguiente código fuente en lenguaje ensamblador:
ORG 0x0200
var1 DC16 0
var2 DS16 0
var3 DC16 1
var4 DS16 1
var5 DC8 2
var6 DC16 3
a) Indicar el valor de todas las etiquetas del código
b) Indicar el valor de todas las variables del código
c) En el código fuente existe un error. Indicar cual es el error y proponer dos
formas distintas de solucionarlo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.7
1. Enunciados – Ejercicio 5
Ejercicio 5:
─ Se dispone del siguiente código fuente en lenguaje ensamblador:
ORG 0xC000
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.8
1. Enunciados – Ejercicio 6
Ejercicio 6:
─ Con la información contenida en el fichero de cabecera “io430g2533.h” indicar el
número de vector a especificar en la directiva #pragma vector = <N> para
cada una de las rutinas de tratamiento de interrupción disponibles en el
“MSP430G2533”
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.9
1. Enunciados – Ejercicio 7
Ejercicio 7:
─ Se dispone de una variable tipo byte denominada flags, y se quiere, con una
única instrucción, realizar las siguientes operaciones sobre ella:
• Inicializar a ‘0’ los bits 0 y 3
• Inicializar a ‘1’ los bits 1, 4 y 7
• Conmutar los bits 2 y 5
a) Indicar la instrucción a ejecutar para realizar las operaciones deseadas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.10
1. Enunciados – Ejercicio 8
Ejercicio 8:
─ Se dispone de un compilador con distintos niveles de optimización, el cual se
utiliza para compilar el siguiente código fuente en lenguaje C:
#include "io430g2533.h"
int main(void) {
… // P1IFG.BIT3 = 1
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.11
1. Enunciados – Ejercicio 8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.12
1. Enunciados – Ejercicio 8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.13
1. Enunciados – Ejercicio 9
Ejercicio 9:
─ Se desea crear una estructura de datos de tamaño palabra similar a la
estructura de datos extendida que define el fichero de cabecera “io430g2533.h”,
la cual utiliza uniones para permitir el acceso completo o a nivel de bits a los
distintos registros del mapa de memoria. Esta nueva estructura debe permitir:
• Acceder a la palabra
• Acceder a los bytes MSB y LSB de la palabra
• Acceder a los bits MSb y LSb de la palabra
• Acceder a los bits de la palabra
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.14
1. Enunciados – Ejercicio 9
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.15
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.16
2. Solución – Ejercicio 1
Ejercicio 1:
a) Indicar cuales son los registros especiales del microcontrolador y sus
correspondientes direcciones en el mapa de memoria
b) Indicar cuales son las direcciones en el mapa de memoria de los registros
de configuración de 8 bits de los periféricos del microcontrolador
c) Indicar cuales son las direcciones en el mapa de memoria de los registros
de configuración de 16 bits de los periféricos del microcontrolador
IE1 0x0000
IE2 0x0001
IFG1 0x0002
IFG2 0x0003
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.17
2. Solución – Ejercicio 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.18
2. Solución – Ejercicio 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.19
2. Solución – Ejercicio 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.20
2. Solución – Ejercicio 2
Ejercicio 2:
• BIT9+BIT3+BIT2+BIT0
0000001000001101 525 0x020D
• LPM3
0000000011010000 208 0x00D0
• TASSEL_2+ID_3+MC_1+TAIE
0000001011010010 722 0x02D2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.21
2. Solución – Ejercicio 3
Ejercicio 3:
• MOV.W #WDTPW+WDTHOLD,&WDTCTL
MOV.W #0101101010000000,&0000000100100000
MOV.W #23168,&288
MOV.W #0x5A80,&0x0120
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.22
2. Solución – Ejercicio 4
Ejercicio 4:
a) Indicar el valor de todas las etiquetas del código
b) Indicar el valor de todas las variables del código
c) En el código fuente existe un error. Indicar cual es el error y proponer dos
formas distintas de solucionarlo
var1 0x0200
var2 0x0202
var3 0x0202
var4 0x0204
var5 0x0206
var6 0x0207
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.23
2. Solución – Ejercicio 4
var1 0x0000
var2 0x0001
var3 0x0001
var4 0x????
var5 0x02
var6 0x0302
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.24
2. Solución – Ejercicio 4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.25
2. Solución – Ejercicio 5
Ejercicio 5:
a) Indicar el valor de todas las etiquetas del código
b) Indicar el valor final del registro R10
c) Indicar la instrucción que ejecutará el microcontrolador después de:
SUB.W #5,R10
Main 0xC000
Label1 0xC006
Label2 0xC00A
Label3 0xC00E
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.26
2. Solución – Ejercicio 5
R10 95
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.27
2. Solución – Ejercicio 5
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.28
2. Solución – Ejercicio 6
Ejercicio 6:
RESET_VECTOR 30 = 0x1E
NMI_VECTOR 28 = 0x1C
TIMER1_A0_VECTOR 26 = 0x1A
TIMER1_A1_VECTOR 24 = 0x18
WDT_VECTOR 20 = 0x14
TIMER0_A0_VECTOR 18 = 0x12
TIMER0_A1_VECTOR 16 = 0x10
USCIAB0RX_VECTOR 14 = 0x0E
USCIAB0TX_VECTOR 12 = 0x0C
ADC10_VECTOR 10 = 0x0A
PORT2_VECTOR 06 = 0x06
PORT1_VECTOR 04 = 0x04
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.29
2. Solución – Ejercicio 7
Ejercicio 7:
a) Indicar la instrucción a ejecutar para realizar las operaciones deseadas
flags=(((flags&~(BIT3+BIT0))|(BIT7+BIT4+BIT1))^(BIT5+BIT2));
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.30
2. Solución – Ejercicio 8
Ejercicio 8:
─ Sin utilizar ningún nivel de optimización del compilador:
a) Indicar si el código fuente en lenguaje ensamblador tiene la misma
funcionalidad que el código fuente en lenguaje C
b) En caso de no tener la misma funcionalidad, indicar la causa de tal
circunstancia
c) En caso de no tener la misma funcionalidad, indicar una posible solución
para tal circunstancia
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.31
2. Solución – Ejercicio 8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.32
2. Solución – Ejercicio 8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.33
2. Solución – Ejercicio 8
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.34
2. Solución – Ejercicio 9
Ejercicio 9:
a) Definir la estructura y crear una variable flags con dicha estructura
b) Realizar las siguientes operaciones e indicar el valor de la variable flags:
union {
unsigned int word;
struct {
unsigned char LSB;
unsigned char MSB;
};
struct {
unsigned int LSb :1;
unsigned int unused_1 :14;
unsigned int MSb :1;
};
struct {
unsigned int B0 :1;
unsigned int B1 :1;
unsigned int B2 :1;
unsigned int B3 :1;
unsigned int B4 :1;
unsigned int B5 :1;
unsigned int B6 :1;
unsigned int B7 :1;
unsigned int B8 :1;
unsigned int B9 :1;
unsigned int B10 :1;
unsigned int B11 :1;
unsigned int B12 :1;
unsigned int B13 :1;
unsigned int B14 :1;
unsigned int B15 :1;
};
} flags;
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.35
2. Solución – Ejercicio 9
flags 0xABCD
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET3.36
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Tema 4:
Hardware básico
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.0
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.1
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.2
1. Introducción
1. Introducción
─ Los microcontroladores de la familia MSP430 disponen de diversos recursos
básicos para poder operar adecuadamente:
• Reset: determina el estado inicial del microcontrolador
• Interrupciones: sistema de gestión de eventos que requieren la
intervención inmediata de la CPU
• Módulo de reloj: esquema de generación de las distintas señales del reloj
que gestionan la operación del microcontrolador
• Bajo consumo: establecimiento del conjunto de relojes activos para permitir
la desactivación selectiva de los recursos no utilizados y reducir el consumo
del microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.3
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.4
2. Reset
2. Reset
─ Permite introducir al microcontrolador en un estado inicial conocido
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.5
2. Reset – 2.1. Tipos de reset
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.6
2. Reset – 2.1. Tipos de reset – 2.1.1. POR (Power-On Reset)
(1) Útil para conectar un pulsador en el pin RST/NMI que permita realizar un reset del microcontrolador
(2) La funcionalidad del pin RST/NMI se configura en el bit WDTNMI del registro WDTCTL
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.7
2. Reset – 2.1. Tipos de reset – 2.1.2. PUC (Power-Up Clear)
(1) Una clave de seguridad es un valor determinado que hay que introducir en ciertos bits de un registro para poder operar
con el periférico asociado a dicho registro. Sirve para evitar efectos indeseados al escribir accidentalmente en registros
que controlan periféricos críticos del microcontrolador
(2) En este rango de direcciones se encuentran los registros especiales de la CPU y los registros de configuración de los
periféricos de 8 y 16 bits
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.8
2. Reset – 2.1. Tipos de reset – 2.2. Estado del microcontrolador
(1) Normalmente los flags de interrupción de los registros se suelen inicializar a ‘0’, por lo que se anulan las posibles
interrupciones que quedasen pendientes de ser atendidas
(2) La única diferencia en el estado del microcontrolador tras un reset POR y un reset PUC se encuentra en el valor por
defecto al que se inicializan los distintos registros
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.10
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.11
3. Interrupciones
3. Interrupciones
─ Permiten detectar la ocurrencia de distintos eventos asíncronos respecto a la
ejecución del programa, los cuales requieren un procesamiento rápido e
inmediato por parte de la CPU
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.12
3. Interrupciones
Memoria
Sondeo
CPU
Periféricos Evento
E/S
Buses
Acción
Mundo
Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.13
3. Interrupciones
Memoria
Interrupción
CPU
Periféricos Evento
E/S
Buses
Acción
Mundo
Exterior
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.14
3. Interrupciones
─ Características:
• Interrupción: mecanismo disponible en el microcontrolador para detectar y
atender distintos eventos
• Origen: a los eventos asociados a una interrupción se les denomina
fuentes(1) de la interrupción
• Eventos: se pueden detectar los siguientes tipos de eventos:
- Internos: generados por los propios recursos del microcontrolador
(watchdog, temporizadores, fallo en los osciladores externos, cortes en
la alimentación…)
- Externos: generados por acciones determinadas sobre los periféricos
E/S (cambios en los pines de los puertos E/S, datos recibidos por los
periféricos de comunicaciones, generación de un reset externo…)
(1) Una interrupción puede tener una o varias fuentes (eventos) asociadas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.15
3. Interrupciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.17
3. Interrupciones – 3.1. Tipos de interrupciones – 3.1.1. Reset
3.1.1. Reset
─ Interrupciones asociadas al reset del sistema, las cuales pueden ser generadas
por las siguientes fuentes:
• Encendido del dispositivo
POR
• Un nivel bajo en el pin RST/NMI cuando está configurado en modo reset
• Expiración del tiempo del watchdog
• Violación de la clave de seguridad del watchdog
PUC
• Violación de la clave de seguridad de la flash
• Intento de ejecución de alguna instrucción cuya dirección se encuentre en el
rango 0x0000 – 0x01FF o en una zona no utilizada del mapa de memoria
─ No se pueden deshabilitar
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.18
3. Interrupciones – 3.1. Tipos de interrupciones – 3.1.2. (No) enmascarables
(1) El flanco activo del pin RST/NMI se configura en el bit WDTNMIES del registro WDTCTL
(2) Se produce una violación de acceso a la flash cuando se intenta acceder a la misma mientras se está programando
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.19
3. Interrupciones – 3.1. Tipos de interrupciones – 3.1.3. Enmascarables
3.1.3. Enmascarables
─ Interrupciones asociadas a los periféricos E/S(1)
─ Se pueden deshabilitar mediante el bit de habilitación general GIE del registro
de estado SR o mediante los bits de habilitación específicos de los registros de
configuración de cada periférico
3.2. Procesamiento
─ Al generarse una interrupción se detiene la ejecución del programa en curso y
se ejecuta una rutina de código asociada a la interrupción conocida como RTI
(Rutina de Tratamiento de Interrupción) o ISR (Interrupt Service Routine)
─ Tras finalizar la ejecución de la RTI(1) el programa continúa su ejecución
Interrupción
RTI
Programa
(1) En tal caso debe ser el programador el responsable de comprobar cuál es la fuente de la interrupción e inicializar el flag
de interrupción correspondiente a la misma a ‘0’
(2) Este comportamiento implica que una interrupción no puede ser interrumpida por otra durante su ejecución. Si se desea
alterar este comportamiento y permitir interrupciones anidadas hay que habilitar el bit GIE del registro SR en la propia
RTI, por lo que cualquier nueva interrupción que se genere interrumpirá la RTI que se esté ejecutando
(independientemente de las prioridades de ambas interrupciones)
(3) El vector de interrupción es un puntero que indica la dirección donde comienza la RTI
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.23
3. Interrupciones – 3.2. Procesamiento – 3.2.2. Retorno de la interrupción
0xFFFF Vectores
Flash 64 B
0xFFC0 Interrupción
0xFFBF
Flash Código 16 KB
0xC000
NO UTILIZADA
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.25
3. Interrupciones – 3.3. Vectores de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.26
3. Interrupciones – 3.3. Vectores de interrupción
Fuentes de
interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.27
3. Interrupciones – 3.3. Vectores de interrupción
Flags de
interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.28
3. Interrupciones – 3.3. Vectores de interrupción
Tipo de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.29
3. Interrupciones – 3.3. Vectores de interrupción
Posición en la tabla
de vectores de
interrupción
(dirección de
memoria) donde se
debe almacenar la
dirección de
comienzo de la RTI
asociada a cada
interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.30
3. Interrupciones – 3.3. Vectores de interrupción
Prioridad de cada
interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.31
3. Interrupciones – 3.3. Vectores de interrupción
Interrupción con
múltiples fuentes
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.32
3. Interrupciones – 3.3. Vectores de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.33
3. Interrupciones – 3.4. Esquema completo
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.34
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.35
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.36
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.37
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.38
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
PC 0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.39
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.40
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.41
3. Interrupciones – 3.4. Esquema completo
1. Finaliza la ejecución de la instrucción actual si la CPU se encuentra activa, o se activa la CPU si se encuentra en bajo consumo
2. El contador de programa PC (que apunta a la siguiente instrucción a ejecutar) se almacena en la pila
3. El registro de estado SR se almacena en la pila
4. Si existen múltiples interrupciones pendientes se escoge la de mayor prioridad
5. Si la interrupción tiene una única fuente se inicializa a ‘0’ el flag de interrupción asociado a la misma, y si tiene múltiples fuentes no se
modifica ninguno de los flags de interrupción asociados a las mismas
6. Se inicializa a ‘0’ el registro de estado SR, activando la CPU si estaba en bajo consumo y deshabilitando las interrupciones enmascarables
7. El contenido del vector de interrupción asociado a la misma se carga en el contador de programa PC, comenzando la ejecución de la RTI
8. Finaliza la ejecución de la RTI
9. Se restaura el registro de estado SR con el almacenado en la pila
10. Se restaura el contador de programa PC con el almacenado en la pila (que apunta a la siguiente instrucción a ejecutar), continuando la
ejecución del código
0xFFFE 0xC000
0xC06A CLR.W R4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.42
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.43
4. Módulo de reloj
4. Módulo de reloj
─ Proporciona las distintas señales de reloj necesarias para permitir la operación
del microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.44
4. Módulo de reloj
─ Características:
• Fuentes de reloj: admite distintas fuentes de reloj tanto internas como
externas para generar las señales de reloj del sistema
• Señales de reloj: a partir de las fuentes de reloj genera distintas señales de
reloj para controlar la CPU y los periféricos E/S independientemente
• Compromiso: existe un claro compromiso entre rendimiento y consumo en
función de la frecuencia de las señales de reloj utilizadas en el sistema:
- Rendimiento: cuanto mayor sea la frecuencia de las señales de reloj
mayor es la capacidad de proceso del sistema y menor es el tiempo de
respuesta para la detección y atención de eventos
- Consumo: cuanto menor sea la frecuencia de las señales de reloj
menor es el consumo del sistema al realizar un menor número de
operaciones por segundo
• Optimización: disponer de distintas señales de reloj permite al programador
seleccionar las más adecuadas para obtener un balance óptimo entre
rendimiento y consumo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.45
4. Módulo de reloj – 4.1. Estructura
4.1. Estructura
MSP430x2xx MSP430G2533
No soportado por el
MSP430G2533
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.46
4. Módulo de reloj – 4.2. Fuentes de reloj
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.47
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.1. VLOCLK
4.2.1. VLOCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.48
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.1. VLOCLK
(1) Las fuentes de reloj VLOCLK y LFXT1CLK son complementarias, por lo que sólo se puede utilizar una de ellas. Cuando
se selecciona una de ellas, la otra se desactiva automáticamente para reducir el consumo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.49
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.2. LFXT1CLK
4.2.2. LFXT1CLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.50
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.2. LFXT1CLK
(1) Las fuentes de reloj VLOCLK y LFXT1CLK son complementarias, por lo que sólo se puede utilizar una de ellas. Cuando
se selecciona una de ellas, la otra se desactiva automáticamente para reducir el consumo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.51
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.2. LFXT1CLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.53
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
4.2.3. DCOCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.54
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
─ Frecuencia: su frecuencia se controla con los bits DCOx y MODx del registro
DCOCTL y con los bits RSELx del registro BCSCTL1(1)
(1) Tras un reset (PUC): DCOx = 0x03 ; MODx = 0x00 ; RSELx = 0x07 fDCO ~ 1.1 MHz
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.55
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
MSP430G2533
PUC
Δ = 35%
Δ = 8%
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.56
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
MSP430G2533
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.57
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.58
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.59
4. Módulo de reloj – 4.2. Fuentes de reloj – 4.2.3. DCOCLK
─ Desactivación: se desactiva con el bit SCG0 del registro de estado SR, siempre
que no se utilice para generar las señales de reloj MCLK o SMCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.60
4. Módulo de reloj – 4.3. Señales de reloj
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.61
4. Módulo de reloj – 4.3. Señales de reloj – 4.3.1. ACLK
4.3.1. ACLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.62
4. Módulo de reloj – 4.3. Señales de reloj – 4.3.2. MCLK
4.3.2. MCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.63
4. Módulo de reloj – 4.3. Señales de reloj – 4.3.3. SMCLK
4.3.3. SMCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.64
4. Módulo de reloj – 4.4. Registros de configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.65
4. Módulo de reloj – 4.4. Registros de configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.66
4. Módulo de reloj – 4.4. Registros de configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.67
4. Módulo de reloj – 4.4. Registros de configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.68
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.69
5. Bajo consumo
5. Bajo consumo
─ En el diseño de sistemas basados en microcontroladores existe un claro
compromiso entre rendimiento y consumo:
• Rendimiento: relacionado con la capacidad de proceso del sistema y con el
tiempo de respuesta para la detección y gestión de eventos interesan
altas frecuencias de operación
• Consumo: relacionado con la duración de la(s) batería(s) en sistemas
portables interesan bajas frecuencias de operación
─ Disponer de distintas señales de reloj (ACLK, MCLK y SMCLK) permite:
• Seleccionar para cada recurso del microcontrolador (CPU y periféricos E/S)
la señal de reloj más idónea para obtener un balance óptimo entre
rendimiento y consumo en función de la frecuencia de operación
• Deshabilitar selectivamente las señales de reloj que controlan aquellos
recursos del microcontrolador (CPU y periféricos E/S) que no se utilizan(1)
para reducir el consumo
(1) Deshabilitar señales de reloj implica desactivar aquellos recursos que las utilizan
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.70
5. Bajo consumo – 5.1. Modos de operación
Menor consumo
• Modo de bajo consumo LPM0 (“Low Power Mode 0”)
• Modo de bajo consumo LPM1 (“Low Power Mode 1”)
• Modo de bajo consumo LPM2 (“Low Power Mode 2”)
• Modo de bajo consumo LPM3 (“Low Power Mode 3”)
• Modo de bajo consumo LPM4 (“Low Power Mode 4”)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.71
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.72
5. Bajo consumo – 5.1. Modos de operación
─ El modo activo mantiene todas las señales de reloj habilitadas, por lo que
permanecen activos todos los recursos necesarios del microcontrolador:
Menor tiempo de respuesta al permanecer activos todos los recursos
necesarios
Mayor consumo
─ Los modos de bajo consumo deshabilitan selectivamente ciertas señales de
reloj, por lo que permanecen desactivados los recursos del microcontrolador que
dependen de las mismas:
Menor consumo
Mayor tiempo de respuesta al tener que activar los recursos necesarios(1)
(1) Activar recursos del microcontrolador implica habilitar las señales de reloj que los controlan, proceso que requiere cierto
tiempo en función de las señales de reloj que haya que habilitar
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.73
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.74
5. Bajo consumo – 5.1. Modos de operación
─ Los modos de operación se controlan con los bits SCG1, SCG0, OSCOFF y
CPUOFF del registro de estado SR:
Señal
Fuente
Fuente
Señal
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.75
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.76
5. Bajo consumo – 5.1. Modos de operación
─ Modo activo AM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.77
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.78
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.79
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.80
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.81
5. Bajo consumo – 5.1. Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.82
5. Bajo consumo – 5.2. Cambio del modo de operación
¡CUIDADO!
NOTA: Las constantes SCG0, SCG1, OSCOFF, CPUOFF, LPM0, LPM1, LPM2, LPM3 y LPM4 se encuentran definidas en
el fichero de cabecera “msp430g2533.h”
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.83
5. Bajo consumo – 5.2. Cambio del modo de operación
─ Para salir de un modo de bajo consumo desde una RTI hay que modificar los
bits correspondientes del registro de estado SR que será restaurado tras finalizar
la RTI, el cual se encuentra almacenado en la parte superior de la pila:
• LPM0: BIC.W #CPUOFF,0(SP)
BIC.W #LPM0,0(SP)
• LPM1: BIC.W #SCG0+CPUOFF,0(SP)
BIC.W #LPM1,0(SP)
• LPM2: BIC.W #SCG1+CPUOFF,0(SP)
Ensamblador
BIC.W #LPM2,0(SP)
• LPM3: BIC.W #SCG1+SCG0+CPUOFF,0(SP)
BIC.W #LPM3,0(SP)
• LPM4: BIC.W #SCG1+SCG0+OSCOFF+CPUOFF,0(SP)
BIC.W #LPM4,0(SP)
• LPMn: _low_power_mode_off_on_exit() C
NOTA: Las constantes SCG0, SCG1, OSCOFF, CPUOFF, LPM0, LPM1, LPM2, LPM3 y LPM4 se encuentran definidas en
el fichero de cabecera “msp430g2533.h”
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T4.84
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Ejercicios Tema 4:
Hardware básico
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.0
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.1
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.2
1. Enunciados – Ejercicio 1
Ejercicio 1:
─ Se representan a continuación los registros especiales del microcontrolador
MSP430G2533:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.3
1. Enunciados – Ejercicio 2
Ejercicio 2:
─ Se dispone del siguiente código para el MSP430G2533:
• Programa principal: 0xC000
0xC00A MOV.B #0x02,R10
• RTI 1: Timer1_A3 TACCR0 CCIFG
0xC00C RLA.B R10
…
• RTI 3: ADC10 ADC10IFG 0xC10A RRA.B R10
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.4
1. Enunciados – Ejercicio 2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.5
1. Enunciados – Ejercicio 3
Ejercicio 3:
─ Se dispone del siguiente código para el MSP430G2533:
• Programa principal: 0xC000
• RTI 1: I/O Port P1 P1IFG.0
• RTI 2: I/O Port P2 P2IFG.0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.6
1. Enunciados – Ejercicio 3
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.7
1. Enunciados – Ejercicio 4
Ejercicio 4:
─ Indicar la frecuencia de las fuentes de reloj y de las señales de reloj por defecto
del microcontrolador MSP430G2533 de la placa LaunchPad al encender el
dispositivo, suponiendo que no se ha integrado el cristal de cuarzo de 32768 Hz
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.8
1. Enunciados – Ejercicio 5
Ejercicio 5:
─ Se pretende utilizar el microcontrolador MSP430G2533 para implementar un
reloj digital, empleando para ello la frecuencia calibrada del DCO de valor 1 MHz:
a) Indicar los valores a introducir en los registros de configuración del módulo
de reloj para obtener dicha frecuencia
b) Indicar el error máximo que podría acumular a lo largo de un día el reloj
digital, debido a la tolerancia de la frecuencia calibrada del DCO
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.9
1. Enunciados – Ejercicio 6
Ejercicio 6:
─ Se dispone del siguiente código para el MSP430G2533:
a) Indicar la instrucción ubicada en la posición 0xC00E para entrar en el
modo de bajo consumo LPM3
b) Indicar la instrucción ubicada en la posición 0xC10C para salir del modo de
bajo consumo LPM3 y entrar en el modo activo AM al finalizar la
interrupción
c) Indicar la instrucción ubicada en la posición 0xC10C para salir del modo de
bajo consumo LPM3 y entrar en el modo de bajo consumo LPM2 al
finalizar la interrupción
0xC00E ?
0xC10C ? RTI
0xC112 RETI
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.10
1. Enunciados – Ejercicio 7
Ejercicio 7:
─ Los modos de operación del MSP430G2533 se controlan con los bits SCG1,
SCG0, OSCOFF y CPUOFF del registro de estado SR. Aunque existen 6 modos
de operación, estos 4 bits permiten implementar 16 combinaciones distintas:
a) Realizar una tabla indicando para cada una de estas 16 combinaciones las
fuentes de reloj y las señales de reloj habilitadas/deshabilitadas,
considerando que la señal de reloj ACLK se genera a partir de la fuente de
reloj VLOCLK/LFXT1CLK, y las señales de reloj MCLK y SMCLK se
generan a partir de la fuente de reloj DCOCLK
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.11
1. Enunciados – Ejercicio 8
Ejercicio 8:
─ La placa LaunchPad dispone del pulsador S1 conectado al terminal RST/NMI
(pulsador reset del microcontrolador) y del pulsador S2 conectado al pin P1.3
(pulsador genérico):
a) Indicar las modificaciones a realizar para configurar el pulsador S1 como
un pulsador genérico
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.12
1. Enunciados – Ejercicio 9
Ejercicio 9:
─ Se dispone del siguiente código para el MSP430G2533:
• Programa principal: 0xC000
• RTI 1: I/O Port P1 P1IFG.0
• RTI 2: I/O Port P2 P2IFG.0
0xC00A CLR.B R10
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.13
1. Enunciados – Ejercicio 9
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.14
1. Enunciados – Ejercicio 10
Ejercicio 10:
─ Indicar 2 combinaciones distintas de valores para los bits DCOx y MODx del
registro DCOCTL y para los bits RSELx del registro BCSCTL1 de forma que el
DCO del MSP430G2533 se configure a una frecuencia aproximada de 2 MHz
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.15
1. Enunciados – Ejercicio 11
Ejercicio 11:
─ Se pretende utilizar un microcontrolador de la familia MSP430 para implementar
un reloj digital, empleando para ello la frecuencia calibrada del DCO de 1 MHz y
una pila de botón CR 2032 con tensión de 3 V y capacidad de 220 mAh:
a) Indicar de forma aproximada la duración de la pila si el microcontrolador se
encuentra siempre en el modo activo AM
b) Indicar de forma aproximada la duración de la pila si el microcontrolador se
encuentra el 99% del tiempo en el modo de bajo consumo LPM3 y el 1%
del tiempo en el modo activo AM
NOTA: El icono indica que este ejercicio es avanzado, por lo que requiere un estudio más profundo de la documentación
para adquirir conocimientos no descritos en clase
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.16
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.17
2. Solución – Ejercicio 1
Ejercicio 1:
a) Indicar el valor al que se inicializan dichos registros al encender el
dispositivo
b) Tras la ejecución del código, el valor de los registros es:
• IE1 0x12 – IE2 0x01 – IFG1 0x05 – IFG2 0x0E
Indicar el valor al que se inicializan dichos registros al expirar el tiempo del
watchdog
IE1 0x00
IE2 0x00
IFG1 0x06
IFG2 0x0A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.18
2. Solución – Ejercicio 1
IE1 0x00
IE2 0x00
IFG1 0x07
IFG2 0x0A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.19
2. Solución – Ejercicio 2
Ejercicio 2:
a) Inicializar los valores almacenados en la tabla de vectores de interrupción
b) Indicar el valor final del registro R10, suponiendo que se produce la
siguiente secuencia:
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC00C se genera la interrupción correspondiente al Watchdog Timer+
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC20A se generan las interrupciones correspondientes al Timer1_A3 y
al ADC10 simultáneamente
0xFFFE 0xC000
0xFFFA 0xC10A
…
Vectores
0xFFF4 0xC20A
Interrupción
…
0xFFEA 0xC30A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.20
2. Solución – Ejercicio 2
R10 0x08
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.21
2. Solución – Ejercicio 3
Ejercicio 3:
a) Indicar el valor final del registro R10, suponiendo que se produce la
siguiente secuencia:
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC00C se genera la interrupción correspondiente al I/O Port P2
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC20A se genera la interrupción correspondiente al I/O Port P1
R10 0x04
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.22
2. Solución – Ejercicio 4
Ejercicio 4:
DCOCTL 0x60
VLOCLK ~ 12 KHz ACLK Sin señal
BCSCTL1 0x87
LFXT1CLK Sin señal MCLK ~ 1.1 MHz
BCSCTL2 0x00
DCOCLK ~ 1.1 MHz SMCLK ~ 1.1 MHz
BCSCTL3 0x05
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.23
2. Solución – Ejercicio 5
Ejercicio 5:
a) Indicar los valores a introducir en los registros de configuración del módulo
de reloj para obtener dicha frecuencia
b) Indicar el error máximo que podría acumular a lo largo de un día el reloj
digital, debido a la tolerancia de la frecuencia calibrada del DCO
DCOCTL CALDCO_1MHz
BCSCTL1 CALBC1_1MHz
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.24
2. Solución – Ejercicio 5
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.25
2. Solución – Ejercicio 6
Ejercicio 6:
a) Indicar la instrucción ubicada en la posición 0xC00E para entrar en el
modo de bajo consumo LPM3
b) Indicar la instrucción ubicada en la posición 0xC10C para salir del modo de
bajo consumo LPM3 y entrar en el modo activo AM al finalizar la
interrupción
c) Indicar la instrucción ubicada en la posición 0xC10C para salir del modo de
bajo consumo LPM3 y entrar en el modo de bajo consumo LPM2 al
finalizar la interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.26
2. Solución – Ejercicio 6
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.27
2. Solución – Ejercicio 6
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.28
2. Solución – Ejercicio 7
Ejercicio 7:
a) Realizar una tabla indicando para cada una de estas 16 combinaciones las
fuentes de reloj y las señales de reloj habilitadas/deshabilitadas,
considerando que la señal de reloj ACLK se genera a partir de la fuente de
reloj VLOCLK/LFXT1CLK, y las señales de reloj MCLK y SMCLK se
generan a partir de la fuente de reloj DCOCLK
VLOCLK
SCG1 SCG0 OSCOFF CPUOFF DCOCLK ACLK MCLK SMCLK
LFXT1CLK
0 0 0 0 AM
0 0 0 1 LPM0
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1 LPM1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1 LPM2
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1 LPM3
1 1 1 0
1 1 1 1 LPM4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.29
2. Solución – Ejercicio 8
Ejercicio 8:
a) Indicar las modificaciones a realizar para configurar el pulsador S1 como
un pulsador genérico
MOV.W #WDTPW+WDTHOLD+WDTNMI+WDTNMIES,&WDTCTL
0xFFFC Comienzo RTI interrupción NMI (pulsador S1)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.30
2. Solución – Ejercicio 9
Ejercicio 9:
a) Indicar el valor final del registro R10, suponiendo que se produce la
siguiente secuencia:
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC00C se genera la interrupción correspondiente al I/O Port P2
- Mientras se está ejecutando la instrucción ubicada en la posición
0xC20A se genera la interrupción correspondiente al I/O Port P1
R10 0x01
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.31
2. Solución – Ejercicio 10
Ejercicio 10:
DCOx 5
MODx 29
RSELx 8
DCOx 1
MODx 6
RSELx 9
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.32
2. Solución – Ejercicio 11
Ejercicio 11:
a) Indicar de forma aproximada la duración de la pila si el microcontrolador se
encuentra siempre en el modo activo AM
b) Indicar de forma aproximada la duración de la pila si el microcontrolador se
encuentra el 99% del tiempo en el modo de bajo consumo LPM3 y el 1%
del tiempo en el modo activo AM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.33
2. Solución – Ejercicio 11
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET4.34
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Tema 5:
Puertos E/S
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.0
Índice
1. Introducción
2. Operación
2.1. Entrada y salida digital
2.2. Resistencias de pullup y
pulldown
2.3. Oscilación
2.4. Interrupciones
2.4.1. Habilitación de
interrupciones
2.4.2. Flags de interrupción
2.5. Funcionalidad
3. Configuración
4. Ejemplos
4.1. Pulsador
4.2. LED
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.1
Índice
1. Introducción
2. Operación
2.1. Entrada y salida digital
2.2. Resistencias de pullup y
pulldown
2.3. Oscilación
2.4. Interrupciones
2.4.1. Habilitación de
interrupciones
2.4.2. Flags de interrupción
2.5. Funcionalidad
3. Configuración
4. Ejemplos
4.1. Pulsador
4.2. LED
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.2
1. Introducción
1. Introducción
MSP430G2533 (encapsulado de 20 pines):
Puertos E/S
NOTA: El puerto E/S P3 sólo está disponible para los encapsulados de 28 y 32 pines
NOTA: En la placa LaunchPad se utiliza el encapsulado de 20 pines
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.3
1. Introducción
1-0 1 0
0-1 0 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.4
Índice
1. Introducción
2. Operación
2.1. Entrada y salida digital
2.2. Resistencias de pullup y
pulldown
2.3. Oscilación
2.4. Interrupciones
2.4.1. Habilitación de
interrupciones
2.4.2. Flags de interrupción
2.5. Funcionalidad
3. Configuración
4. Ejemplos
4.1. Pulsador
4.2. LED
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.5
2. Operación
2. Operación
─ Características:
• Existen 2 puertos E/S (P1 y P2) con 8 pines cada uno
• Cada pin de los puertos E/S se puede configurar como entrada o salida
independientemente de la configuración de los demás pines
• Cada pin de los puertos E/S dispone de resistencias de pullup y pulldown
que se pueden habilitar/deshabilitar independientemente de la configuración
de los demás pines
• Cada pin de los puertos E/S posee la capacidad de producir oscilaciones(1)
sin necesidad de elementos externos independientemente de la
configuración de los demás pines
• Cada pin de los puertos E/S P1 y P2 puede generar interrupciones al
detectar cambios de nivel en la señal digital externa
• Cada pin de los puertos E/S es utilizado por otros periféricos, por lo que
además de la funcionalidad de entrada y salida digital poseen otras
funcionalidades, siendo necesario seleccionar la funcionalidad concreta
que se le quiere asignar a cada pin
(1) Útil para conexión de sensores capacitivos (como por ejemplo sensores táctiles)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.6
2. Operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.7
2. Operación – 2.1. Entrada y salida digital
P1DIR P7 P6 P5 P4 P3 P2 P1 P0
P2DIR P7 P6 P5 P4 P3 P2 P1 P0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.8
2. Operación – 2.1. Entrada y salida digital
─ El valor que poseen las señales digitales conectadas a los pines de los
puertos E/S P1 y P2 configurados como entrada se puede comprobar mediante
los bits de los registros P1IN y P2IN respectivamente:
• Bit Px = 0 Valor ‘0’ en la señal digital conectada al pin Px
• Bit Px = 1 Valor ‘1’ en la señal digital conectada al pin Px
P1IN P7 P6 P5 P4 P3 P2 P1 P0
P2IN P7 P6 P5 P4 P3 P2 P1 P0
NOTA: Los registros P1IN y P2IN son de sólo lectura, por lo que cualquier escritura en los mismos es ignorada y sólo
produce un aumento en el consumo de corriente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.9
2. Operación – 2.1. Entrada y salida digital
─ El valor de las señales digitales generadas en los pines de los puertos E/S P1
y P2 configurados como salida se establece mediante los bits de los registros
P1OUT y P2OUT respectivamente:
• Bit Px = 0 Valor ‘0’ en la señal digital generada en el pin Px
• Bit Px = 1 Valor ‘1’ en la señal digital generada en el pin Px
P1OUT P7 P6 P5 P4 P3 P2 P1 P0
P2OUT P7 P6 P5 P4 P3 P2 P1 P0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.10
2. Operación – 2.1. Entrada y salida digital
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.11
2. Operación – 2.1. Entrada y salida digital
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.12
2. Operación – 2.1. Entrada y salida digital
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.13
2. Operación – 2.1. Entrada y salida digital
PxIN.y
Vhys
‘1’
‘0’
VIT- VIT+
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.14
2. Operación – 2.1. Entrada y salida digital
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.15
2. Operación – 2.1. Entrada y salida digital
MUY IMPORTANTE
MUY IMPORTANTE
NOTA: La corriente máxima que puede suministrar (IOHmax) o absorber (IOLmax) cada pin es de 6 mA
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.16
2. Operación – 2.2. Resistencias de pullup y pulldown
Habilitación de la resistencia
del pin 3 del puerto E/S P1
P1REN P7 P6 P5 P4 P3 P2 P1 P0
P2REN P7 P6 P5 P4 P3 P2 P1 P0
Habilitación de la resistencia
del pin 1 del puerto E/S P2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.17
2. Operación – 2.2. Resistencias de pullup y pulldown
Configuración de la resistencia
del pin 3 del puerto E/S P1
P1OUT P7 P6 P5 P4 P3 P2 P1 P0
P2OUT P7 P6 P5 P4 P3 P2 P1 P0
Configuración de la resistencia
del pin 1 del puerto E/S P2
NOTA: La habilitación de las resistencias de pullup y pulldown tiene sentido cuando el pin está configurado como entrada
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.18
2. Operación – 2.2. Resistencias de pullup y pulldown
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.19
2. Operación – 2.2. Resistencias de pullup y pulldown
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.20
2. Operación – 2.2. Resistencias de pullup y pulldown
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.21
2. Operación – 2.2. Resistencias de pullup y pulldown
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.22
2. Operación – 2.3. Oscilación
2.3. Oscilación
─ Cada pin de los puertos E/S P1 y P2 posee la capacidad de producir
oscilaciones cuya frecuencia depende de la capacidad de carga del pin
─ Las oscilaciones que se generan en un pin se pueden utilizar internamente
como señal de reloj de determinados temporizadores, lo que permite realizar
medidas de la frecuencia generada y con ello de la capacidad de carga del pin
─ Esta funcionalidad es especialmente útil para realizar medidas sobre sensores
capacitivos (como pueden ser sensores táctiles)
NOTA: Para seleccionar en un pin la funcionalidad de oscilación se deben modificar los registros P1SEL, P1SEL2 o P2SEL,
P2SEL2
NOTA: Al seleccionar en un pin la funcionalidad de oscilación se deshabilitan automáticamente el resto de funcionalidades
en dicho pin
NOTA: No se puede habilitar la funcionalidad de oscilación en más de un pin del dispositivo simultáneamente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.23
2. Operación – 2.3. Oscilación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.24
2. Operación – 2.3. Oscilación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.25
2. Operación – 2.3. Oscilación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.26
2. Operación – 2.4. Interrupciones
2.4. Interrupciones
─ Características:
• Sólo los pines de los puertos E/S P1 y P2 pueden generar interrupciones
• Se generan interrupciones al detectar cambios de nivel en la señal digital
conectada al pin
• Se puede seleccionar el cambio de nivel en la señal digital que se desea
detectar (flanco de subida o de bajada)
• Todos los pines de un mismo puerto E/S comparten la misma interrupción(1)
(1) Cada una de estas interrupciones posee múltiples fuentes (ocho fuentes correspondientes a los pines de cada puerto
E/S), lo que implica que hay que inicializar el flag de cada interrupción a ‘0’ manualmente en la Rutina de Tratamiento de
Interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.27
2. Operación – 2.4. Interrupciones
Interrupción
puerto E/S P2
Interrupción
puerto E/S P1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.28
2. Operación – 2.4. Interrupciones – 2.4.1. Habilitación de interrupciones
Habilitación de la interrupción
del pin 3 del puerto E/S P1
P1IE P7 P6 P5 P4 P3 P2 P1 P0
P2IE P7 P6 P5 P4 P3 P2 P1 P0
Habilitación de la interrupción
del pin 1 del puerto E/S P2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.29
2. Operación – 2.4. Interrupciones – 2.4.1. Habilitación de interrupciones
P1IES P7 P6 P5 P4 P3 P2 P1 P0
P2IES P7 P6 P5 P4 P3 P2 P1 P0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.30
2. Operación – 2.4. Interrupciones – 2.4.1. Habilitación de interrupciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.31
2. Operación – 2.4. Interrupciones – 2.4.2. Flags de interrupción
Estado de la interrupción
del pin 3 del puerto E/S P1
P1IFG P7 P6 P5 P4 P3 P2 P1 P0
P2IFG P7 P6 P5 P4 P3 P2 P1 P0
Estado de la interrupción
del pin 1 del puerto E/S P2
NOTA: Al modificar los registros P1DIR, P2DIR, P1OUT, P2OUT, P1IES o P2IES se pueden activar los correspondientes
flags de interrupción en los registros P1IFG y P2IFG, por lo que es recomendable inicializar a ‘0’ dichos flags tras
modificar alguno de los registros indicados
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.32
2. Operación – 2.4. Interrupciones – 2.4.2. Flags de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.33
2. Operación – 2.5. Funcionalidad
2.5. Funcionalidad
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.34
2. Operación – 2.5. Funcionalidad
Puerto E/S
NOTA: Al seleccionar en un pin una funcionalidad distinta a la de entrada y salida digital se deshabilita automáticamente la
interrupción asociada a dicho pin, independientemente del valor de los registros P1IE y P2IE
NOTA: Al seleccionar la funcionalidad de cada pin no se actualiza automáticamente la dirección (entrada o salida)
correspondiente a dicha funcionalidad, por lo que es necesario indicarla mediante los bits de los registros P1DIR y
P2DIR
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.35
2. Operación – 2.5. Funcionalidad
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.36
2. Operación – 2.5. Funcionalidad
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.37
2. Operación – 2.5. Funcionalidad
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.38
2. Operación – 2.5. Funcionalidad
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.39
Índice
1. Introducción
2. Operación
2.1. Entrada y salida digital
2.2. Resistencias de pullup y
pulldown
2.3. Oscilación
2.4. Interrupciones
2.4.1. Habilitación de
interrupciones
2.4.2. Flags de interrupción
2.5. Funcionalidad
3. Configuración
4. Ejemplos
4.1. Pulsador
4.2. LED
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.40
3. Configuración
3. Configuración
P2 Interrupciones deshabilitadas
P1 Interrupciones deshabilitadas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.43
3. Configuración
1. Introducción
2. Operación
2.1. Entrada y salida digital
2.2. Resistencias de pullup y
pulldown
2.3. Oscilación
2.4. Interrupciones
2.4.1. Habilitación de
interrupciones
2.4.2. Flags de interrupción
2.5. Funcionalidad
3. Configuración
4. Ejemplos
4.1. Pulsador
4.2. LED
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.45
4. Ejemplos
4. Ejemplos
─ Entrada y salida básica: entre los elementos más comunes que se suelen
utilizar con los puertos E/S se encuentran:
• Pulsador: utilizado como interfaz de entrada con el usuario
• LED: utilizado como interfaz de salida con el usuario
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T5.46
4. Ejemplos – 4.1. Pulsador
4.1. Pulsador
• Tensión no pulsado: VP1.0 = VCC = 3.5 V
• Tensión pulsado: VP1.0 = GND = 0 V
• Presionar: Flanco de bajada
• Soltar: Flanco de subida
4.2. LED
• Corriente diodo máxima: ID ~ 5 mA < 6 mA = IOHmax
• Tensión diodo: VD ~ 2 V
• Tensión salida máxima: VOHmax = VCC = 3.5 V
• Resistencia: VOHmax = ID ∙ R + VD R = 300 Ω ~ 270 Ω
• Corriente diodo típica: VOHtyp ~ 3.2 V ID ~ 4.44 mA
Microcontroladores
Tema 6:
Temporizadores
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.0
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.1
Índice
3.1.3. Interrupciones
a) Habilitación de interrupciones
b) Flags de interrupción
3.2. Configuración
4. Ejemplos
4.1. Antirrebote
4.2. Medición
4.3. Eventos
4.4. PWM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.2
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.3
1. Introducción
1. Introducción
MSP430G2533 (encapsulado de 20 pines):
Watchdog Timers
(1) Un PWM (Pulse Width Modulation) es una onda cuadrada modulada en anchura, donde se puede variar tanto su ciclo de
trabajo (relación entre la duración de la onda a nivel alto y la duración total de la onda) como su frecuencia. Constituyen
señales muy útiles en electrónica, pues permiten el control de numerosos dispositivos (altavoces, motores…)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.5
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.6
2. Timers
2. Timers
─ Existen 2 Timers iguales de 16 bits en el MSP430G2533:
Tipo A
Timer 0 Timer 1
3 Registros
Captura/Comparación (CC)
NOTA: La familia MSP430 posee dos tipos de Timers: Tipo A y Tipo B. Ambos son equivalentes, aunque los de Tipo B son
algo más versátiles al ofrecer algunas características adicionales a los de Tipo A
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.7
2. Timers – 2.1. Operación
2.1. Operación
─ Cada Timer está compuesto por los siguientes elementos básicos:
• Contador (x1): contiene un registro de 16 bits (TAR) que almacena el valor
de la cuenta:
- Permite seleccionar la señal de reloj para su funcionamiento
- Dispone de 3 modos de operación
• Captura/Comparación (x3): contiene un registro de 16 bits (TACCRx ;
x={0,1,2}) que en combinación con TAR implementa las siguientes
funcionalidades del Timer:
- Permite almacenar el valor actual de la cuenta al detectar
determinados eventos
- Permite comprobar el valor actual de la cuenta para generar
determinados eventos
• Unidad de Salida (x3): contiene un módulo de salida (OUTx ; x={0,1,2}) que
en combinación con TAR y TACCRx implementa las siguientes
funcionalidades del Timer:
- Permite generar señales digitales en los pines del microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.8
2. Timers – 2.1. Operación
─ Esquema general:
Contador
Captura/Comparación 0
Unidad de Salida 0
Captura/Comparación 1
Unidad de Salida 1
Captura/Comparación 2
Unidad de Salida 2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.9
2. Timers – 2.1. Operación
─ Diagrama de bloques:
Contador TAR
TACCRx
Captura/Comparación
OUTx
Unidad de Salida
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.10
2. Timers – 2.1. Operación – 2.1.1. Contador
2.1.1. Contador
─ Para describir la operación del contador es necesario considerar los siguientes
aspectos:
• Funcionamiento: mecanismo de actualización de la cuenta
• Modos de operación: esquemas disponibles para realizar la cuenta
• Inicialización: establecimiento del estado inicial del contador
• Activación y desactivación: puesta en marcha y detención del contador
• Cambio de configuración: modificación del funcionamiento del contador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.11
2. Timers – 2.1. Operación – 2.1.1. Contador – a) Funcionamiento
a) Funcionamiento
─ El registro TAR incrementa/decrementa su valor (en función del modo de
operación) en cada flanco de subida de la señal de reloj que lo controla
─ El contador tiene la capacidad de generar interrupciones durante su
funcionamiento:
• Cuenta: el flag de interrupción TAIFG del registro TACTL se activa cuando
el valor de la cuenta del registro TAR vuelve a 0x0000(1)
(1) Este flag de interrupción se activa cuando el Timer se encuentra funcionando y el valor de la cuenta del registro TAR
alcanza 0x0000, pero no se activa si se escribe directamente el valor 0x0000 en el registro TAR
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.12
2. Timers – 2.1. Operación – 2.1.1. Contador – a) Funcionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.13
2. Timers – 2.1. Operación – 2.1.1. Contador – a) Funcionamiento
─ Diagrama de bloques:
Externa
Interna
Interna
Externa
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.14
2. Timers – 2.1. Operación – 2.1.1. Contador – a) Funcionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.15
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
b) Modos de operación
─ Los bits MC0 y MC1 del registro TACTL permiten seleccionar el modo de
operación del registro TAR:
• MCx = 00 Timer detenido
• MCx ≠ 00 Timer funcionando:
- Modo ascendente
- Modo continuo
- Modo ascendente/descendente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.16
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.17
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.18
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.19
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
(1) Este tipo de señales son utilizadas, por ejemplo, en el control de motores mediante puentes en H, donde la propia inercia
del motor requiere de un tiempo de inactividad sin generar ninguna señal hasta que se detenga por completo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.20
2. Timers – 2.1. Operación – 2.1.1. Contador – b) Modos de operación
Puente en H
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.21
2. Timers – 2.1. Operación – 2.1.1. Contador – c) Inicialización
c) Inicialización
─ El contador se inicializa poniendo a ‘1’ el bit TACLR(1) del registro TACTL:
• Inicializa la cuenta a 0 escribiendo un 0x0000 en el registro TAR
• Inicializa la cuenta del divisor(2)
• Inicializa la dirección de la cuenta a ascendente en el modo de operación
ascendente/descendente
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.23
2. Timers – 2.1. Operación – 2.1.1. Contador – d) Activación y desactivación
d) Activación y desactivación
─ El contador comienza su funcionamiento cuando se cumplen todas y cada
una de las siguientes condiciones:
• La señal de reloj fuente está activa
• El modo de operación es distinto de 00: MCx ≠ 00
• En el modo de operación ascendente o ascendente/descendente el valor
del registro TACCR0 es distinto de 0x0000: TACCR0 ≠ 0x0000
─ El contador detiene su funcionamiento cuando se cumple alguna de las
siguientes condiciones:
• La señal de reloj fuente está inactiva
• El modo de operación es igual a 00: MCx = 00
• En el modo de operación ascendente o ascendente/descendente el valor
del registro TACCR0 es igual a 0x0000: TACCR0 = 0x0000
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.24
2. Timers – 2.1. Operación – 2.1.1. Contador – d) Activación y desactivación
─ Características:
• Al detener el contador se mantiene el estado(1) actual del mismo, de forma
que al reanudar su funcionamiento continúa su operación a partir de dicho
estado
• Si se detiene el contador escribiendo el valor 0x0000 en el registro
TACCR0, al reanudar su funcionamiento escribiendo un valor distinto en el
registro TACCR0 se inicializa la dirección de la cuenta a ascendente en el
modo de operación ascendente/descendente
(1) El estado del contador está determinado por: señal de reloj fuente, divisor, valor de la cuenta, modo de operación,
dirección de la cuenta (ascendente o descendente) en el modo de operación ascendente/descendente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.25
2. Timers – 2.1. Operación – 2.1.1. Contador – e) Cambio de configuración
e) Cambio de configuración
─ Antes de modificar la configuración del contador es recomendable detener el
Timer, para evitar operaciones erróneas
─ Modificar el modo de operación mientras el Timer está funcionando tiene las
siguientes consecuencias(1):
• Modo ascendente:
- TAR > TACCR0 TAR se inicializa a 0x0000
• Modo ascendente/descendente:
- TACCR0 > TAR cuenta ascendente: TAR incrementa hasta TACCR0
- TACCR0 ≤ TAR cuenta descendente: TAR decrementa hasta 0x0000
(1) En estas condiciones es posible que se produzca una cuenta adicional antes de que el cambio tenga efecto
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.26
2. Timers – 2.1. Operación – 2.1.1. Contador – e) Cambio de configuración
(1) En estas condiciones es posible que se produzca una cuenta adicional antes de que el cambio tenga efecto
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.27
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación
2.1.2. Captura/Comparación
─ Para describir la operación de los procesos de captura y comparación es
necesario considerar los siguientes aspectos:
• Aspectos básicos: consideraciones generales de los procesos de captura y
comparación
• Captura: descripción del proceso de captura
• Comparación: descripción del proceso de comparación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.28
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – a) Aspectos básicos
a) Aspectos básicos
─ Los procesos de captura y comparación utilizan para su funcionamiento los
registros TAR y TACCRx
─ El registro TACCRx tiene distinta funcionalidad según se utilice durante el
proceso de captura o durante el proceso de comparación
─ Los procesos de captura y comparación generan durante su funcionamiento la
señal interna EQUx(1), que está activa mientras: TACCRx = TAR
─ El bit CAP del registro TACCTLx permite configurar el Timer en el modo
captura o en el modo comparación:
• CAP = 0 Timer en modo comparación
• CAP = 1 Timer en modo captura
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.30
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – a) Aspectos básicos
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.31
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
b) Captura
─ El proceso de captura se utiliza para registrar (capturar) el instante de tiempo
(valor de la cuenta del registro TAR) en el que ocurren determinados eventos
─ Los eventos que se pueden detectar son los cambios de nivel (flancos) de
determinadas señales, que pueden ser externas o internas al microcontrolador:
• Señal: los bits CCIS0 y CCIS1 del registro TACCTLx permiten seleccionar
la señal a capturar
• Flanco: los bits CM0 y CM1 del registro TACCTLx permiten seleccionar el
flanco a detectar
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.32
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Diagrama de bloques:
Externa
Externa
Interna
Interna
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.33
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.34
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Puesto que las señales externas pueden ser asíncronas respecto a la señal de
reloj del Timer, es recomendable sincronizar su captura con el reloj del Timer
para evitar operaciones erróneas:
• Nivel instantáneo de la señal: el bit CCI del registro TACCTLx contiene el
valor digital instantáneo de la señal a capturar
• Sincronización: el bit SCS del registro TACCTLx permite activar la
sincronización de la señal a capturar con el reloj del Timer
• Nivel sincronizado de la señal: el bit SCCI del registro TACCTLx contiene
el valor digital sincronizado de la señal a capturar
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.35
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Diagrama de bloques:
Externa
Externa
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.36
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
NOTA: La sincronización con la señal de reloj del Timer se debe realizar en el flanco de bajada de dicha señal, pues en ese
momento el valor de la cuenta del registro TAR ya está estabilizado y se puede copiar en el registro TACCRx. Si se
realiza la sincronización en el flanco de subida de la señal de reloj del Timer el valor de la cuenta del registro TAR se
está modificando, por lo que su copia en el registro TACCRx puede almacenar valores incorrectos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.37
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Las señales internas pueden utilizarse para generar una captura software
modificando el bit CCIS0(1) (2) del registro TACCTLx:
• CCISx = 10 CCIS1 = 1 ; CCIS0 = 0 Señal GND
• CCISx = 11 CCIS1 = 1 ; CCIS0 = 1 Señal VCC
(1) Para realizar una captura software hay que mantener el bit CCIS1 del registro TACCTLx a ‘1’
(2) Si se desea realizar una captura software cada vez que se modifica el bit CCIS0 hay que seleccionar la detección de
ambos flancos mediante CMx = 11
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.38
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Diagrama de bloques:
Interna
Interna
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.39
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
(1) En este cálculo hay que gestionar adecuadamente el desbordamiento de la cuenta del registro TAR
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.40
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
(1) Una vez activado, el bit COV del registro TACCTLx debe ser inicializado a ‘0’ manualmente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.41
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – b) Captura
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.42
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – c) Comparación
c) Comparación
─ El proceso de comparación se utiliza para comprobar (comparar) si el valor de
la cuenta (almacenado en el registro TAR) coincide con un valor establecido
(almacenado en el registro TACCRx), y si es así generar ciertos eventos
(interrupciones)
─ Cuando el valor de la cuenta del registro TAR coincide con el valor establecido
del registro TACCRx se realizan las siguientes operaciones:
• SCCI = CCI: se almacena el valor digital sincronizado de la señal
determinada por los bits CCIS0 y CCIS1 del registro TACCTLx
• EQUx = 1: se activa la señal interna EQUx
• CCIFG = 1: se activa el flag de interrupción CCIFG del registro TACCTLx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.43
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – c) Comparación
─ Modo ascendente:
• Cada vez que la cuenta del registro TAR alcanza el valor de TACCR0 se
genera una interrupción (TACCR0 CCIFG)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.44
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – c) Comparación
─ Modo continuo:
• Cada vez que la cuenta del registro TAR alcanza el valor de TACCRx se
genera una interrupción (TACCRx CCIFG), y en la correspondiente Rutina
de Tratamiento de Interrupción (RTI) se debe calcular y actualizar el
siguiente valor de TACCRx en función del intervalo de tiempo tx deseado:
- Inicialización : TACCRx(1) = TAR + (tx)
- Actualización : TACCRx(i+1) = TACCRx(i) + (tx)
─ Modo ascendente/descendente:
• Cada vez que la cuenta del registro TAR alcanza el valor de TACCR0 se
genera una interrupción (TACCR0 CCIFG)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.46
2. Timers – 2.1. Operación – 2.1.2. Captura/Comparación – c) Comparación
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.47
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.48
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – a) Aspectos básicos
a) Aspectos básicos
─ La unidad de salida utiliza para su funcionamiento los registros TAR y TACCRx,
junto con las señales internas EQU0 y EQUx
─ La unidad de salida permite generar señales digitales(1) en las señales OUTx
del Timer, las cuales pueden estar conectadas con distintos pines(2) del
microcontrolador
(1) Entre estas señales digitales que se pueden generar se encuentran los PWMs
(2) Los pines del microcontrolador conectados con las señales OUTx de las unidades de salida de los Timers se identifican
con la nomenclatura TA0.x (señal OUTx del Timer A número 0) y TA1.x (señal OUTx del Timer A número 1)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.49
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – a) Aspectos básicos
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.50
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – a) Aspectos básicos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.51
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
b) Modos de salida
─ Cada unidad de salida dispone de 8 modos de salida para generar la señal
OUTx
─ Los bits OUTMOD0, OUTMOD1 y OUTMOD2 del registro TACCTLx permiten
seleccionar el modo de salida de la señal OUTx:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.52
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
TAR = 0 ERRATA
EQUx TAR = TACCRx
TAIFGTAR
EQU0 TAR==TACCR0
0x0000
EQU0 = EQUx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.53
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
EQU0 = EQUx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.54
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
EQU0 = EQUx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.55
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
─ Características:
• Modo de salida 0: genera el valor digital en la señal OUTx correspondiente
al bit OUT del registro TACCTLx
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.56
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.57
2. Timers – 2.1. Operación – 2.1.3. Unidad de salida – b) Modos de salida
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.58
2. Timers – 2.1. Operación – 2.1.4. Interrupciones
2.1.4. Interrupciones
─ Cada Timer dispone de dos interrupciones distintas:
• TACCR0: interrupción con una única fuente(1):
- Captura/Comparación (TACCR0 CCIFG): en modo captura se activa
al producirse una captura en el registro TACCR0, y en modo
comparación se activa al alcanzar el valor de la cuenta del registro TAR
el valor almacenado en el registro TACCR0
• TAIV: interrupción con múltiples fuentes(2):
- Cuenta (TAIFG): al volver el valor de la cuenta del registro TAR a
0x0000
- Captura/Comparación (TACCR1 CCIFG, TACCR2 CCIFG): en modo
captura se activa al producirse una captura en los registros TACCR1 o
TACCR2, y en modo comparación se activa al alcanzar el valor de la
cuenta del registro TAR el valor almacenado en los registros TACCR1
o TACCR2
(1) Al tener una única fuente el flag de interrupción asociado a la misma se inicializa a ‘0’ automáticamente
(2) Aunque posee múltiples fuentes el flag de interrupción asociado a la fuente que ha originado la interrupción se inicializa a
‘0’ automáticamente si se utiliza el registro TAIV para localizar dicha fuente, y si no se utiliza dicho registro el flag de
interrupción asociado a la fuente que ha originado la interrupción se debe inicializar a ‘0’ manualmente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.59
2. Timers – 2.1. Operación – 2.1.4. Interrupciones
Interrupciones
Timer 1
Interrupciones
Timer 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.60
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – a) Habilitación de interrupciones
a) Habilitación de interrupciones
─ Las distintas interrupciones de cada Timer se pueden habilitar mediante:
• Cuenta: la interrupción que indica que el valor de la cuenta del registro TAR
ha vuelto a 0x0000 (TAIFG) se habilita mediante el bit TAIE del registro
TACTL
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.61
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – a) Habilitación de interrupciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.62
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – b) Flags de interrupción
b) Flags de interrupción
─ Los flags de interrupción de cada Timer se encuentran en los siguientes
registros:
• Cuenta: el flag TAIFG que indica que el valor de la cuenta del registro TAR
ha vuelto a 0x0000 se encuentra en el registro TACTL
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.63
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – b) Flags de interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.64
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – c) Atención de interrupciones
c) Atención de interrupciones
─ La interrupción TACCR0 posee una única fuente, por lo que la localización de
dicha fuente es inmediata y el correspondiente flag de interrupción se inicializa a
‘0’ automáticamente
─ La interrupción TAIV posee múltiples fuentes, por lo que es necesario localizar
la fuente que ha generado la interrupción e inicializar a ‘0’ el flag de interrupción
correspondiente, para lo cual existen dos mecanismos:
• Directo: consiste en comprobar todos los posibles flags de interrupción
(TAIFG, TACCR1 CCIFG, TACCR2 CCIFG), inicializando manualmente a ‘0’
el flag de interrupción que se haya activado
• Registro TAIV: consiste en acceder al registro TAIV, que contiene un valor
que indica el flag de interrupción de mayor prioridad que se ha activado, el
cual a su vez es inicializado automáticamente a ‘0’ al acceder al registro
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.65
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – c) Atención de interrupciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.66
2. Timers – 2.1. Operación – 2.1.4. Interrupciones – c) Atención de interrupciones
Ensamblador C
(1)
(1) El uso de la función intrínseca __even_in_range() genera un código en ensamblador más eficiente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.67
2. Timers – 2.2. Utilización
2.2. Utilización
─ Los temporizadores de los microcontroladores MSP430 poseen distintos modos
de operación, y aunque todos ellos son capaces de realizar medida de tiempos y
generación de PWMs, cada uno tiene sus propias características, haciendo que
algunos modos sean más adecuados que otros para ciertas funcionalidades:
a) Ascendente: útil para realizar medida de tiempos y para generar PWMs
b) Continuo: útil para realizar medida de tiempos avanzadas
c) Ascendente/Descendente: útil para realizar medida de tiempos y para
generar PWMs
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.68
2. Timers – 2.2. Utilización – 2.1.1. Ascendente
2.1.1. Ascendente
─ Las funcionalidades más utilizadas del modo ascendente son:
a) Medida de tiempos: permite realizar medida de tiempos mediante la
generación de una interrupción periódica
b) Generación de PWMs: permite generar PWMs de cualquier frecuencia y
ciclo de trabajo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.69
2. Timers – 2.2. Utilización – 2.1.1. Ascendente – a) Medida de tiempos
a) Medida de tiempos
─ Se realiza indicando el valor correcto en el registro TACCR0:
a) Período:
(TACCR0 + 1) ciclos de la señal de reloj del temporizador
b) Interrupciones:
TAR = TACCR0
TAR = 0
─ Ejemplo: TACCR0 = 9
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.70
2. Timers – 2.2. Utilización – 2.1.1. Ascendente – b) Generación de PWMs
b) Generación de PWMs
─ Se realiza utilizando los registros TACCR0 y TACCRx (TACCR1/TACCR2):
a) Período:
(TACCR0 + 1) ciclos de la señal de reloj del temporizador
b) Ciclo de trabajo:(1)
TACCR 0 TACCR x 1
Toggle/Reset TACCR 0 1
TACCR 0 TACCR x 1
Set/Reset TACCR 0 1
TACCR x
Toggle/Set TACCR 0 1
TACCR x
Reset/Set TACCR 0 1
TACCR 0
(1) El máximo ciclo de trabajo que se puede conseguir es:
TACCR 0 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.71
2. Timers – 2.2. Utilización – 2.1.1. Ascendente – b) Generación de PWMs
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.72
2. Timers – 2.2. Utilización – 2.1.2. Continuo
2.1.2. Continuo
─ Las funcionalidades más utilizadas del modo continuo son:
a) Medida de tiempos: permite realizar medida de tiempos mediante la
generación de hasta tres interrupciones periódicas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.73
2. Timers – 2.2. Utilización – 2.1.2. Continuo – a) Medida de tiempos
a) Medida de tiempos
─ Se realiza actualizando continuamente el valor correcto del registro TACCRx
(TACCR0/TACCR1/TACCR2):
Inicialización : TACCRx (1) TAR N
a) Período:
(N) ciclos de la señal de reloj del temporizador
b) Interrupciones:
TAR = TACCRx
TAR = 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.74
2. Timers – 2.2. Utilización – 2.1.2. Continuo – a) Medida de tiempos
– Ejemplo: N = 10
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.75
2. Timers – 2.2. Utilización – 2.1.3. Ascendente/Descendente
2.1.3. Ascendente/Descendente
─ Las funcionalidades más utilizadas del modo ascendente/descendente son:
a) Medida de tiempos: permite realizar medida de tiempos mediante la
generación de una interrupción periódica
b) Generación de PWMs: permite generar PWMs de cualquier frecuencia y
ciclo de trabajo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.76
2. Timers – 2.2. Utilización – 2.1.3. Ascendente/Descendente – a) Medida de tiempos
a) Medida de tiempos
─ Se realiza indicando el valor correcto en el registro TACCR0:
a) Periodo(1):
(2 * TACCR0) ciclos de la señal de reloj del temporizador
b) Interrupciones:
TAR = TACCR0
TAR = 0
─ Ejemplo: TACCR0 = 5
b) Generación de PWMs
─ Se realiza utilizando los registros TACCR0 y TACCRx (TACCR1/TACCR2):
a) Período:(1)
(2 * TACCR0) ciclos de la señal de reloj del temporizador
b) Ciclo de trabajo:
TACCR x
Toggle/Reset(2) TACCR 0
TACCR 0 TACCR x
Set/Reset(3) 2 TACCR 0
TACCR 0 TACCR x
Toggle/Set(4) TACCR 0
TACCR 0 TACCR x
Reset/Set(5) 2 TACCR 0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.79
2. Timers – 2.2. Utilización – 2.1.3. Ascendente/Descendente – b) Generación de PWMs
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.80
2. Timers – 2.3. Configuración
2.3. Configuración
─ El nombre de los registros de configuración para cada uno de los Timers es:
Timer 0 Timer 1
TACTL = TA0CTL TA1CTL
TAR = TA0R TA1R
TACCTL0 = TA0CCTL0 TA1CCTL0
TACCR0 = TA0CCR0 TA1CCR0
TACCTL1 = TA0CCTL1 TA1CCTL1
TACCR1 = TA0CCR1 TA1CCR1
TACCTL2 = TA0CCTL2 TA1CCTL2
TACCR2 = TA0CCR2 TA1CCR2
TAIV = TA0IV TA1IV
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.81
2. Timers – 2.3. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.82
2. Timers – 2.3. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.83
2. Timers – 2.3. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.84
2. Timers – 2.3. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.85
2. Timers – 2.3. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.86
Índice
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.87
Índice
3.1.3. Interrupciones
a) Habilitación de interrupciones
b) Flags de interrupción
3.2. Configuración
4. Ejemplos
4.1. Antirrebote
4.2. Medición
4.3. Eventos
4.4. PWM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.88
3. Watchdog
3. Watchdog
─ Existe 1 Watchdog de 16 bits en el MSP430G2533:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.89
3. Watchdog – 3.1. Operación
3.1. Operación
─ El Watchdog está compuesto por los siguientes elementos básicos:
• Control: contiene un registro de 16 bits (WDTCTL) que controla la
operación del Watchdog:
- Acceso protegido por clave de seguridad
- Establece la funcionalidad del pin RST/NMI
• Contador: contiene un registro de 16 bits (WDTCNT) que almacena el valor
de la cuenta:
- No es accesible mediante software
- Realiza una cuenta ascendente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.90
3. Watchdog – 3.1. Operación
Contador Control
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.91
3. Watchdog – 3.1. Operación – 3.1.1. Control
3.1.1. Control
─ Para describir la operación del proceso de control es necesario considerar los
siguientes aspectos:
• Aspectos básicos: consideraciones generales del control del Watchdog
• Modos de operación: esquemas disponibles para utilizar el Watchdog
• Inicialización: estado inicial del Watchdog
• Activación y desactivación: puesta en marcha y detención del Watchdog
• Cambio de configuración: modificación del funcionamiento del Watchdog
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.92
3. Watchdog – 3.1. Operación – 3.1.1. Control – a) Aspectos básicos
a) Aspectos básicos
─ El registro de control WDTCTL controla toda la funcionalidad del Watchdog
─ Cualquier acceso al registro de control WDTCTL está protegido mediante una
clave de seguridad:
• Hay que escribir el valor 0x5A en el MSB del registro de control WDTCTL
para que se puedan modificar el resto de bits de dicho registro
• Si no se escribre el valor 0x5A en el MSB del registro de control WDTCTL
se genera un reset (PUC) al producirse una violación de la clave de
seguridad
• Este mecanismo permite evitar escrituras erróneas en el registro de
control WDTCTL, para prevenir una configuración incorrecta del
Watchdog, ya que se trata de un periférico crítico en el microcontrolador
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.93
3. Watchdog – 3.1. Operación – 3.1.1. Control – a) Aspectos básicos
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.94
3. Watchdog – 3.1. Operación – 3.1.1. Control – a) Aspectos básicos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.95
3. Watchdog – 3.1. Operación – 3.1.1. Control – a) Aspectos básicos
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.96
3. Watchdog – 3.1. Operación – 3.1.1. Control – b) Modos de operación
b) Modos de operación
─ El bit WDTTMSEL del registro de control WDTCTL controla el modo de
operación del Watchdog:
• WDTTMSEL = 0: modo Watchdog, que genera un reset (PUC) cuando se
cuenta el número de ciclos programados
• WDTTMSEL = 1: modo Timer, que genera una interrupción (WDTIFG)
cuando se cuenta el número de ciclos programados
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.97
3. Watchdog – 3.1. Operación – 3.1.1. Control – b) Modos de operación
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.98
3. Watchdog – 3.1. Operación – 3.1.1. Control – b) Modos de operación
(1) Esta operación se realiza escribiendo un ‘1’ en el bit WDTCNTCL del registro de control WDTCTL
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.99
3. Watchdog – 3.1. Operación – 3.1.1. Control – c) Inicialización
c) Inicialización
─ Tras el encendido del microcontrolador el Watchdog se configura en el
siguiente estado:
• Funcionamiento: activo
• Modo de operación: modo Watchdog
• Señal de reloj: SMCLK ~ 1.1 MHz
• Número de ciclos a contar: 32768 ciclos
• Tiempo de expiración: ~ 30 ms
• Valor de la cuenta: WDTCNT = 0x0000
• Pin RST/NMI: modo reset
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.100
3. Watchdog – 3.1. Operación – 3.1.1. Control – d) Activación y desactivación
d) Activación y desactivación
─ El Watchdog comienza su funcionamiento (independientemente del modo de
operación) cuando se cumple la siguiente condición:
• El bit WDTHOLD del registro de control WDTCTL se encuentra a ‘0’
─ El Watchdog detiene su funcionamiento (independientemente del modo de
operación) cuando se cumple la siguiente condición:
• El bit WDTHOLD del registro de control WDTCTL se encuentra a ‘1’
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.101
3. Watchdog – 3.1. Operación – 3.1.1. Control – d) Activación y desactivación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.102
3. Watchdog – 3.1. Operación – 3.1.1. Control – d) Activación y desactivación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.103
3. Watchdog – 3.1. Operación – 3.1.1. Control – e) Cambio de configuración
e) Cambio de configuración
─ Antes de modificar la configuración del Watchdog es recomendable detener
su funcionamiento, para evitar operaciones erróneas
─ También es recomendable configurar el Watchdog con una única instrucción,
que escriba el valor deseado en el registro de control WDTCTL
─ Cualquier cambio de configuración requiere la modificación del registro de
control WDTCTL, para lo cual es imprescindible escribir el valor 0x5A (clave de
seguridad) en el MSB de dicho registro
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.104
3. Watchdog – 3.1. Operación – 3.1.2. Contador
3.1.2. Contador
─ Para describir la operación del contador es necesario considerar los siguientes
aspectos:
• Funcionamiento: mecanismo de actualización de la cuenta
• Tiempo de expiración: programación del número de ciclos a contar
• Inicialización: restablecimiento del valor de la cuenta
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.105
3. Watchdog – 3.1. Operación – 3.1.2. Contador – a) Funcionamiento
a) Funcionamiento
─ El registro WDTCNT incrementa su valor en cada flanco de subida de la
señal de reloj que lo controla
─ El contador tiene la capacidad de generar interrupciones durante su
funcionamiento:
• Cuenta: el flag de interrupción WDTIFG del registro IFG1 se activa cuando
se cuenta el número de ciclos programados
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.106
3. Watchdog – 3.1. Operación – 3.1.2. Contador – a) Funcionamiento
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.107
3. Watchdog – 3.1. Operación – 3.1.2. Contador – a) Funcionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.108
3. Watchdog – 3.1. Operación – 3.1.2. Contador – a) Funcionamiento
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.109
3. Watchdog – 3.1. Operación – 3.1.2. Contador – b) Tiempo de expiración
b) Tiempo de expiración
─ Los bits WDTIS0 y WDTIS1 del registro de control WDTCTL establecen el
número de ciclos a contar de la señal de reloj seleccionada, y con ello el tiempo
de expiración del Watchdog:
• WDTISx = 00 32768 ciclos
• WDTISx = 01 8192 ciclos
• WDTISx = 10 512 ciclos
• WDTISx = 11 64 ciclos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.110
3. Watchdog – 3.1. Operación – 3.1.2. Contador – b) Tiempo de expiración
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.111
3. Watchdog – 3.1. Operación – 3.1.2. Contador – b) Inicialización
c) Inicialización
─ El bit WDTCNTCL(1) del registro de control WDTCTL inicializa la cuenta del
registro WDTCNT a 0x0000
─ Diagrama de bloques:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.113
3. Watchdog – 3.1. Operación – 3.1.3. Interrupciones
3.1.3. Interrupciones
─ El Watchdog dispone de dos interrupciones distintas, según el modo de
operación en el que se encuentre:
• Watchdog: interrupción con múltiples fuentes(1):
- Reset (WDTIFG): cuando se cuenta el número de ciclos programados
• Timer: interrupción con una única fuente(2):
- Cuenta (WDTIFG): cuando se cuenta el número de ciclos programados
(1) Al tener múltiples fuentes el flag de interrupción asociado a la fuente que ha originado la interrupción se debe inicializar a
‘0’ manualmente
(2) Al tener una única fuente el flag de interrupción asociado a la misma se inicializa a ‘0’ automáticamente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.114
3. Watchdog – 3.1. Operación – 3.1.3. Interrupciones
Interrupción
modo Watchdog
Interrupción
modo Timer
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.115
3. Watchdog – 3.1. Operación – 3.1.3. Interrupciones – a) Habilitación de interrupciones
a) Habilitación de interrupciones
─ Las distintas interrupciones del Watchdog se pueden habilitar mediante:
• Reset: esta interrupción no se puede deshabilitar, por lo que no dispone de
ningún bit de habilitación
• Cuenta: la interrupción que indica que se ha contado el número de ciclos
programados (WDTIFG) se habilita mediante el bit WDTIE del registro IE1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.116
3. Watchdog – 3.1. Operación – 3.1.3. Interrupciones – b) Flags de interrupción
b) Flags de interrupción
─ Las distintas interrupciones del Watchdog comparten el mismo flag de
interrupción(1), el cual se encuentra en el siguiente registro:
• Reset/Cuenta: el flag WDTIFG que indica que se ha contado el número de
ciclos programados se encuentra en el registro IFG1
(1) Aunque ambas interrupciones comparten el mismo flag de interrupción, en función del modo de operación se generará
una u otra
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.117
3. Watchdog – 3.2. Configuración
3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.118
3. Watchdog – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.119
3. Watchdog – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.120
3. Watchdog – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.121
Índice
3.1.3. Interrupciones
a) Habilitación de interrupciones
b) Flags de interrupción
3.2. Configuración
4. Ejemplos
4.1. Antirrebote
4.2. Medición
4.3. Eventos
4.4. PWM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.122
4. Ejemplos
4. Ejemplos
─ Temporización: entre las aplicaciones más comunes que se suelen utilizar con
los Temporizadores se encuentran :
• Antirrebote: eliminar las fluctuaciones de los pulsadores
• Medición: cálculo del tiempo transcurrido entre la ocurrencia de eventos
consecutivos
• Eventos: cómputo del número de eventos detectados
• PWM: generación de señales PWM para el control de dispositivos
electrónicos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.123
4. Ejemplos – 4.1. Antirrebote
P1IFG_bit.P0 1 P1IFG_bit.P0 1
Rebotes Rebotes
Timer Timer
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.124
4. Ejemplos – 4.2. Multifunción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.126
4. Ejemplos – 4.4. PWM
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T6.127
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Ejercicios Tema 6:
Temporizadores
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.0
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.1
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.2
1. Enunciados – Ejercicio 1
Ejercicio 1:
─ Calcular el máximo intervalo de tiempo que es posible medir con el Timer TA0
del microcontrolador MSP430G2533, indicando el valor de los registros de
configuración del microcontrolador y/o de los periféricos necesarios para obtener
dicho intervalo de tiempo, en los siguientes casos:
a) Utilizando en el sistema la frecuencia calibrada de 1 MHz como fuente de
reloj del DCO
b) Utilizando en el sistema un cristal de cuarzo externo de 32768 Hz
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.3
1. Enunciados – Ejercicio 2
Ejercicio 2:
─ Utilizando la frecuencia calibrada de 1 MHz como señal de reloj del Timer TA0
del microcontrolador MSP430G2533 se desean generar interrupciones
periódicas cada 13 ms, 29 ms y 41 ms:
a) Indicar el valor de los registros de configuración del Timer TA0 para
obtener dicha funcionalidad
b) Calcular los primeros 5 valores que es necesario introducir en los registros
TA0CCRx para obtener dicha funcionalidad (suponer que: TA0R = 0)
c) Desarrollar el código de las rutinas de interrupción del Timer TA0 para
obtener dicha funcionalidad
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.4
1. Enunciados – Ejercicio 3
Ejercicio 3:
─ Utilizando la frecuencia calibrada de 1 MHz como señal de reloj del Timer TA0
del microcontrolador MSP430G2533 se obtienen los siguientes valores en el
registro TA0CCR1 utilizando el proceso de captura en el modo ascendente:
TAR
TA0CCR0 = 0xC34F
t3 = 0x927C
t1 = 0x30D4
t4 = 0x30D4
t2 = 0x61A8
TA0CCR1 CCIFG t
TA0 TAIFG t
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.5
1. Enunciados – Ejercicio 3
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.6
1. Enunciados – Ejercicio 4
Ejercicio 4:
─ Utilizando la frecuencia calibrada de 1 MHz como señal de reloj de los Timers
del microcontrolador MSP430G2533 se desea obtener un PWM de frecuencia 20
Hz y ciclo de trabajo 25 % para hacer parpadear el LED2 de la placa LaunchPad:
a) Indicar el Timer TAx y la unidad de salida OUTx que se deben utilizar
b) Indicar los modos de operación del contador TAR válidos para implementar
el PWM, especificando para cada uno de ellos el valor del registro
TAxCCR0 si fuese necesario
c) Para cada modo de operación del contador TAR válido, indicar los modos
de salida de la unidad de salida OUTx válidos para implementar el PWM,
especificando para cada uno de ellos el valor del temporizador TACCRx si
fuese necesario
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.7
1. Enunciados – Ejercicio 5
Ejercicio 5:
─ En el fichero de cabecera “io430g2533.h” aparecen las siguientes definiciones
relacionadas con el Watchdog:
#define WDTPW (0x5A00u)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.8
1. Enunciados – Ejercicio 5
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.9
Índice
1. Enunciados
2. Solución
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.10
2. Solución – Ejercicio 1
Ejercicio 1:
a) Utilizando en el sistema la frecuencia calibrada de 1 MHz como fuente de
reloj del DCO
b) Utilizando en el sistema un cristal de cuarzo externo de 32768 Hz
DCOCTL = CALDCO_1MHz
DCOCLK 1 MHz
BCSCTL1 = CALBC1_1MHz
SMCLK 125 KHz
BCSCTL2 = DIVS_3
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.11
2. Solución – Ejercicio 1
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.12
2. Solución – Ejercicio 2
Ejercicio 2:
a) Indicar el valor de los registros de configuración del Timer TA0 para
obtener dicha funcionalidad
b) Calcular los primeros 5 valores que es necesario introducir en los registros
TA0CCRx para obtener dicha funcionalidad (suponer que: TA0R = 0)
c) Desarrollar el código de las rutinas de interrupción del Timer TA0 para
obtener dicha funcionalidad
TA0CTL = TASSEL_2 + MC_2
TA0CCR0 = TA0R + 0x32C8
TA0CCTL0 = CCIE
TA0CCR1 = TA0R + 0x7148
TA0CCTL1 = CCIE
TA0CCR2 = TA0R + 0xA028
TA0CCTL2 = CCIE
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.13
2. Solución – Ejercicio 2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.14
2. Solución – Ejercicio 2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.15
2. Solución – Ejercicio 3
Ejercicio 3:
a) Determinar el intervalo de tiempo transcurrido entre cada par de eventos
consecutivos
b) Desarrollar el código de las rutinas de interrupción del Timer TA0 para
poder calcular los milisegundos transcurridos entre cada par de eventos
consecutivos
T i-1,i = (TA0CCR1 i TA0CCR1 i-1) + <num_TAIFG> * 0xC350
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.16
2. Solución – Ejercicio 3
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.17
2. Solución – Ejercicio 4
Ejercicio 4:
a) Indicar el Timer TAx y la unidad de salida OUTx que se deben utilizar
b) Indicar los modos de operación del contador TAR válidos para implementar
el PWM, especificando para cada uno de ellos el valor del registro
TAxCCR0 si fuese necesario
c) Para cada modo de operación del contador TAR válido, indicar los modos
de salida de la unidad de salida OUTx válidos para implementar el PWM,
especificando para cada uno de ellos el valor del temporizador TACCRx si
fuese necesario
NOTA: No se debe utilizar la división de la señal del reloj mediante el divisor del contador: IDx = 00
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.18
2. Solución – Ejercicio 4
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.19
2. Solución – Ejercicio 4
Ejercicio 5:
a) Indicar la función de cada una de las etiquetas de configuración del
Watchdog según el nombre de la misma
WDT_<C><MOD>_<TIME>
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 ET6.21
Universidad de Málaga
Departamento de Tecnología Electrónica
Microcontroladores
Tema 7:
Comunicaciones
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.0
Índice
3.1.5. Configuración
1. Introducción
3.1.6. Interrupciones
2. Interfaces a) Habilitación de interrupciones
b) Flags de interrupción
2.1. Serie c) Atención de interrupciones
2.1.1. UART 3.2. Configuración
a) Características
b) Formato
c) Tasa de transmisión
2.1.2. RS232
2.1.3. Dispositivos virtuales
3. USCI: UART
3.1. Operación
3.1.1. Generador de baudios
a) Tasa de transmisión
b) Operación en bajo consumo
3.1.2. Transmisor
a) Funcionamiento
b) Activación y desactivación
3.1.3. Receptor
a) Funcionamiento
b) Activación y desactivación
3.1.4. Inicialización
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.1
Índice
3.1.5. Configuración
1. Introducción
3.1.6. Interrupciones
2. Interfaces a) Habilitación de interrupciones
b) Flags de interrupción
2.1. Serie c) Atención de interrupciones
2.1.1. UART 3.2. Configuración
a) Características
b) Formato
c) Tasa de transmisión
2.1.2. RS232
2.1.3. Dispositivos virtuales
3. USCI: UART
3.1. Operación
3.1.1. Generador de baudios
a) Tasa de transmisión
b) Operación en bajo consumo
3.1.2. Transmisor
a) Funcionamiento
b) Activación y desactivación
3.1.3. Receptor
a) Funcionamiento
b) Activación y desactivación
3.1.4. Inicialización
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.2
1. Introducción
1. Introducción
MSP430G2533 (encapsulado de 20 pines):
USCI
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.4
1. Introducción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.5
1. Introducción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.6
Índice
3.1.5. Configuración
1. Introducción
3.1.6. Interrupciones
2. Interfaces a) Habilitación de interrupciones
b) Flags de interrupción
2.1. Serie c) Atención de interrupciones
2.1.1. UART 3.2. Configuración
a) Características
b) Formato
c) Tasa de transmisión
2.1.2. RS232
2.1.3. Dispositivos virtuales
3. USCI: UART
3.1. Operación
3.1.1. Generador de baudios
a) Tasa de transmisión
b) Operación en bajo consumo
3.1.2. Transmisor
a) Funcionamiento
b) Activación y desactivación
3.1.3. Receptor
a) Funcionamiento
b) Activación y desactivación
3.1.4. Inicialización
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.7
2. Interfaces
2. Interfaces
─ Paralelo: los bits que forman los datos se transmiten simultáneamente por
distintas líneas: D0
─ Serie: los bits que forman los datos se transmiten secuencialmente por la misma
línea:
Menor coste (un único pin/línea de datos)
Menor velocidad de transmisión
D7 D6 D5 D4 D3 D2 D1 D0
NOTA: Siempre es necesario interconectar la señal de tierra de los sistemas que se comunican mediante otra línea
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.8
2. Interfaces – 2.1. Serie
2.1. Serie
─ Síncrona: el intercambio de datos entre distintos sistemas está controlado por
una misma señal de reloj, la cual es enviada por el transmisor (maestro) hasta el
receptor (esclavo) por otra línea distinta de la de datos:
Mayor velocidad de transmisión (menor error de sincronización)
Mayor coste (una línea adicional para la señal de reloj)
D7 D6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 D3 D2 D1 D0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.9
2. Interfaces – 2.1. Serie
D0 D1 D2 D3 D4 D5 D6 D7
D7 D6 D5 D4 D3 D2 D1 D0
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.10
2. Interfaces – 2.1. Serie – 2.1.1. UART
2.1.1. UART
─ La comunicación serie asíncrona dúplex es una de las más utilizadas por su
sencillez de implementación, a pesar de no permitir velocidades de transmisión
muy elevadas
─ Esta sencillez de implementación ha derivado en que prácticamente cualquier
microcontrolador disponga de un módulo de comunicaciones específico para
gestionar dicha comunicación
─ Tradicionalmente el dispositivo hardware que implementaba este interfaz de
comunicación se conocía como UART (“Universal Asynchronous
Receiver/Transceiver”)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.11
2. Interfaces – 2.1. Serie – 2.1.1. UART – a) Características
a) Características
─ Los datos se transmiten carácter a carácter
─ Los caracteres se transmiten individualmente
─ El tiempo de separación entre caracteres consecutivos no se conoce
(comunicación asíncrona)
─ Los bits de un carácter se transmiten consecutivamente sin separación
temporal entre ellos
─ Cuando no se transmiten datos la línea de datos permanece en su estado de
reposo, que se corresponde con un “1” lógico
─ Al “1” lógico se le conoce como mark
─ Al “0” lógico se le conoce como space
─ La comunicación sólo es posible si transmisor y receptor utilizan internamente
la misma frecuencia de la señal de reloj
─ Cada carácter se transmite con un formato predefinido
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.12
2. Interfaces – 2.1. Serie – 2.1.1. UART – b) Formato
b) Formato
─ El formato utilizado en la transmisión de cada carácter es el siguiente:
• Bit de arranque: se representa como ST y se corresponde con un “0”
lógico. Se utiliza para que el receptor inicialice su señal de reloj interna, de
forma que esté sincronizada con la del transmisor
• Bits de datos: se corresponden con 7 u 8 bits de datos, donde normalmente
se transmite primero el bit menos significativo
• Bit de paridad (opcional): se representa como PA, y se utiliza como un
mecanismo simple de detección de errores
• Bit(s) de parada: uno o dos bits que se representan como SP y se
corresponden con un “1” lógico. Se utilizan para separar los distintos
caracteres transmitidos, pues el siguiente carácter comenzará con un bit de
arranque que se corresponde con un “0” lógico. Así pues, siempre se
asegura una transición “1 0” entre un carácter y el siguiente
CARÁCTER ST D0 D1 D2 D3 D4 D5 D6 D7 PA SP
RELOJ
Sincronización Muestreo
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.13
2. Interfaces – 2.1. Serie – 2.1.1. UART – b) Formato
CARÁCTER ST 0 1 0 1 0 1 0 1 0 SP
CARÁCTER ST 0 0 0 1 0 1 0 1 1 SP
• Impar: el bit PA se utiliza para forzar un número impar de bits al valor “1”
lógico (excluyendo los bits de arranque y de parada). Así pues, el bit PA se
activará cuando en los bits de datos haya un número par de valores a “1”
lógico
CARÁCTER ST 0 0 0 1 0 1 0 1 0 SP
CARÁCTER ST 0 1 0 1 0 1 0 1 1 SP
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.14
2. Interfaces – 2.1. Serie – 2.1.1. UART – c) Tasa de transmisión
c) Tasa de transmisión
─ La tasa de transmisión se mide en baudios, que representa el número de bits
por segundo que se transmiten en la línea de datos
─ Es importante diferenciar la tasa de transmisión de la tasa de datos, la cual
representa el número de bits de datos por segundo que se transmiten en la
línea de datos
─ Puesto que cada carácter contiene como mínimo un bit de arranque más un bit
de parada, la tasa de datos puede alcanzar como máximo el 80% de la tasa de
transmisión
─ Existen unos valores estándar de tasas de transmisión que la mayoría de las
UARTs implementan: 1200, 2400, 4800, 9600, 19200,115200... baudios
─ Tanto el transmisor como el receptor deben utilizar la misma tasa de
transmisión y garantizar que se mantiene lo más estable posible durante la
transmisión(1)
(1) Un error de un 5% entre las frecuencias de las señales de reloj del transmisor y del receptor puede suponer que no se
pueda realizar la comunicación correctamente
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.15
2. Interfaces – 2.1. Serie – 2.1.2. RS232
2.1.2. RS232
─ Para conectar físicamente distintos sistemas mediante el interfaz serie
asíncrono es necesario garantizar:
• Protocolo: el formato de los caracteres transmitidos debe ser el mismo
tanto en el transmisor como en el receptor
• Características eléctricas: el nivel de tensión de las señales transmitidas
debe adecuarse a un rango de valores determinado
• Características físicas: los conectores a utilizar en ambos sistemas deben
estar definidos, especificando las señales que se transmiten en cada pin del
conector
─ El estándar RS232 es uno de los más utilizados para permitir la comunicación
entre sistemas mediante el interfaz serie asíncrono. Este estándar define:
• Protocolo: utiliza el formato de comunicación empleado por la UART
• Características eléctricas: especifica el “1” lógico en el rango de tensiones
(-24, -3) V, y el “0” lógico en el rango de tensiones (+3, +24) V(1)
• Características físicas: define varios tipos de conectores, siendo el más
utilizado el DB9
(1) El estándar RS232 recomienda que se utilicen los valores de tensión -12 V para el “1” lógico y +12 V para el “0” lógico
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.16
2. Interfaces – 2.1. Serie – 2.1.2. RS232
(1) Cuanto mayores sean los niveles de tensión implementados más alejados estarán a nivel eléctrico el “1” lógico y el “0”
lógico, por lo que la comunicación será menos sensible a interferencias y se podrán comunicar sistemas a mayores
tasas de transmisión o a mayores distancias
(2) Estos circuitos requieren la conexión de varios condensadores externos, los cuales se utilizan como dispositivos de
almacenamiento de carga que utilizados convenientemente pueden generar tensiones negativas a partir de tensiones de
alimentación positivas
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.17
2. Interfaces – 2.1. Serie – 2.1.2. RS232
Macho Hembra
(1) El conector DB9 surgió para permitir la interconexión de módems con ordenadores, lo que normalmente requería la
utilización de numerosas señales de control para entre ambos sistemas para garantizar la trasmisión de datos.
Actualmente sólo se suelen utilizar las señales de transmisión (TD – pin 3), recepción (RD – pin 2) y tierra (GND – pin 5)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.18
2. Interfaces – 2.1. Serie – 2.1.2. RS232
(1) El tipo de cable implementado (directo o cruzado) es independiente del tipo de conector DB9 (macho o hembra) utilizado
en cada extremo, por lo que existen múltiples cables combinando ambos elementos
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.19
2. Interfaces – 2.1. Serie – 2.1.3. Dispositivos virtuales
UART
USB
Adaptador UART-USB
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.20
Índice
3.1.5. Configuración
1. Introducción
3.1.6. Interrupciones
2. Interfaces a) Habilitación de interrupciones
b) Flags de interrupción
2.1. Serie c) Atención de interrupciones
2.1.1. UART 3.2. Configuración
a) Características
b) Formato
c) Tasa de transmisión
2.1.2. RS232
2.1.3. Dispositivos virtuales
3. USCI: UART
3.1. Operación
3.1.1. Generador de baudios
a) Tasa de transmisión
b) Operación en bajo consumo
3.1.2. Transmisor
a) Funcionamiento
b) Activación y desactivación
3.1.3. Receptor
a) Funcionamiento
b) Activación y desactivación
3.1.4. Inicialización
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.21
3. USCI: UART
3. USCI: UART
─ Existe 1 USCI en el MSP430G2533 (USCI0), la cual posee dos canales de
comunicación (A y B):
• Canal A: implementa los interfaces UART y SPI
• Canal B: implementa los interfaces SPI e I2C
USCI 0
Canal A
USCI 0
Canal B
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.22
3. USCI: UART – 3.1. Operación
3.1. Operación
─ La USCI está compuesta por los siguientes elementos básicos:
• Generador de baudios: genera la señal de reloj del sistema necesaria para
llevar a cabo la comunicación
• Transmisor: genera la señal de datos a transmitir a partir del dato
• Receptor: recupera el dato transmitido a partir de la señal de datos recibida
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.23
3. USCI: UART – 3.1. Operación
─ Diagrama de bloques:
Receptor
Generador de baudios
Transmisor
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.24
3. USCI: UART – 3.1. Operación – 3.1.1. Generador de baudios
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.25
3. USCI: UART – 3.1. Operación – 3.1.1. Generador de baudios – a) Tasa de transmisión
a) Tasa de transmisión
─ La señal de reloj que controla el generador de baudios se selecciona mediante
los bits UCSSELx del registro UCA0CTL1:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.26
3. USCI: UART – 3.1. Operación – 3.1.1. Generador de baudios – a) Tasa de transmisión
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.27
3. USCI: UART – 3.1. Operación – 3.1.1. Generador de baudios – a) Tasa de transmisión
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.28
3. USCI: UART – 3.1. Operación – 3.1.1. Generador de baudios – b) Operación en bajo consumo
MUY IMPORTANTE
(1) Al activarse la señal de reloj SMCLK también se activan todos los periféricos que utilizan dicha señal para su operación
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.29
3. USCI: UART – 3.1. Operación – 3.1.2. Transmisor
3.1.2. Transmisor
─ Para describir la operación del transmisor es necesario considerar los
siguientes aspectos:
• Funcionamiento: mecanismo de transmisión
• Activación y desactivación: puesta en marcha y detención
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.30
3. USCI: UART – 3.1. Operación – 3.1.2. Transmisor – a) Funcionamiento
a) Funcionamiento
─ La operación del transmisor se basa en la existencia de dos registros:
• Registro de transmisión (UCA0TXBUF): registro de almacenamiento con
carga en paralelo del dato a transmitir
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.31
3. USCI: UART – 3.1. Operación – 3.1.2. Transmisor – a) Funcionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.32
3. USCI: UART – 3.1. Operación – 3.1.2. Transmisor – b) Activación y desactivación
b) Activación y desactivación
─ El transmisor está listo para transmitir cuando el registro de transmisión está
vacío
─ Cuando el transmisor está listo para transmitir se activa su operación
almacenando un dato en el registro de transmisión, momento en el que se
llevan a cabo las siguientes operaciones
• Activación del generador de baudios
• Transferencia del dato almacenado desde el registro de transmisión al
registro serie(1)
• Comienzo de la transferencia de datos
─ Cuando no existen más datos que transmitir (tanto el registro de transmisión
como el registro serie se encuentran vacíos) el transmisor se desactiva,
momento en el que se llevan a cabo las siguientes operaciones:
• Desactivación del generador de baudios
(1) Así pues, se puede almacenar otro dato a transmitir en el registro de transmisión aun cuando el registro serie está
ocupado transmitiendo un dato, de forma que al finalizar la transmisión del dato actual comenzará inmediatamente la
transmisión del nuevo dato
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.33
3. USCI: UART – 3.1. Operación – 3.1.3. Receptor
3.1.3. Receptor
─ Para describir la operación del receptor es necesario considerar los siguientes
aspectos:
• Funcionamiento: mecanismo de recepción
• Activación y desactivación: puesta en marcha y detención
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.34
3. USCI: UART – 3.1. Operación – 3.1.3. Receptor – a) Funcionamiento
a) Funcionamiento
─ La operación del receptor se basa en la existencia de dos registros:
• Registro serie: registro de desplazamiento serie que desplaza un bit el dato
recibido en cada flanco de la señal de reloj
• Registro de recepción (UCA0RXBUF): registro de almacenamiento con
carga en paralelo del dato recibido
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.35
3. USCI: UART – 3.1. Operación – 3.1.3. Receptor – a) Funcionamiento
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.36
3. USCI: UART – 3.1. Operación – 3.1.3. Receptor – b) Activación y desactivación
b) Activación y desactivación
─ El receptor está listo para recibir cuando el registro serie está vacío
─ Cuando el receptor está listo para recibir se activa su operación cuando se
detecta la presencia de un bit de arranque en la línea de datos, momento en el
que se llevan a cabo las siguientes operaciones
• Activación del generador de baudios
• Comienzo de la recepción de datos
• Transferencia del dato recibido desde el registro serie al registro de
recepción(1)
─ Cuando no existen más datos que recibir (no aparece otro bit de arranque en la
línea de datos) el reseptor se desactiva, momento en el que se llevan a cabo
las siguientes operaciones:
• Desactivación del generador de baudios
(1) Así pues, se puede recibir otro dato en el registro serie aun cuando el registro de recepción está ocupado con el último
dato recibido a la espera de ser leído
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.37
3. USCI: UART – 3.1. Operación – 3.1.4. Inicialización
3.1.4. Inicialización
─ La correcta inicialización de la USCI se realiza mediante el siguiente
procedimiento:
• Activar el bit UCSWRST del registro UCA0CTL1 para introducir a la USCI en
el modo reset (detenida)
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.38
3. USCI: UART – 3.1. Operación – 3.1.5. Configuración
3.1.5. Configuración
─ La configuración del formato del carácter transmitido (número de bits de datos,
paridad, tipo de paridad, número de bits de parada...) se configura mediante los
campos del registro UCA0CTL0:
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.39
3. USCI: UART – 3.1. Operación – 3.1.6. Interrupciones
3.1.6. Interrupciones
─ La USCI dispone de dos interrupciones distintas:
• Transmisión: interrupción con múltiples fuentes(1):
- UCA0TX: se activa al encontrarse la USCI_A0 lista para iniciar una
nueva transmisión
• Recepción: interrupción con múltiples fuentes(1):
- UCA0RX: se activa al haber recibido un nuevo dato la USCI_A0
(1) Al tratarse de interrupciones con múltiples fuentes hay que limpiar el flag de cada interrupción manualmente en la Rutina
de Tratamiento de Interrupción
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.40
3. USCI: UART – 3.1. Operación – 3.1.6. Interrupciones
Recepción
Transmisión
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.41
3. USCI: UART – 3.1. Operación – 3.1.6. Interrupciones – a) Habilitación de interrupciones
a) Habilitación de interrupciones
─ Las distintas interrupciones de la USCI se pueden habilitar mediante:
• Transmisión: la interrupción que indica que la USCI_A0 está lista para
transmitir un nuevo dato se habilita mediante el bit UCA0TXIE del registro
IE2
• Recepción: la interrupción que indica que la USCI_A0 ha recibido un nuevo
dato se habilita mediante el bit UCA0RXIE del registro IE2
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.42
3. USCI: UART – 3.1. Operación – 3.1.6. Interrupciones – b) Flags de interrupción
b) Flags de interrupción
─ Los flags de interrupción de la USCI se encuentran en los siguientes registros :
• Transmisión: el flag UCA0TXIFG del registro IFG2 indica que la USCI_A0
está lista para transmitir un nuevo dato
• Recepción: el flag UCA0RXIFG del registro IFG2 indica que la USCI_A0 ha
recibido un nuevo dato
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.43
3. USCI: UART – 3.1. Operación – 3.1.6. Interrupciones – c) Atención de interrupciones
c) Atención de interrupciones
─ La interrupción de transmisión UCA0TX limpia su flag automáticamente al
escribir en el registro de transmisión UCA0TXBUF
─ La interrupción de recepción UCA0RX limpia su flag automáticamente al leer el
registro de recepción UCA0RXBUF
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.44
3. USCI: UART – 3.2. Configuración
3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.45
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.46
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.47
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.48
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.49
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.50
3. USCI: UART – 3.2. Configuración
Microcontroladores - Grado en Ingeniería de Sistemas Electrónicos - Grado en Ingeniería Telemática - Curso 2015/2016 T7.51
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 10 DE SEPTIEMBRE DE 2012
EXAMEN DE MICROCONTROLADORES TIEMPO: 3 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) RESPONDA JUSTIFICADAMENTE CADA PREGUNTA EN EL ESPACIO RESERVADO PARA ELLO (NO SE
CONSIDERARÁ VÁLIDA NINGUNA RESPUESTA NO JUSTIFICADA)
c) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
d) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
DATOS:
a) CONSTANTES DEL FICHERO DE CABECERA “io430g2533.h”:
#define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */
#define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */
#define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */
#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continuous up */
#define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */
#define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0_A CC1, CC2, TA0 */
#define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */
#define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1, CC2, TA1 */
#define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA Timer1_A CC0 */
Se desea diseñar el sistema de control de un aparcamiento para vehículos basándonos en un sistema digital
desarrollado con el microcontrolador MSP430G2533.En la Figura 1 se muestra el esquema general del
aparcamiento, compuesto por dos pulsadores, dos barreras, dos sensores de infrarrojos y dos carteles
luminosos.
-1/8-
En la Figura 2 se muestran detalladamente los distintos elementos del aparcamiento:
BxS
BxB
Sx
Px
CL LIBRE
CC COMPLETO
-2/8-
A continuación se muestra el código correspondiente al sistema de control del aparcamiento:
#include "io430g2533.h" } // for (;;)
} // int main(void)
/* ====== CONSTANTES ============================= */
/* ====== FUNCIONES ============================= */
#define MAX 100
#define INT 0xC000 void Config_uC(void) {
WDTCTL = WDTPW + WDTHOLD;
/* ====== TIPOS DATOS ============================ */ DCOCTL = 0;
BCSCTL1 = CALBC1_1MHZ;
typedef union { DCOCTL = CALDCO_1MHZ;
unsigned volatile char total; P2DIR = BIT7;
struct { P2SEL = BIT7 + BIT6;
unsigned char f0 :1; } // void Config_uC(void)
unsigned char f1 :1;
unsigned char f2 :1; void Config_Timers(void) {
unsigned char f3 :1; TA0CCTL0 = TA0CCTL1 = OUTMOD_0;
}; TA0CCTL0_bit.OUT = TA0CCTL1_bit.OUT = 0;
} flags; TA1CCTL0 = TA1CCTL1 = OUTMOD_0;
TA1CCTL0_bit.OUT = TA1CCTL1_bit.OUT = 0;
/* ====== VARIABLES GLOBALES ===================== */ TA0CTL = TA1CTL = TASSEL_1 + ID_1 + MC_2 + TACLR;
} // void Config_Timers(void)
flags tareas;
void Config_Puertos(void) {
/* ====== PROTOTIPOS ============================= */ P1DIR = P1SEL = BIT2 + BIT1;
P1IFG = 0;
void Config_uC(void); P1REN = P1OUT = P1IES = P1IE = BIT4 + BIT3;
void Config_Timers(void); P1IES |= BIT6 + BIT5;
void Config_Puertos(void); P2DIR |= BIT3 + BIT2 + BIT1 + BIT0;
P2SEL |= BIT1 + BIT0;
/* ====== PROGRAMA PRINCIPAL ===================== */ P2OUT = BIT2;
} // void Config_Puertos(void)
int main(void) {
unsigned char val = MAX; /* ====== RUTINAS TRATAMIENTO INTERRUPCION ====== */
Config_uC();
Config_Timers(); #pragma vector = PORT1_VECTOR
Config_Puertos(); __interrupt void RTI_P1(void) {
tareas.total = 0; if (P1IFG_bit.P3 && P1IE_bit.P3) { // P1.3 -> PE
for (;;) { tareas.f0 = 1;
__low_power_mode_3(); P1IE_bit.P3 = 0;
while (tareas.total) { } // if (P1IFG_bit.P3 && P1IE_bit.P3)
if (tareas.f0) { if (P1IFG_bit.P4 && P1IE_bit.P4) { // P1.4 -> PS
tareas.f0 = 0; tareas.f2 = 1;
TA0CCR0 = TA0R + INT; // TA0.0 -> BES P1IE_bit.P4 = 0;
TA0CCTL0 = CCIE + OUT; } // if (P1IFG_bit.P4 && P1IE_bit.P4)
} // if (tareas.f0) if (P1IFG_bit.P5 && P1IE_bit.P5) { // P1.5 -> SE
if (tareas.f1) { tareas.f1 = 1;
tareas.f1 = 0; P1IE_bit.P5 = 0;
TA0CCR1 = TA0R + INT; // TA0.1 -> BEB } // if (P1IFG_bit.P5 && P1IE_bit.P5)
TA0CCTL0 = 0; if (P1IFG_bit.P6 && P1IE_bit.P6) { // P1.6 -> SS
TA0CCTL1 = CCIE + OUT; tareas.f3 = 1;
val--; P1IE_bit.P6 = 0;
if (val != 0) { } // if (P1IFG_bit.P6 && P1IE_bit.P6)
P1IFG_bit.P3 = 0; // P1.3 -> PE if (tareas.total) {
P1IE_bit.P3 = 1; __low_power_mode_off_on_exit();
} // if (val != 0) } // if (tareas.total)
else { } // void RTI_P1(void)
P2OUT = BIT3; // P2.3 -> CC
} // else - if (val != 0) #pragma vector = TIMER0_A0_VECTOR
} // if (tareas.f1) __interrupt void RTI_TA0CCR0(void) {
if (tareas.f2) { TA0CCTL0 = 0;
tareas.f2 = 0; P1IFG_bit.P5 = 0; // P1.5 -> SE
TA1CCR0 = TA1R + INT; // TA1.0 -> BSS P1IE_bit.P5 = 1;
TA1CCTL0 = CCIE + OUT; } // void RTI_TA0CCR0(void)
} // if (tareas.f2)
if (tareas.f3) { #pragma vector = TIMER0_A1_VECTOR
tareas.f3 = 0; __interrupt void RTI_TA0CCR1(void) {
TA1CCR1 = TA1R + INT; // TA1.1 -> BSB TA0CCTL1 = 0;
TA1CCTL0 = 0; } // void RTI_TA0CCR1(void)
TA1CCTL1 = CCIE + OUT;
if (val == 0) { #pragma vector = TIMER1_A0_VECTOR
P1IFG_bit.P3 = 0; // P1.3 -> PE __interrupt void RTI_TA1CCR0(void) {
P1IE_bit.P3 = 1; TA1CCTL0 = 0;
P2OUT = BIT2; // P2.2 -> CL P1IFG_bit.P6 = 0; // P1.6 -> SS
} // if (val == 0) P1IE_bit.P6 = 1;
val++; } // void RTI_TA1CCR0(void)
if (val != MAX) {
P1IFG_bit.P4 = 0; // P1.4 -> PS #pragma vector = TIMER1_A1_VECTOR
P1IE_bit.P4 = 1; __interrupt void RTI_TA1CCR1(void) {
} // if (val != MAX) TA1CCTL1 = 0;
} // if (tareas.f3) } // void RTI_TA1CCR1(void)
} // while (tareas.total)
-3/8-
1. Indique el estado inicial de los distintos elementos del aparcamiento (barreras, sensores y carteles) tras
el encendido del sistema. [0.5 puntos]
Tras el encendido del sistema el estado de los distintos elementos es:
Barreras: detenidas (en el mismo estado en el que se apagó el sistema, por defecto bajadas):
TA0CCTL0_bit.OUT = TA0CCTL1_bit.OUT = 0;
TA1CCTL0_bit.OUT = TA1CCTL1_bit.OUT = 0;
Sensores: deshabilitados y activos en flanco de bajada:
P1REN = P1OUT = P1IES = P1IE = BIT4 + BIT3;
P1IES |= BIT6 + BIT5;
Carteles: cartel “Libre” encendido y cartel “Completo” apagado:
P2OUT = BIT2;
-4/8-
4. Calcule el tiempo que emplea cada barrera en subir o en bajar por completo. [1.0 puntos]
La operación de subida/bajada de cada barrera está controlada por los temporizadores. Analizando el
código correspondiente a la configuración de los temporizadores en la función Config_Timers()
se puede deducir que cada temporizador opera en el modo continuo con una señal de reloj:
TA0CTL = TA1CTL = TASSEL_1 + ID_1 + MC_2 + TACLR; ACLK/2
Por su parte, la señal de reloj fuente ACLK se deriva de la fuente de reloj LFXT1CLK mediante un
cristal de cuarzo externo de 32768 Hz, por lo que la señal de reloj de cada temporizador es:
ACLK/2 = 16384 Hz
Teniendo en cuenta que cada temporizador se configura para interrumpir tras 0xC000 ciclos:
TAxCCRy = TAxR + INT; [INT = 0xC000 = 49152]
el tiempo total que tarda cada temporizador en generar la interrupción que indica que la barrera se ha
subido/bajado por completo es:
t = ciclos * periodo = ciclos / frecuencia = 49152 / 16384 = 3 s
5. Proponga alguna modificación que mejore el rendimiento energético del sistema sin alterar su
operación. [1.0 puntos]
Los temporizadores TA0 y TA1 operan continuamente y nunca se detienen, por lo que consumen
recursos aunque no sea necesario contar el tiempo de subida/bajada de las barreras. Una medida para
reducir el consumo del sistema sería detener los temporizadores cuando no sean necesarios y volver a
activarlos cuando haya que contar el tiempo de subida/bajada de las barreras.
6. Indique qué es lo que ocurre en el sistema al producirse las siguientes circunstancias, detallando las
operaciones que se realizan y el nuevo estado en el que queda el sistema:
a) Un vehículo presiona el pulsador de entrada PE cuando sólo queda una plaza disponible. [0.75
puntos]
b) Un vehículo presiona el pulsador de entrada PE cuando no quedan plazas disponibles. [0.75 puntos]
c) Un vehículo presiona el pulsador de salida PS después de que otro vehículo haya presionado el
pulsador de entrada PE sin quedar plazas disponibles. [1.0 puntos]
d) Un vehículo atraviesa completamente el sensor de infrarrojos mientras la barrera está subiendo. [1.0
puntos]
e) Un vehículo comienza a atravesar el sensor de infrarrojos mientras la barrera está bajando. [1.0
puntos]
-5/8-
a) Se abre la barrera de entrada, y cuando el vehículo atraviesa el sensor de infrarrojos se cierra la
barrera de entrada, disminuyendo en una unidad las plazas disponibles. Puesto que sólo quedaba
una plaza disponible, el aparcamiento estará completo, por lo que no se habilita el pulsador de
entrada PE para evitar que otro vehículo pueda entrar, a la vez que se apaga el cartel “Libre” y se
enciende el cartel “Completo”.
b) Al no estar el pulsador de entrada PE habilitado cuando el aparcamiento está completo no ocurre
nada.
c) Para el vehículo que pretende entrar y que presiona el primer lugar el pulsador de entrada PE, al
no estar dicho pulsador de entrada PE habilitado cuando el aparcamiento está completo no ocurre
nada. Para el vehículo que pretende salir se abre la barrera de salida, y cuando el vehículo
atraviesa el sensor de infrarrojos se cierra la barrera de salida, aumentando en una unidad las
plazas disponibles. Puesto que no quedaban plazas disponibles, el aparcamiento dispondrá de una
plaza libre, por lo que se habilita el pulsador de entrada PE para permitir que otro vehículo pueda
entrar, a la vez que se apaga el cartel “Ocupado” y se enciende el cartel “Libre”. El hecho de que
haya una plaza disponible no implica que se inicie el proceso de entrada para el vehículo que
pretende entrar, siendo necesario que vuelva a presionar el pulsador de entrada PE que ahora sí
estará habilitado.
d) Puesto que la interrupción del sensor de infrarrojos se habilita cuando la barrera ha terminado de
subir, si cualquier vehículo atraviesa por completo el sensor de infrarrojos cuando la barrera está
subiendo no se detectará dicha circunstancia, por lo que al terminar de subir la barrera
permanecerá abierta hasta que otro vehículo atraviese por completo el sensor de infrarrojos.
e) Puesto que la barrera comienza a bajar cuando un vehículo atraviesa por completo el sensor de
infrarrojos, y además la interrupción del sensor de infrarrojos se deshabilita cuando un vehículo lo
atraviesa por completo, si cualquier vehículo atraviesa el sensor de infrarrojos cuando la barrera
está bajando no se detectará dicha circunstancia, por lo que la barrera seguirá bajando.
7. La aplicación actual tiene el siguiente defecto de diseño: tras la entrada o la salida de un vehículo y
mientras la correspondiente barrera está bajando un nuevo vehículo podría intentar atravesarla e incluso
ser golpeado por la misma. Explique el motivo por el que se produce este comportamiento. [1.0 puntos]
Este comportamiento se debe a que los sensores se deshabilitan una vez que cualquier vehículo los
atraviesa por completo, comenzando en ese momento a bajar la correspondiente barrera. Así pues, al
estar deshabilitados no pueden indicarle a la aplicación que otro vehículo intenta atravesar la barrera
mientras está bajando, por lo que dicha barrera seguirá bajando y podría golpear al nuevo vehículo
que intenta atravesarla.
-6/8-
8. A continuación se proponen una serie de modificaciones en distintas secciones del código para
solucionar el defecto de diseño comentado en la pregunta anterior. Comente qué efecto tienen cada una
de estas modificaciones independientemente, así como el efecto final sobre la aplicación en el caso de
que un nuevo vehículo intente atravesar una barrera mientras está bajando. [1.0 puntos]
a) Sección 1: Programa principal
if (tareas.f1) {
tareas.f1 = 0;
P1IES_bit.P5 = 0; // MODIFICADO
P1IFG_bit.P5 = 0; // MODIFICADO
P1IE_bit.P5 = 1; // MODIFICADO
TA0CCR1 = TA0R + INT;
…
} // if (tareas.f1)
…
if (tareas.f3) {
tareas.f3 = 0;
P1IES_bit.P6 = 0; // MODIFICADO
P1IFG_bit.P6 = 0; // MODIFICADO
P1IE_bit.P6 = 1; // MODIFICADO
TA1CCR1 = TA1R + INT;
…
} // if (tareas.f3)
-7/8-
a) El efecto de esta modificación consiste en habilitar el sensor de infrarrojos en las tareas que inician
la bajada de las barreras, y cambiar el flanco activo al de subida para poder detectar el momento
en el que un vehículo entra en el sensor de infrarrojos y comienza a atravesar la barrera.
b) El efecto de esta modificación consiste en detener las barreras, deshabilitar los pulsadores y los
sensores y bloquear el sistema si los sensores se encuentran activos en el flanco de subida.
c) El efecto de esta modificación consiste en deshabilitar el sensor de infrarrojos y cambiar el flanco
activo al de bajada, para poder detectar el momento en el que un vehículo sale del sensor de
infrarrojos.
El efecto conjunto de estas modificaciones en la aplicación permite que si algún sensor de infrarrojos
detecta la presencia de un vehículo cuando su correspondiente barrera está bajando el sistema se
bloquee inmediatamente (deteniendo las barreras y la operación de los pulsadores y de los sensores) y
permanezca en bajo consumo hasta que se apague y encienda de nuevo.
-8/8-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 11 DE SEPTIEMBRE DE 2013
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
c) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
d) NO OLVIDE JUSTIFICAR TODAS SUS RESPUESTAS
-1/8-
Figura 1. Código MORSE de los caracteres implementados en el transmisor MORSE
Con todo ello, las especificaciones1 que se siguieron a la hora de implementar el sistema de transmisión
MORSE son las siguientes:
Unidad de referencia temporal
Se representa por T y tendrá un valor de 250 ms.
Intervalos temporales para los símbolos
Para la generación de los símbolos se establecen los siguientes intervalos temporales:
1. Punto: t < 2T
2. Raya: 2T ≤ t
La generación del símbolo punto se debe gestionar cuando se suelte el pulsador MORSE, momento en el
que se puede calcular el tiempo que ha permanecido presionado. Sin embargo, la generación del símbolo
raya se debe gestionar automáticamente, de forma que al transcurrir un período de tiempo igual a 2T con
el pulsador MORSE presionado se generará un símbolo raya, independientemente del tiempo total
durante el que permanezca presionado el pulsador MORSE.
Intervalos temporales para las pausas
Para la generación de las pausas se establecen los siguientes intervalos temporales:
1. Entre símbolos de un carácter: t < 4T
2. Entre caracteres de una palabra: 4T ≤ t < 20T
3. Entre palabras de un mensaje: 20T ≤ t
La generación de las pausas entre símbolos y entre caracteres se deben gestionar cuando se presione el
pulsador MORSE, momento en el que se puede calcular el tiempo que ha permanecido soltado. Sin
embargo, la generación de la pausa entre palabras se debe gestionar automáticamente, de forma que al
transcurrir un período de tiempo igual a 20T con el pulsador MORSE soltado se generará una pausa entre
palabras, independientemente del tiempo total durante el que permanezca soltado el pulsador MORSE.
Las pausas entre palabras se codificarán con el carácter espacio (‘ ’).
Errores
Sólo se van a implementar los caracteres que se indican en la figura 1, estableciendo los siguientes
errores en la generación del mensaje en código MORSE:
1. ERROR tipo Carácter: se produce cuando la secuencia de símbolos introducida (puntos y/o rayas) no
se corresponde con ningún carácter del alfabeto.
-3/8-
La figura 2 muestra el esquema de conexión entre la placa de test y la placa del transmisor MORSE de la
que se desea verificar su funcionamiento.
Teniendo en cuenta el código anterior Test_TX_MORSE.c y el esquema del sistema, conteste de forma
justificada a cada una de las preguntas que se plantean sobre la implementación del programa de test
de la placa de test. Este programa permite la verificación del programa implementado para el sistema de
transmisión MORSE sobre la placa bajo prueba.
CONFIGURACIÓN PERIFÉRICOS PROGRAMA TEST
1. ¿A qué frecuencia están configuradas las señales de reloj SMCLK y MCLK? Responda y justifique la
respuesta. (0,5p)
En la función Config_uC() se configura el DCO para operar con la frecuencia calibrada de 8 MHz
mediante las instrucciones:
DCOCTL = 0;
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
Por lo que tanto SMCLK como MCLK operarán a 8 MHz, al ser generadas dichas señales de reloj a
partir del DCO.
2. ¿Cómo están configurados los LEDs conectados a los terminales del microcontrolador P1.0 y P1.6 y el
pulsador conectado al terminal del microcontrolador P1.3? Responda y justifique la respuesta. (0,75p)
En la función Config_Perifericos() se configuran dichos pines.
Los pines P1.0 y P1.6 conectados a los LEDs se configuran como salida (valor ON de los bits 0 y 6 del
registro P1DIR), estableciendo además un valor inicial a nivel bajo para el pin P1.0 (valor LED_OFF
del bit 0 del registro P1OUT) y a nivel alto para el pin P1.6 (valor LED_ON del bit 6 del registro
P1OUT), lo que produce inicialmente el apagado del LED ROJO y el encendido del LED VERDE.
El pin P1.3 se configura como entrada (valor OFF bit 3 del registro P1DIR), con una resistencia de
pullup (valor ON del bit 3 de los registros P1REN y P1OUT) y como entrada de interrupción (valor ON
del bit 3 del registro P1IE) en el flanco de bajada (valor ON del bit 3 del registro P1IES).
-4/8-
3. ¿Cómo está configurado el Temporizador T1, relacionándolo con el terminal P2.3? Responda y
justifique la respuesta. (1p)
En la función Config_Perifericos() se configura dicho temporizador.
La frecuencia de operación del Temporizador T1 se establece al valor de SMCLK (valor TASSEL_2
del registro TA1CTL) dividida por 8 (valor ID_3 del registro TA1CTL), lo que equivale a 1 MHz.
También se habilita la unidad de salida 0 (registro TA1CCTL0) en el modo 0 (valor OUTMOD_0 del
registro TA1CCTL0), modo que establece el valor de dicha unidad de salida al valor que tenga el bit
OUT del registro TA1CCTL0.
Por último, se conecta dicha unidad al pin P2.3 (registros P2SEL, P2SEL2 y P2DIR), estableciendo
como valor inicial para dicha salida (es decir, para el pin P2.3) un nivel alto (bit OUT del registro
TA1CCTL0).
5. Tras la habilitación de la interrupción del Temporizador T1, ¿en qué instante expresado en ms se
produce la ejecución de la rutina de tratamiento de interrupción RTI_T1_TACCR0? Responda y
justifique la respuesta. (1p)
En la rutina de tratamiento de interrupción del pulsador RTI_P1 se activa el Temporizador T1 en modo
ascendente mediante la instrucción:
TA1CTL_bit.MC0 = ON;
por lo que contará desde el valor 0 hasta el valor almacenado en el registro TA1CCR0, es decir,
(TA1CCR0+1) ciclos de su señal de reloj, que como se describe en la pregunta 3 opera con una
frecuencia de 1 MHz, lo que equivale a un ciclo de 1 μs.
Por otra parte, en la función Config_Perifericos()se establece el valor del registro TA1CCR0
como (T_TA1–1), es decir, 49999. Por lo tanto, el Temporizador T1 contará 50000 ciclos de 1 μs, es
decir 50 ms, hasta que su cuenta alcance el valor del registro TA1CCR0 y genere la interrupción
correspondiente a la rutina de tratamiento de interrupción RTI_T1_TACCR0.
-5/8-
6. ¿En qué momento en relación con el funcionamiento del programa de test la interrupción del pulsador
conectado al terminal del microcontrolador P1.3 está habilitada? ¿En qué momento está deshabilitada?
¿Qué función tiene este pulsador? Responda y justifique la respuesta. (0,75p)
La interrupción del pulsador se habilita en la función Config_Perifericos()al principio del
programa y en la rutina de tratamiento de interrupción del Temporizador T1 RTI_T1_TACCR0 cuando
se ha alcanzado el final del mensaje a generar, mediante la instrucción:
P1IE_bit.P3 = ON;
Por su parte, la interrupción del pulsador se deshabilita en la propia rutina de tratamiento de
interrupción del pulsador RTI_P1, mediante la instrucción:
P1IE_bit.P3 = OFF;
Así pues, la interrupción del pulsador estará habilitada al principio del programa y cuando finalice la
verificación de la placa bajo prueba (tras haber generado el mensaje de prueba), y estará deshabilitada
una vez que se haya presionado el propio pulsador. Por lo tanto, este pulsador tiene la función de iniciar
el proceso de verificación de la placa bajo prueba.
FUNCIONAMIENTO PROGRAMA TEST
7. En relación con el funcionamiento del programa de test ¿qué indican el apagado y el encendido del LED
VERDE conectado al terminal del microcontrolador P1.6? Responda y justifique la respuesta. (0,75p)
El LED VERDE conectado al pin P1.6 se enciende en la función Config_Perifericos()al
principio del programa y en la rutina de tratamiento de interrupción del Temporizador T1
RTI_T1_TACCR0 cuando se ha alcanzado el final del mensaje a generar, mediante la instrucción:
P1OUT_bit.P6 = LED_ON;
Por su parte, el LED VERDE se apaga en la rutina de tratamiento de interrupción del pulsador RTI_P1,
mediante la instrucción:
P1OUT_bit.P6 = LED_OFF;
Así pues, el LED VERDE se encenderá para indicar que el sistema puede comenzar un nuevo proceso
de verificación de la placa bajo prueba, y se apagará para indicar que el sistema se encuentra realizando
una verificación de la placa bajo prueba.
8. En relación con el funcionamiento del programa de test ¿qué indican el apagado y el encendido del LED
ROJO conectado al terminal del microcontrolador P1.0? Responda y justifique la respuesta. (1p)
El LED ROJO conectado al pin P1.0 se apaga en la función Config_Perifericos()al principio
del programa, mediante la instrucción:
P1OUT_bit.P0 = LED_OFF;
Posteriormente, el LED ROJO se actualiza en las rutinas de tratamiento de interrupción del pulsador
RTI_P1 y del Temporizador T1 RTI_T1_TACCR0 cada vez que se modifica la unidad de salida 0 (es
decir, el valor del pin P2.3), mediante la instrucción:
P1OUT_bit.P0 = ~(TA1CCTL0_bit.OUT);
Puesto que el pin P2.3 está conectado al pulsador de la placa bajo prueba, el nivel de dicho pin emula la
pulsación (pin P2.3 a nivel bajo: TA1CCTL0_bit.OUT = OFF) o no pulsación (pin P2.3 a nivel alto:
TA1CCTL0_bit.OUT = ON) del pulsador de la placa bajo prueba. Por lo tanto, el LED ROJO
indicará si el pulsador de la placa bajo prueba está presionado (LED ROJO encendido) o soltado (LED
ROJO apagado).
-6/8-
Para verificar el funcionamiento de la placa bajo prueba, el programa de test va a generar hacia la placa bajo
prueba el siguiente mensaje ‘# EXAMEN SEPTIEMBRE 2013 # ’, donde los caracteres ‘#’ van a
representar los dos tipos de errores que implementa el transmisor MORSE según las especificaciones que se
dieron al principio.
9. Dibuje el nivel (Vcc, GND) de la señal obtenida en el pin P2.3 durante la generación del carácter ‘R’ de
la palabra ‘SEPTIEMBRE’ del mensaje de prueba, indicando claramente el tiempo que permanece
dicha señal en cada nivel. Responda y justifique la respuesta. (2p)
P2.3
450 ms 900 ms 1100 ms 500 ms 250 ms 1100 ms
VCC
GND t
50 ms
Al presionar el pulsador conectado al pin P1.3 de la placa TEST se inicia la verificación del
funcionamiento de la placa bajo prueba. Para ello, se va conmutando el valor lógico del pin P2.3 de la
placa TEST, que está conectado al pulsador de la placa bajo prueba. Así pues, al ir conmutando el valor
lógico del pin P2.3 se va emulando el envío de distintos símbolos y pausas en MORSE, según el tiempo
que tarde el pin en conmutar.
Tras presionar el pulsador del pin P1.3 se inicializa el valor del pin P2.3 a nivel bajo en la rutina de
tratamiento de interrupción del pulsador RTI_P1, mediante la instrucción:
TA1CCTL0_bit.OUT = OFF;
correspondiendo este nivel bajo a presionar el pulsador del pin P1.3 de la placa bajo prueba. Además, se
inicia el Temporizador T1 y se configura para que interrumpa un número de veces determinado,
correspondiente cada interrupción a un tiempo de 50 ms. El número de veces que debe interrumpir el
Temporizador T1 será el tiempo de duración del pin P2.3 a nivel bajo (es decir, el tiempo durante el que
permanece presionado el pulsador P1.3 de la placa bajo prueba, o lo que es lo mismo la introducción de
un símbolo punto o raya). Cuando el Temporizador T1 interrumpe el número de veces especificado se
conmuta el valor del pin P2.3 en la rutina de tratamiento de interrupción del Temporizador T1
RTI_T1_TACCR0, mediante la instrucción:
TA1CCTL0_bit.OUT = ~(TA1CCTL0_bit.OUT);
que ahora fija el valor del pin P2.3 a nivel alto, correspondiendo este nivel alto a soltar el pulsador del
pin P1.3 de la placa bajo prueba. Seguidamente se vuelve a configurar el Temporizador T1 para que
interrumpa otro número de veces determinado, que delimitará el tiempo de duración del pin P2.3 a nivel
alto (es decir, el tiempo durante el que permanece soltado el pulsador P1.3 de la placa bajo prueba, o lo
que es lo mismo la introducción de una pausa). Este proceso se repite hasta que se alcanza el final del
mensaje a generar.
El tiempo durante el que permanece el pin P2.3 a un nivel bajo o alto lo determina el número de
interrupciones que debe generar el Temporizador T1 antes de conmutar el valor de dicho pin. Este
número de interrupciones es lo que se almacena en el array secuencia, correspondiendo las
posiciones pares del mismo (0, 2, 4...) al tiempo con el pin a nivel bajo, y las posiciones impartes (1, 3,
5...) al tiempo con el pin a nivel alto.
-7/8-
10. ¿Qué tipo de error representa el primer carácter ‘#’ del mensaje de prueba ‘# EXAMEN SEPTIEMBRE
2013 # ’? Responda y justifique la respuesta. (0,75p)
Según el array secuencia el número de interrupciones de 50 ms generadas para el primer carácter del
mensaje es:
Símbolos
Pausas
que se corresponde con un carácter de 6 símbolos, lo que produce un error de longitud.
11. ¿Qué tipo de error representa el último carácter ‘#’ del mensaje de prueba ‘# EXAMEN SEPTIEMBRE
2013 # ’? Responda y justifique la respuesta. (1p)
Según el array secuencia el número de interrupciones de 50 ms generadas para el último carácter del
mensaje es:
Símbolos
Pausas
donde la duración de los símbolos se corresponde con:
1 • 50 ms = 50 ms Punto
5 • 50 ms = 250 ms Punto
11 • 50 ms = 550 ms Raya
9 • 50 ms = 450 ms Punto
1 • 50 ms = 50 ms Punto
que no se corresponde con ningún carácter válido del alfabeto MORSE implementado, lo que produce
un error de carácter.
-8/8-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 12 DE JUNIO DE 2014
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
c) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
-1/8-
A continuación se muestra el código correspondiente al sistema:
#include "io430g2533.h" P2OUT_bit.P4 = LED_ON;
} // if (num_sec == 16)
/* ============ CONSTANTES ======================= */ else {
#define ON 1 cont_simb = 0;
#define OFF 0 puls_habilitados = OFF;
#define LED_ON 1 mostrar_secuencia = ON;
#define LED_OFF 0 } // else: if (num_sec == 16)
#define MAX 16 } // if (cont_simb == num_sec)
else {
/* ============ TIPOS DATOS ====================== */ puls_habilitados = ON;
} // else if (cont_simb == num_sec)
typedef union { } // else: if (simbolo != simb_introd)
unsigned char total; } // if (comprobar_simbolo == ON)
struct { } // while (tareas.total != OFF)
unsigned char f0:1,f1:1,f2:1; } // for (;;)
}; } // int main(void)
} flags;
/* ============ FUNCIONES ====================== */
/* ============ VARIABLES GLOBALES ============== */ void Config_uC(void) {
WDTCTL = WDTPW + WDTHOLD;
flags tareas; DCOCTL = 0;
#define mostrar_secuencia tareas.f0 BCSCTL1 = CALBC1_1MHZ;
#define comprobar_simbolo tareas.f1 DCOCTL = CALDCO_1MHZ;
flags estado; }
#define puls_habilitados estado.f0 void Config_Puertos(void) { // Pregunta 1 }
#define sec_generada estado.f1 void Config_Timers(void) {
#define simb_introd estado.f2 TA0CTL = TASSEL_2 + ID_3 + MC_2 + TACLR;
unsigned int sec = 0; TA1CTL = TASSEL_2 + ID_3 + MC_2 + TACLR;
unsigned char simbolo; }
unsigned char num_sec = 0;
/* ======== RUTINAS TRATAMIENTO INTERRUPCION ==== */
/* ============ PROTOTIPOS ======================= */ #pragma vector = TIMER0_A0_VECTOR
void Config_uC(void); __interrupt void RTI_TA0CCR0(void) {
void Config_Puertos(); static unsigned char num_int_TA0_0 = 0;
void Config_Timers(); static unsigned char cont_sec = 0;
TA0CCR0 += 31250;
/* ============ PROGRAMA PRINCIPAL =============== */ num_int_TA0_0++;
int main(void) { if (num_int_TA0_0 == 1) {
P2OUT_bit.P3 = P2OUT_bit.P4 = LED_OFF;
unsigned char cont_simb = 0; } // if (num_int_TA0_0 == 1)
Config_uC(); else if (num_int_TA0_0 == 4) {
Config_Puertos(); num_int_TA0_0 = 0;
Config_Timers(); cont_sec++;
tareas.total = 0; if (cont_sec < num_sec) {
estado.total = 0; simbolo = (unsigned char) ((sec >> cont_sec)
puls_habilitados = OFF; & 0x0001);
for (;;) { if (simbolo == 0) {
__low_power_mode_0(); P2OUT_bit.P3 = LED_ON;
while (tareas.total != OFF) { } // if (simbolo == 0)
// ------------ [Tarea_0 -> Mostrar secuencia] else {
if (mostrar_secuencia == ON) { P2OUT_bit.P4 = LED_ON
mostrar_secuencia = OFF; } // else: if (simbolo == 0)
simbolo = (unsigned char) (sec & 0x0001); } // if (cont_sec < num_sec)
if (simbolo == 0) { else {
P2OUT_bit.P3 = LED_ON; if (num_sec == 16) {
} // if (simbolo == 0) num_sec = 0;
else { sec_generada = OFF;
P2OUT_bit.P4 = LED_ON; } // if (num_sec == 16)
} // else: if (simbolo == 0) cont_sec = 0;
num_sec++; puls_habilitados = ON;
TA0CCR0 = TA0R + 31250; TA0CCTL0_bit.CCIE = OFF;
TA0CCTL0_bit.CCIFG = OFF } // else: if (cont_sec < num_sec)
TA0CCTL0_bit.CCIE = ON; } // else if (num_int_TA0_0 == 4)
} // if (mostrar_secuencia == ON) } // __interrupt void RTI_TA0CCR0(void)
// ------------ [Tarea_1 -> Comprobar simbolo]
if (comprobar_simbolo == ON) { #pragma vector = TIMER1_A0_VECTOR
comprobar_simbolo = OFF; __interrupt void RTI_TA1CCR0(void) {
simbolo = (unsigned char) ((sec >> static unsigned char num_int_TA1_0 = 0;
cont_simb) & 0x0001); TA1CCR0 += 31250;
if (simbolo != simb_introd) { num_int_TA1_0++;
TA0CTL = TA1CTL = MC_0; if (num_int_TA1_0 == 1) {
P2IE_bit.P1 = P2IE_bit.P2 = OFF; P2OUT_bit.P3 = P2OUT_bit.P4 = LED_OFF;
P2OUT_bit.P3 = LED_ON; }
P2OUT_bit.P4 = LED_OFF; else if (num_int_TA1_0 == 2) {
} // if (simbolo != simb_introd) num_int_TA1_0 = 0;
else { TA1CCTL0_bit.CCIE = OFF;
cont_simb++; comprobar_simbolo = ON;
if (cont_simb == num_sec) { __low_power_mode_off_on_exit();
if (num_sec == MAX) { }
TA0CTL=TA1CTL= MC_0; }
P2IE_bit.P1=P2IE_bit.P2= OFF;
P2OUT_bit.P3 = LED_OFF;
-2/8-
#pragma vector = PORT2_VECTOR #pragma vector = PORT1_VECTOR
__interrupt void RTI_P2(void) { __interrupt void RTI_P1(void) {
if (puls_habilitados == ON) { P1IE_bit.P3 = OFF;
if (P2IFG_bit.P1) { P2IE_bit.P1 = P2IE_bit.P2 = ON;
P2OUT_bit.P3 = LED_ON; if (sec_generada == OFF) {
simb_introd = OFF; sec = TA0R;
} sec_generada = ON;
else { mostrar_secuencia = ON;
P2OUT_bit.P4 = LED_ON; __low_power_mode_off_on_exit();
simb_introd = ON; } // if (sec_generada == OFF)
} } // void RTI_P1(void)
TA1CCR0 = TA1R + 31250;
TA1CCTL0_bit.CCIFG = OFF;
TA1CCTL0_bit.CCIE = ON;
puls_habilitados = OFF;
} // if (puls_habilitados == ON) {
P2IFG = 0;
}
En todo momento se consideran pulsadores ideales, sin rebote. Teniendo en cuenta el código anterior y
el esquema del sistema, conteste de forma justificada a cada una de las preguntas que se plantean sobre la
implementación del sistema.
-3/8-
CONFIGURACIÓN DE LOS PUERTOS (1,5p)
1. Implemente completamente la rutina void Config_Puertos() para que los tres pulsadores
interrumpan al soltar y los dos diodos LED estén inicialmente apagados. Sólo el pulsador START
debe quedar habilitado.
a. Configuración para los LED (0,5p)
c. Configuración pulsadores sin utilizar bitfields (P2DIR, P2OUT, etc) y sin estropear la
configuración ya realizada en el apartado a. para los LED. Recuerde que estos pulsadores
quedan inicialmente deshabilitados. (0,5p)
-4/8-
ENSAMBLADOR (2p)
2. Para cada una de las instrucciones en lenguaje C que se indican a continuación, identifique en cuál o
cuales de las instrucciones en ensamblador siguientes se transforman en la compilación (Nota
importante: sólo se tendrán en cuenta las respuestas que hayan sido explicadas adecuadamente).
a. Entrada en bajo consumo: marque la opción correcta y explique detalladamente por qué dicha
opción es adecuada y las demás no lo son (1p)
__low_power_mode_0(); BIS.W #0xF8, SR
X BIS.W #0x18, SR
BIS.W #0xF0, SR
BIS.W #0x10, SR
b. Salida del bajo consumo: marque la opción correcta y explique detalladamente su respuesta
(1p)
__low_power_mode_off_on_exit(); X BIC.W #0xF0, 0(SP)
-5/8-
USO DE LOS TEMPORIZADORES (3p)
3. En el sistema se están utilizando los dos temporizadores TA0 y TA1. Responda a las siguientes
cuestiones.
a. ¿Para qué sirve la instrucción en la rutina de tratamiento de interrupción RTI_P1 sec = TA0R?
En su respuesta tenga en cuenta para qué se usa luego la variable global sec (0,5p)
Esta instrucción lee el registro contador del temporizador TA0R y lo almacena en la
variable global sec. Al estar esta instrucción en la rutina de tratamiento de
interrupción del pulsador START, dicha lectura se puede producir en cualquier momento,
permitiendo generar distintos valores para esta variable global en distintas
ejecuciones del juego. Puesto que el programa genera la secuencia de colores a partir
de esta variable [más tarde en la rutina de tratamiento de TA1CCR0, a través de la
instrucción simbolo = (unsigned char) ((sec >> cont_sec) & 0x0001)], cada vez que se
juega se hace con una secuencia de colores distinta.
b. Indique qué cambios serían necesarios en el manejo de los temporizadores TA0 y TA1, tanto
en el programa principal, como en las rutinas de interrupción RTI_P2(), RTI_TA1CCR0() y
RTI_TA0CCR0() para que la aplicación se comporte de la misma manera. No olvide justificar
los cálculos que realice (1p).
Antes de realizar el cambio a uttilizar ACLK los temporizadores estaban configurados
para realizar interrupciones cada 250 ms. Al conservar la división por 8 de la
frecuencia de ACLK en la configuración anterior, tenemos que para conseguir una
interrupción de los temporizadores igual a la que se tenía antes necesitamos cargar los
registros de captura y comparación con un valor N = 0,250 / (8 / 32768) = 1024.
Así, en cada instrucción en que se tenga un incremento del valor de TACCR0 o de
TA1CCR0, basta con utilizar este valor en lugar del de 31250 que se tenía antes. Así,
en el programa principal, deberemos escribir TA0CCR0 = TA0R + 1024 al final de la Tarea
0. En RTI_TA0CCR0(), pondremos TA0CCR0 += 1024 al principio; En RTI_TA1CCR0(),
pondremos TA1CCR0 += 1024 igualmente, al principio. Y en RTI_P2(void) pondremos TA1CCR0
= TA1R + 1024;, casi al final.
c. ¿Cuál es el modo de menor consumo que podría utilizarse ahora (en lugar de LPM0) en el
programa principal? No olvide justificar su respuesta (0,5p).
Podríamos utilizar LMP3, puesto que en dicho modo la señal ACLK permanece habilitada.
Por tanto se podría tener, al principio del bucle for del programa principal, la
instrucción __low_power_mode_3().
1 En la subrutina Config_Puertos() suponga que ya se han realizado los cambios necesarios P2SEL_bit.P6 = P2SEL_bit.P7 =
ON; y P2DIR_bit.P7 = ON;
-7/8-
MEJORAS AL PROGRAMA (1,5p)
5. Suponga ahora que se le solicita que utilice solamente un temporizador, TA0, para realizar toda la
funcionalidad del programa. Realice los cambios necesarios para sustituir la interrupción asociada a
TA1 por otra nueva asociada a TA0CCR1, que cumpla la misma finalidad.
a. Indique los cambios necesarios en la configuración de los temporizadores que se realiza en el
programa principal (0,25p)
Al tenerse ahora un solo temporizador, basta con tener únicamente una instrucción en la
función Config_Timers:
TA0CTL = TASSEL_1 + ID_3 + MC_2 + TACLR;
b. Programe la nueva rutina RTI_TA0CCR1 que debe hacer exactamente lo mismo que la
RTI_TA1CCR0 (recuerde que queremos prescindir del temporizador TA1) (1p)
#pragma vector = TIMER0_A1_VECTOR
__interrupt void RTI_TA0CCR1(void) {
static unsigned char num_int_TA0_1 = 0; // Numero interrupciones TA0CCR1
switch (__even_in_range(TA0IV,10))
{
case 2:
{
TA0CCR1 += 1024;
num_int_TA0_1++;
if (num_int_TA0_1 == 1) { // Si 250ms
P2OUT_bit.P3 = P2OUT_bit.P4 = LED_OFF;
}
else if (num_int_TA0_1 == 2) { // Si 250ms
num_int_TA0_1 = 0;
TA0CCTL1_bit.CCIE = OFF;
comprobar_simbolo = ON;
__low_power_mode_off_on_exit(); // Sale bajo consumo
} // else if (num_int_TA0_1 == 2)
break;
} // case 2
case 4: break;
case 10: break;
} // switch
}
-8/8-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 15 DE JUNIO DE 2015
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
c) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
d) NO OLVIDE JUSTIFICAR TODAS SUS RESPUESTAS
Las notas musicales se obtienen mediante la generación de PWMs de distinta frecuencia, los cuales se
dirigen a un altavoz. Las teclas del piano son pulsadores con el siguiente esquema de conexionado:
1
#include "msp430g2533.h" /* === FUNCIONES ================================= */
} // while (tareas.total != 0)
} // for (;;)
} // int main(void)
2
NOTA: En C el operador “>>” realiza un desplazamiento binario a la derecha. Su sintaxis es “var >> N”,
e indica que la variable “var” se desplaza “N” bits a la derecha. Así por ejemplo, si la variable “var”
tiene el valor “01101001” y “N” tiene el valor “2” la operación que se realiza es:
Teniendo en cuenta el código anterior, conteste de forma justificada a las siguientes preguntas.
1. Reescriba la función “Config_Perifericos()” en ensamblador. [1.5 puntos]
NOTA: No es necesario que sustituya las etiquetas de los registros de los periféricos (PxDIR, PxREN,
PxOUT, PxIES, PxIFG, PxIE, PxSEL, TA1CCRx, TA1CCTLx, TA1CTL) por su valor, aunque sí
es necesario sustituir las etiquetas de los campos de configuración de dichos registros (BITx,
OUTMOD_x, TASSEL_x, MC_x, TACLR) por su valor.
C Ensamblador
P1DIR = 0x00; MOV.B #0x00, &P1DIR
P1REN = 0xFF; MOV.B #0xFF, &P1REN
P1OUT = 0x00; MOV.B #0x00, &P1OUT
P1IES = 0x00; MOV.B #0x00, &P1IES
P1IFG = 0x00; MOV.B #0x00, &P1IFG
P1IE = 0xFF; MOV.B #0xFF, &P1IE
P2REN = 0x0F; MOV.B #0x0F, &P2REN
P2OUT = 0x00; MOV.B #0x00, &P2OUT
P2IES = 0x00; MOV.B #0x00, &P2IES
P2IFG = 0x00; MOV.B #0x00, &P2IFG
P2IE = 0x0F; MOV.B #0x0F, &P2IE
TA1CCR0 = 0x0000; MOV.W #0x0000, &TA1CCR0
TA1CCR2 = 0x0000; MOV.W #0x0000, &TA1CCR2
TA1CCTL2 = OUTMOD_7; MOV.W #0x00E0, &TA1CCTL2
TA1CTL = TASSEL_1 + MC_3 + TACLR; MOV.W #0x0134, &TA1CTL
P2DIR |= BIT5; BIS.B #0x20, &P2DIR
P2SEL |= BIT5; BIS.B #0x20, &P2SEL
3
Las instrucciones “P2DIR = BIT5; P2SEL = BIT5;” configuran el bit 5 (BIT5) de los
registros “P2DIR” y “P2SEL”, poniendo a “0” el valor del resto de bits de dichos registros
(desactivando por lo tanto el cristal de cuarzo como fuente de la señal de reloj ACLK).
3. Deduzca la función que cumplen las variables “key1” y “key2”, modificadas en la rutina de
interrupción “RTI_WD()”, completando además la siguiente tabla que indica el valor de dichas
variables en función de la tecla presionada. [1.5 puntos]
NOTA: No se considerará válida la respuesta sin la correspondiente justificación de la misma, debiendo
analizar detalladamente los casos de presionar las teclas “C” y “A#”.
C 0x01 0x00
C# 0x02 0x00
D 0x04 0x00
D# 0x08 0x00
E 0x10 0x00
F 0x20 0x00
F# 0x40 0x00
G 0x80 0x00
G# 0x00 0x01
A 0x00 0x02
A# 0x00 0x04
B 0x00 0x08
Estas variables contienen el valor leído de los puertos P1 y P2 donde están conectadas las teclas del
piano, eliminando mediante la operación AND (“&”) los valores leídos en aquellos pines que no tienen
teclas conectadas.
Según el conexionado de los pulsadores que forman las teclas se genera un “0” cuando las mismas están
soltadas y un “1” cuando están presionadas. Así pues, las variables “key1” y “key2” contienen las
teclas que en cada momento se encuentran presionadas en el piano, siendo la variable “key1” utilizada
para las teclas del puerto P1 (C..G) y la variable “key2” utilizada para las teclas del puerto P2 (G#..B).
Para el caso de presionar la tecla “C” se genera un “1” en el pin P1.0, por lo que el registro “P1IN”
valdrá “0x01”, siendo éste el valor asignado a la variable “key1”.
Para el caso de presionar la tecla “A#” se genera un “1” en el pin P2.2, por lo que el registro “P2IN”
valdrá “0x04”, siendo éste el valor asignado a la variable “key2”.
4
4. Analice la función que cumplen los bucles “while (((key1 >> cont) & 0x01) == 0)
{cont++;}” y “while (((key2 >> cont) & 0x01) == 0) {cont++;}” de la tarea
“tareas.f0”, completando además la siguiente tabla que indica el valor de la variable “cont” en
función de la tecla presionada. [2.0 puntos]
NOTA: No se considerará válida la respuesta sin la correspondiente justificación de la misma, debiendo
analizar detalladamente los casos de presionar las teclas “C” y “A#”.
Tecla cont
C 0
C# 1
D 2
D# 3
E 4
F 5
F# 6
G 7
G# 0
A 1
A# 2
B 3
Estos bucles sirven para buscar en las variables “key1” y “key2” el primer bit a “1” (comenzando por
el bit menos significativo LSB). Como las variables “key1” y “key2” contienen un “1” para las teclas
presionadas en el piano, estos bucles se utilizan para localizar las teclas presionadas en un momento
determinado.
Para el caso de presionar la tecla “C” la variable “key1” tiene el valor “0x01”, por lo que se ejecuta el
primer bucle “while” que buscará el primer “1” de dicha variable. El primer “1” se encuentra ubicado en
la bit “0”, por lo que la variable “cont” tomará dicho valor (“0”).
Para el caso de presionar la tecla “A#” la variable “key2” tiene el valor “0x04”, por lo que se ejecuta
el segundo bucle “while” que buscará el primer “1” de dicha variable. El primer “1” se encuentra
ubicado en el bit “2”, por lo que la variable “cont” tomará dicho valor (“2”).
5
5. Calcule para cada tecla del piano tanto la frecuencia y el ciclo de trabajo del PWM generado como los
valores de los registros “TA1CCR0” y “TA1CCR2” asociados a la misma. [2.5 puntos]
NOTA: No se considerará válida la respuesta sin la correspondiente justificación de la misma, debiendo
analizar detalladamente los casos de presionar las teclas “C” y “A#”.
La frecuencia del PWM está determinado por el valor del registro “TA1CCR0” del temporizador TA1.
El temporizador opera con la señal de reloj ACLK de 32768 Hz (TASSEL_1), por lo que cada cuenta
del mismo equivale a:
Tc = (1 / 32768)
Al estar el temporizador configurado en modo ascendente/descendente el número de ciclos que cuenta
el temporizador una vez determinado el valor del registro “TA1CCR0” es:
N = (2*TA1CCR0)
Así pues, el periodo del PWM generado es:
T = N * Tc = (2*TA1CCR0) * (1 / 32768) = (2*TA1CCR0) / 32768
Por lo tanto, la frecuencia del PWM generado es:
f = 32768 / (2*TA1CCR0)
Para determinar el valor de la frecuencia del PWM de cada tecla es necesario conocer el valor del
registro “TA1CCR0” asociado a cada uno. Dicho valor se obtiene en la tarea “tareas.f0” mediante
los arrays “frec1[]” y “frec2[]”.
Por último, el ciclo de trabajo está determinado por el valor del registro “TA1CCR2” del temporizador
TA1. Dicho valor es siempre “0”, por lo que se puede deducir de la ecuación que determina el ciclo de
trabajo para el modo reset/set (OUTMOD_7) con cuenta ascendente/descendente (MC_3):
Ciclo = (TA1CCR0 – TA1CCR2) / (2*TA1CCR0) = [TA1CCR2 = 0] = 50 %
6
Para el caso de presionar la tecla “C” la variable “key1” tiene el valor “0x01”, por lo que se ejecuta el
primer bucle “while” y se le asigna a la variable “cont” el valor “0”. Por lo tanto el registro
“TA1CCR0” tomará el valor “frec1[0]” que vale “63” y se corresponde con una frecuencia de
260.06 Hz.
Para el caso de presionar la tecla “A#” la variable “key2” tiene el valor “0x04”, por lo que se ejecuta
el segundo bucle “while” y se le asigna a la variable “cont” el valor “2”. Por lo tanto el registro
“TA1CCR0” tomará el valor “frec2[2]” que vale “35” y se corresponde con una frecuencia de
468.11 Hz.
6. Después de inicializar el sistema y entrar en el modo de bajo consumo se producen las siguientes
acciones en el sistema:
a) Se presiona la tecla “G#”
b) Se presionan simultáneamente las teclas “D#” y “F”
c) Se suelta la tecla “F”
Indique el valor de las variables “key1”, “key2”, “cont” y del registro “TA1CCR0” tras ejecutar el
código completo asociado a las rutinas de interrupción y las tareas y regresar al bajo consumo después
de cada una de dichas acciones: [2.0 puntos]
Presionar Presionar Soltar
“G#” “D#” y “F” “F”
key1 0x00 0x28 0x08
key2 0x01 0x01 0x01
cont 0 3 3
TA1CCR0 39 53 53
Al presionar la tecla “G#” se genera un “1” en el pin P2.0 y se activa la interrupción del puerto P2. Esta
interrupción deshabilita todas las teclas (“P1IE = 0x00; P2IE = 0x00;”), activa el antirrebote
de 16 ms (“WDTCTL = WDT_ADLY_16;”) y conmuta el flanco de detección de la tecla presionada
“G#” (“P2IES ^= P2IFG;”). Cuando se ejecuta la interrupción del Watchdog asociada al antirrebote
se limpian los flags de interrupción de todas las teclas (“P1IFG = 0x00; P2IFG = 0x00;”), se
vuelven a habilitar las mismas (“P1IE = 0xFF; P2IE = 0x0F;”) y se actualizan las variables
“key1” y “key2” según las teclas actualmente presionadas, por lo que “key1 = 0x00” (ninguna
tecla) y “key2 = 0x01” (tecla “G#”). Con estos valores en las variables “key1” y “key2” la tarea
“tareas.f0” le asigna a la variable “cont” el valor “0” y al registro “TA1CCR0” el valor del array
“frec2[0]” que es “39”.
Al presionar las teclas “D#” y “F” se genera un “1” en los pines P1.3 y P1.5 y se activa la interrupción
del puerto P1. Esta interrupción deshabilita todas las teclas (“P1IE = 0x00; P2IE = 0x00;”),
activa el antirrebote de 16 ms (“WDTCTL = WDT_ADLY_16;”) y conmuta el flanco de detección de
las teclas presionadas “D#” y “F” (“P1IES ^= P1IFG;”). Cuando se ejecuta la interrupción del
7
Watchdog asociada al antirrebote se limpian los flags de interrupción de todas las teclas (“P1IFG =
0x00; P2IFG = 0x00;”), se vuelven a habilitar las mismas (“P1IE = 0xFF; P2IE =
0x0F;”) y se actualizan las variables “key1” y “key2” según las teclas actualmente presionadas, por
lo que “key1 = 0x28” (teclas “D#” y “F”) y “key2 = 0x01” (tecla “G#”). Con estos valores en
las variables “key1” y “key2” la tarea “tareas.f0” le asigna a la variable “cont” el valor “3” y al
registro “TA1CCR0” el valor del array “frec1[3]” que es “53”.
Al soltar la tecla “F” se genera un “0” en el pin P1.5 y se activa la interrupción del puerto P1. Esta
interrupción deshabilita todas las teclas (“P1IE = 0x00; P2IE = 0x00;”), activa el antirrebote
de 16 ms (“WDTCTL = WDT_ADLY_16;”) y conmuta el flanco de detección de la tecla presionada
“F” (“P1IES ^= P1IFG;”). Cuando se ejecuta la interrupción del Watchdog asociada al antirrebote
se limpian los flags de interrupción de todas las teclas (“P1IFG = 0x00; P2IFG = 0x00;”), se
vuelven a habilitar las mismas (“P1IE = 0xFF; P2IE = 0x0F;”) y se actualizan las variables
“key1” y “key2” según las teclas actualmente presionadas, por lo que “key1 = 0x08” (tecla “D#”)
y “key2 = 0x01” (tecla “G#”). Con estos valores en las variables “key1” y “key2” la tarea
“tareas.f0” le asigna a la variable “cont” el valor “3” y al registro “TA1CCR0” el valor del array
“frec1[3]” que es “53”.
8
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 19 DE SEPTIEMBRE DE 2014
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
c) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
1/8
A continuación se muestra el código correspondiente al sistema:
#include "msp430g2533.h" /* ===== FUNCIONES ============================= */
2/8
#pragma vector = PORT1_VECTOR if ((P1IFG & P1IES) != 0) {
__interrupt void RTI_P1(void) { if (P1IFG & 0x01) puls = 0;
P1IE = 0x00; if (P1IFG & 0x02) puls = 1;
WDTCTL = WDT_ADLY_16; if (P1IFG & 0x04) puls = 2;
IFG1 &= ~(WDTIFG); if (P1IFG & 0x08) puls = 3;
IE1 |= (WDTIE); P2OUT = (0x01<<puls);
if (estado.f0 == 0) { TA0CCR0 = TA0R + 0x0400;
estado.f0 = 1; TA0CCTL0 &= ~(CCIFG);
tmp = TA0R; TA0CCTL0 |= (CCIE);
sec_m = 4*(1+((tmp>>4)&0x03)); } // if ((P1IFG & P1IES) == 1)
sec_v = (tmp>>0)&0x03; } // if (estado.f2 == 1)
sec_t = (tmp>>2)&0x03; P1IES ^= P1IFG;
sec_n = 1; P1IFG = 0x00;
sec_c = 0; if (tareas.total != 0) {
estado.f1 = 1; __low_power_mode_off_on_exit();
tareas.f0 = 1; } // if (tareas.total)
} // if (estado.f0 == 0) } // __interrupt void RTI_P1(void)
if (estado.f2 == 1) {
Para simplificar tanto el diseño como el análisis del sistema se considera que nunca se podrá presionar
más de un pulsador simultáneamente. Teniendo en cuenta el código anterior y el esquema del sistema,
conteste de forma justificada cada una de las siguientes cuestiones.
1. Describa cuándo y cómo se determina la longitud de la secuencia generada. [1.0 puntos]
La longitud de la secuencia generada se almacena en la variable sec_m, la cual se inicializa en la
rutina de tratamiento de interrupción del puerto 1 correspondiente a los pulsadores RTI_P1().
Analizando el código de dicha rutina de tratamiento de interrupción, se observa que dicha variable se
inicializa cuando el flag estado.f0 se encuentra a “0”, poniéndose posteriormente a “1” y no
volviéndose a modificar en el resto del código. Por lo tanto, esta flag indica si es la primera vez que se
presiona alguno de los pulsadores, en cuyo caso se procede a inicializar el sistema y con ello la variable
sec_m que almacena la longitud de la secuencia generada.
Respecto a la forma en la que se inicializa esta variable, se puede observar en el código que en primer
lugar se captura el valor del temporizador 0 TA0R en el momento en el que se presiona algún pulsador,
valor que es totalmente aleatorio al comenzar a operar dicho temporizador en la inicialización del
sistema. Con el valor aleatorio de dicho temporizador se realiza la siguiente operación:
tmp = TA0R;
sec_m = 4*(1+((tmp>>4)&0x03));
la cual sirve para quedarse con los bits 4 y 5 de dicho valor aleatorio ((tmp>>4)&0x03), que será así
pues otro valor aleatorio de 2 bits, con valores comprendidos entre “0” y “3”. A este valor se le suma
“1” para obtener otro valor entre “1” y “4”, y por último se multiplica por “4” para generar un valor
entre “4” y “16”.
Por lo tanto, la longitud de la secuencia generada puede ser “4”, “8”, “12” ó “16”, longitud que se
determina la primera vez que se presiona algún pulsador.
-3/8-
2. Indique cuándo y cómo se genera la secuencia. [1.5 puntos]
La secuencia generada se almacena en la variable sec_v. Dicha secuencia no se genera de una vez,
sino que se va generando poco a poco. El primer valor de la secuencia se genera la primera vez que se
presiona algún pulsador, junto con la inicialización de la longitud de la secuencia generada. Dicha
operación se realiza en la rutina de tratamiento de interrupción del puerto 1 correspondiente a los
pulsadores RTI_P1(), cuando el flag estado.f0 se encuentra a “0”:
tmp = TA0R;
...
sec_v = (tmp>>0)&0x03;
El resto de los valores de la secuencia se genera en el código correspondiente a la tarea tareas.f1,
cada vez que se introduce una secuencia completa (sec_c == sec_n):
tmp = TA0R;
sec_v += ((tmp>>0)&0x03)<<2*sec_c;
Respecto a la forma en la que se genera esta variable, se utiliza el valor aleatorio del temporizador,
quedándose con los bits 0 y 1 de dicho valor aleatorio ((tmp>>0)&0x03), que será así pues otro valor
aleatorio de 2 bits, con valores comprendidos entre “0” y “3”, correspondiéndose con los LEDs a
encender: “0” Rojo ; “1” Amarillo ; “2” Azul ; “3” Verde. Conforme se van generando
estos valores, se van almacenando en la variable sec_v debidamente desplazados (<<2*sec_c).
3. Explique la finalidad de cada uno de los bits utilizados en el código para las variables tareas y
estado. [1.25 puntos]
Según el análisis del código se puede deducir que:
tareas.f0: tarea que se encarga de mostrar un LED de la secuencia.
-4/8-
4. Calcule el tiempo que puede permanecer encendido cada LED de la secuencia generada mientras se
muestra. [2.5 puntos]
El tiempo que cada LED permanece encendido se almacena en la variable sec_t. Dicho valor, al igual
que la secuencia generada, no se obtiene de una vez, sino que se va obteniendo poco a poco. El primer
valor se obtiene la primera vez que se presiona algún pulsador, en la rutina de tratamiento de
interrupción del puerto 1 correspondiente a los pulsadores RTI_P1(), cuando el flag estado.f0 se
encuentra a “0”:
tmp = TA0R;
...
sec_t = (tmp>>2)&0x03;
El resto de los valores se obtiene en el código correspondiente a la tarea tareas.f1, cada vez que se
introduce una secuencia completa (sec_c == sec_n):
tmp = TA0R;
...
sec_t += ((tmp>>2)&0x03)<<2*sec_c;
Respecto a la forma en la que se obtienen estos valores, se utiliza el valor aleatorio del temporizador,
quedándose con los bits 2 y 3 de dicho valor aleatorio ((tmp>>2)&0x03), que será así pues otro valor
aleatorio de 2 bits, con valores comprendidos entre “0” y “3”. Conforme se van obteniendo estos
valores, se van almacenando en la variable sec_t debidamente desplazados (<<2*sec_c).
Por otra parte, la encargada de mostrar los LEDs de la secuencia es la tarea tareas.f0, que en
primer lugar enciende el LED correspondiente según el valor almacenado en la variable sec_v:
tmp = (sec_v>>2*sec_c)&0x03;
P2OUT = (0x01<<tmp);
Seguidamente, según el valor almacenado en la variable sec_t, programa el módulo TA0CCR1 del
temporizador 0 para que deje encendido durante un tiempo determinado el LED:
tmp = (sec_t>>2*sec_c)&0x03;
TA0CCR1 = TA0R + (0x8000>>tmp);
Por último, programa el módulo TA0CCR2 del temporizador 0 para que deje apagado durante un
tiempo determinado el LED:
TA0CCR2 = TA0CCR1 + (0x8000>>tmp);
Según se puede observar, el valor programado en los módulos del temporizador depende del valor
almacenado en la variable sec_t, el cual se recupera en la variable temporal tmp. Así pues:
tmp = 0 TA0CCR1 = TA0R + 0x8000; TA0CCR2 = TA0CCR1 + 0x8000;
Es decir, que se pueden esperar “0x8000”, “0x4000”, “0x2000” o “0x1000” ciclos. Analizando la
configuración del temporizador 0 en la función Config_Perifericos():
TA0CTL = TASSEL_1 + ID_1 + MC_2 + TACLR;
se observa que opera con la señal de reloj ACLK (TASSEL_1) dividida por 2 (ID_1) en modo continuo
(MC_2). Así pues, la frecuencia de la señal de reloj que utiliza el temporizador es:
-5/8-
f = (32768 Hz)/2 = 16384 Hz
Por lo que el número de ciclos anteriormente indicado se corresponde con:
0x8000 ciclos = 32768 ciclos 2 s
0x4000 ciclos = 16384 ciclos 1 s
0x2000 ciclos = 8192 ciclos 0.5 s
0x1000 ciclos = 4096 ciclos 0.25 s
-6/8-
conmutando desde el estado mostrar secuencia (estado.f1 = 0;) al estado introducir secuencia
(estado.f2 = 1;) y apagándose además todos los LEDs (P2OUT = 0x00;). Así pues, el efecto
final es que cuando se acaba de mostrar la secuencia se encienden todos los LEDs durante 125 ms.
-7/8-
6. Explique la función de las siguientes instrucciones del código: [0.75 puntos]
a) P2DIR |= 0x0F; (0.25 puntos)
Esta instrucción configura los 4 pines menos significativos del puerto 2 (P2.0 a P2.3) como pines de
salida, sin modificar además la configuración de los 4 pines más significativos del puerto 2 (P2.4 a
P2.7). Sirve, pues, para configurar los pines P2.0 a P2.3 de forma que activen los LEDs del sistema.
-8/8-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 20 DE DICIEMBRE DE 2012
EXAMEN DE MICROCONTROLADORES TIEMPO: 3 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
c) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
DATOS:
a) CONSTANTES DEL FICHERO DE CABECERA “io430g2533.h”:
− #define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */
− #define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */
− #define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */
− #define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */
− #define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */
− #define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */
− #define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */
− #define USCIAB0TX_VECTOR (6 * 2u) /* 0xFFEC USCI A0/B0 Transmit */
− #define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1, CC2, TA1 */
Se desea diseñar un juego de ingenio basado en el microcontrolador MSP430G2533. Dicho juego pretende
acertar un código de longitud variable generado aleatoriamente, compuesto por dígitos comprendidos entre 0
y 3. Para ello se dispone de un teclado numérico y un LCD que se conectan al microcontrolador a través del
bus I2C (los detalles y el funcionamiento de esta conexión I2C no son relevantes para resolver este examen).
Adicionalmente, se dispone de dos pulsadores, Inicio y Reset. La Figura 1 muestra el esquema del sistema.
-1/7-
En el esquema de la Figura 1 se puede apreciar que el teclado y el LCD están conectados directamente con
el microcontrolador mediante el bus I2C. El funcionamiento de estos elementos es el siguiente:
– Cuando se pulsa una tecla en el teclado se transmite al microcontrolador a través del bus I2C,
activando la rutina de interrupción RTI_I2C. Esta rutina de interrupción analiza las teclas pulsadas,
y si se corresponden con dígitos comprendidos entre 0 y 3 se almacenan en el array sec2. Cuando el
número de dígitos almacenados coincide con la longitud del código generado se activa la tarea
tareas.f1 del sistema.
– La función Write_LCD(char *string) se encarga de enviar a través del bus I2C una cadena de
caracteres para que el LCD la muestre por pantalla.
El funcionamiento del juego se describe a continuación:
1. Inicialmente el microcontrolador genera un código aleatorio formado por una secuencia de dígitos
entre 0 y 3.
2. Después de generar el código el usuario utilizará el teclado para introducir una secuencia de dígitos
entre 0 y 3, con el objetivo de intentar acertar el código generado.
3. Una vez introducida la secuencia del usuario el microcontrolador la compara con el código generado
e indica en el LCD cuántos dígitos iguales (y que además coincidan con la misma posición del
código generado) tiene la secuencia introducida, aunque no indica qué dígitos son los que coinciden.
4. Si ambas secuencias coinciden totalmente, se habrá acertado el código generado.
En la Figura 2 se muestra un ejemplo en la que el usuario necesita de siete intentos para adivinar el código
generado “2 – 0 – 1”:
0 , 0 ,0 Aciertos: 1
1 , 1 ,1 Aciertos: 1
2 , 2 ,2 Aciertos: 1
3 , 3 ,3 Aciertos: 0
Aciertos: 1
2 , 3 ,3
2 , 1 ,0 Aciertos: 1
Figura 2. Ejemplo.
-2/7-
A continuación se muestra el código correspondiente al sistema:
#include "io430g2533.h" Write_LCD("Juego superado!");
#include "stdio.h" __disable_interrupt();
__low_power_mode_4();
/* ====== CONSTANTES ============================= */ } // if (tam > COD)
tareas.f0 = 1;
#define COD 8 } // if (suc == tam)
} // if (tareas.f1)
/* ====== TIPOS DATOS ============================ */ if (tareas.f2) {
tareas.f2 = 0;
typedef union { Write_LCD("--- GAMEOVER ---");
unsigned volatile char total; __disable_interrupt();
struct { __low_power_mode_4();
unsigned char f0 :1; } // if (tareas.f2)
unsigned char f1 :1; } // while (tareas.total)
unsigned char f2 :1; } // for (;;)
}; } // int main(void)
} flags;
/* ====== FUNCIONES ============================= */
/* ====== VARIABLES GLOBALES ===================== */
void Config_uC(void) {
flags tareas; WDTCTL = WDTPW + WDTHOLD;
unsigned char tam, niv, time, sec1[COD], sec2[COD]; DCOCTL = 0;
char text[16+1]; BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
/* ====== PROTOTIPOS ============================= */ P2DIR = BIT7;
P2SEL = BIT7 + BIT6;
void Config_uC(void); } // void Config_uC(void)
void Config_Timers(void);
void Config_Ports(void); void Config_Timers(void) {
void Config_I2C(void); TA0CTL = TASSEL_2 + ID_1 + MC_2 + TACLR;
void Write_LCD(char *string); TA1CCR0 = 0xF000;
TA1CTL = TASSEL_1 + ID_3 + TACLR + TAIE;
/* ====== PROGRAMA PRINCIPAL ===================== */ } // void Config_Timers(void)
-3/7-
Puntuación:
– Respuesta correcta : +0.5 puntos
– Respuesta incorrecta : –0.17 puntos
– Respuesta en blanco : +0.0 puntos
indicar cuál sería la longitud máxima que se podría obtener para dicho código:
a. 5
b. 8
c. No se puede realizar dicha modificación
d. Ninguna de las otras opciones es correcta
4. Indicar el número de niveles que hay que pasar para superar el juego:
a. 2
b. 3
c. 4
d. Ninguna de las otras opciones es correcta
5. Indicar cuál es el grado de dificultad que se incrementa al aumentar el nivel del juego:
a. Se aumenta la longitud del código generado
b. Se reduce el tiempo permitido para acertar el código
c. Se reduce el número de intentos permitidos para acertar el código
d. Ninguna de las otras opciones es correcta
-4/7-
6. Indicar cuál es el número de intentos permitidos para intentar acertar el código en un nivel:
a. 8
b. 16
c. 20
d. Ninguna de las otras opciones es correcta
7. Indicar cuál es el tiempo permitido para intentar acertar el código en un nivel:
a. 15 segundos
b. 30 segundos
c. Depende del nivel
d. Ninguna de las otras opciones es correcta
8. Indicar qué ocurre si no se consigue acertar el código de un nivel en el tiempo permitido:
a. El juego comienza de nuevo desde el primer nivel
b. El juego comienza de nuevo desde el nivel actual
c. El juego finaliza y el sistema se bloquea
d. Ninguna de las otras opciones es correcta
9. Indicar la longitud del código en el nivel 3:
a. 3
b. 7
c. 8
d. Ninguna de las otras opciones es correcta
10. Indicar cuál es la utilidad del pulsador Inicio:
a. Generar el código y comenzar el juego
b. Comenzar otra partida una vez que se ha superado el juego
c. Reiniciar el juego durante una partida
d. Ninguna de las otras opciones es correcta
11. Indicar si es necesario incorporar un sistema antirrebote para el pulsador Inicio:
a. Sí, todos los pulsadores necesitan siempre un sistema antirrebote
b. No, pues al utilizar una resistencia de pullup interna en el pin P1.3 no se producen rebotes
c. Depende del código generado
d. Ninguna de las otras opciones es correcta
12. Indicar qué ocurre si se presiona el pulsador Inicio una vez ha comenzado el juego:
a. Nada
b. Se reinicia el juego
c. Depende del nivel en el que se encuentre la partida
d. Ninguna de las otras opciones es correcta
13. Indicar cómo se puede comenzar otra partida una vez que se ha superado el juego:
a. No se puede
b. Presionando el pulsador Inicio
c. Comienza automáticamente
d. Ninguna de las otras opciones es correcta
-5/7-
14. Indicar si es posible reiniciar el juego durante una partida:
a. No
b. Sí, siempre
c. Sí, pero únicamente tras superar el primer nivel
d. Ninguna de las otras opciones es correcta
15. Indicar qué utilidad tiene el pulsador Reset:
a. Ninguna, pues su funcionalidad es la misma que la del pulsador Inicio
b. Reinicia el juego si todavía no se ha llegado al final del mismo
c. Reinicia el juego en cualquier momento
d. Ninguna de las otras opciones es correcta
16. Indicar qué funcionalidad tiene la tarea tareas.f0 del sistema:
a. Generar un código de longitud máxima para todos los niveles al principio del juego
b. Generar un código de la longitud adecuada al principio de cada nivel
c. Generar un código cada vez que se presione el pulsador Inicio
d. Ninguna de las otras opciones es correcta
17. Indicar qué información almacena el array sec1 del sistema:
a. La secuencia introducida por el usuario
b. El valor decimal entre 0 y 9 de los dígitos menos significativos del temporizador TA0R
c. El valor decimal entre 0 y 9 de los dígitos más significativos del temporizador TA0R
d. Ninguna de las otras opciones es correcta
18. Indicar si es posible utilizar el modo de bajo consumo LPM3 en el sistema:
a. Sí
b. No, pues se deshabilitaría la interrupción correspondiente al pulsador Inicio
c. No, pues se deshabilitaría el funcionamiento del temporizador TA0
d. Ninguna de las otras opciones es correcta
19. Desde el punto de vista del usuario, indicar la diferencia que se percibe entre superar y no superar el
juego:
a. Ninguna
b. El texto que aparece en el LCD
c. Si no se supera el juego el sistema se bloquea, y si se supera comienza automáticamente de nuevo
d. Ninguna de las otras opciones es correcta
20. Indicar si existe alguna limitación de tiempo máximo para superar el juego:
a. No, se puede emplear todo el tiempo que se requiera
b. Sí, la suma de los tiempos permitidos para cada uno de los niveles, que es 7.5 minutos
c. Sí, el tiempo permitido para el nivel más complejo, que es 3.5 minutos
d. Ninguna de las otras opciones es correcta
-6/7-
Instrucciones:
– Para seleccionar una respuesta : marcarla
– Para borrar una respuesta marcada : rodearla con un círculo
Respuesta
Pregunta
a b c d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-7/7-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 22 DE SEPTIEMBRE DE 2015
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
c) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
d) NO OLVIDE JUSTIFICAR TODAS SUS RESPUESTAS
Se desea implementar un módulo de marcación multifrecuencia de dos tonos para un teléfono, mediante un
microcontrolador MSP430G2533. Para ello se dispone del siguiente esquema hardware.
Los tonos que permiten diferenciar las pulsaciones de los doce botones del teléfono (‘0’-‘9’, más ‘*’ y ‘#’)
se generan mediante señales PWM de distinta frecuencia, que se dirigen a un filtro que los combina antes de
enviarlos a la línea telefónica y al teléfono. Cada fila de botones se corresponde con una frecuencia distinta.
Igualmente, cada columna de botones se corresponde con otra frecuencia. La pulsación de una tecla genera
por tanto dos frecuencias, correspondientes a la fila y a la columna de cada botón.
Cada botón del teléfono es un pulsador conectado como en la figura, que muestra el
ejemplo del 3, conectado a los terminales de la fila y la columna que le
corresponden.
A continuación se muestra el código implementado en el microcontrolador:
1
#include "msp430g2533.h" void Config_Perifericos(void) {
P1DIR = 0x00;
/* === TIPOS DATOS =============================== */ P1REN = 0x7F;
P1OUT = 0x00;
typedef union {
unsigned char total; P1IES = 0x00;
struct { P1IFG = 0x00;
unsigned char play_tonos: 1; P1IE = 0x7F;
unsigned char apagar_tonos: 1;
}; P2DIR |= BIT1+BIT6;
} Tareas; P2SEL |= BIT1+BIT6;
TA0CCTL1 = OUTMOD_7;
/* === VARIABLES GLOBALES ======================== */ TA1CCTL1 = OUTMOD_7;
TA0CTL = TASSEL_2 + TACLR;
Tareas tareas; TA1CTL = TASSEL_2 + TACLR;
} // void Config_Perifericos(void)
int tonosfilas[4] = {0xXX,0xXX,0xXX,0xXX}; // Preg. 2
int tonoscolumnas[3] = {0xXX,0xXX,0xXX}; // Preg. 2 unsigned char Contar(unsigned char valor) {
unsigned char col = 0, fil = 0; unsigned char contador = 0;
2
NOTA: En C el operador “>>” realiza un desplazamiento binario a la derecha. Su sintaxis es “var >> N”,
e indica que la variable “var” se desplaza “N” bits a la derecha. Así por ejemplo, si la variable “var”
tiene el valor “01101001” y “N” tiene el valor “2” la operación que se realiza es:
Teniendo en cuenta el código anterior, conteste de forma justificada a las siguientes preguntas.
1. Explique en detalle cuál es la configuración inicial (justo tras la llamada a Config_Perifericos())
de los dos temporizadores TA0 y TA1. (1 punto)
Ambos temporizadores tienen idéntica configuración. Inicialmente se
encuentran en modo de comparación. La configuración de función especial
de los terminales P2.6 y P2.1 (P2DIR |= BIT1+BIT6; P2SEL |= BIT1+BIT6;)
nos indica que ambos temporizadores se encuentran preparados para
generar las dos señales PWM a partir de los bloques TA0CCR1 y TA1CCR1.
La configuración TA0CCTL1 = OUTMOD_7 y TA1CCTL1 = OUTMOD7 los deja en
modo de salida Reset/Set. En ambos casos, inicialmente la salida está a
cero, puesto que tras el RESET los bits OUT de TA0CCTL1 y TA1CCTL1 están
a cero. Ambos temporizadores están inicialmente parados, pero preparados
para funcionar a la frecuencia de 1MHz, puesto que están conectados a la
señal SMCLK (TA0CTL = TASSEL_2 + TACLR; TA1CTL = TASSEL_2 + TACLR;), que
la función Config_uC ha dejado configurado a esta frecuencia.
2. Las frecuencias de los tonos que debe generar el módulo son las que indica la siguiente tabla.
697 Hz 1 2 3
770 Hz 4 5 6
852 Hz 7 8 9
941 Hz * 0 #
Teniendo en cuenta la configuración de los temporizadores TA0 y TA1, indique todos los valores con los
que se han de inicializar los arrays int tonosfilas[4] e int tonoscolumnas[3]. Describa en
detalle el ejemplo del 3. (2 puntos)
Por un lado, recordamos que la configuración del reloj realizada en
Config_uC proporciona una señal interna SMCLK de fSMCLK=1MHz, y que la
configuración de los temporizadores los deja preparados para generar
señales PWM en modo de salida Reset/Set. Por otro lado, vemos en el
programa principal (en la tarea “play_tonos”) que, para generar las
3
señales PWM, se configura el temporizador en modo UP (TA0CTL = MC_1;
TA1CTL = MC_1). Por
último, observamos también que, en el programa principal, los valores
de los arrays tonosfilas y tonoscolumnas se utilizan directamente para
rellenar los valores de los registros de captura/comparación TA0CCR1
(filas) y TA1CCR1 (columnas), y, multiplicados por dos, para rellenar
los valores de TA0CCR0 (filas) y TA1CCR0 (columnas). Por tanto, con esta
configuración, modo UP y configuración RESET/SET, tenemos sendas señales
cuadradas con ciclo de trabajo del 50% y frecuencias FFILAS = FSMCLK
/(TA0CCR0 + 1) y FCOLUMNAS = fSMCLK /(TA1CCR0 + 1), o despejando el valor de
TA0CCR0 y TA1CCR0:
TA0CCR0 = FSMCLK/FFILAS - 1 y TA1CCR0 = FSMCLK/FCOLUMNAS – 1
Por tanto, como TAxCCR0 = 2*TAxCCR1 – 1, resulta:
TA0CCR1 = FSMCLK/(2*FFILAS) y TA1CCR1 = FSMCLK/(2*FCOLUMNAS)
En el caso que se nos pide detallar como ejemplo, el del botón 3, el
módulo debe generar dos frecuencias: 697 Hz para la fila y 1447 Hz para
la columna, resultando
TA0CCR1 = 1x106/(2*697) ≈ 717 y TA1CCR1 = 1x106/(2*1447) ≈ 346
Los arrays completos de valores resultan ser (tras redondear):
int tonosfilas[4] = {717, 649, 587, 531};
int tonoscolumnas[3] = {414, 374, 346};
O, en hexadecimal:
int tonosfilas[4] = {0x02CD, 0x0289, 0x024B, 0x0213};
int tonoscolumnas[3] = {0x19E, 0x0176, 0x015A};
3. Suponga que se pulsan dos botones exactamente a la vez. Por ejemplo, el 1 y el 2. Explique en detalle
qué es lo que sucede. (1,5 puntos)
Inicialmente el microcontrolador está en modo de bajo consumo LPM0. Si
se pulsan dos botones a la vez, la rutina de tratamiento de
interrupción, RTI_P1, configurará la RTI del watchdog e invertirá los
flancos a detectar en ambos terminales (P1IES ^= P1IFG). En la RTI del
watchdog, se borrarán ambos flags de P1IFG y se decodifican las filas y
las columnas que corresponden a los botones que siguen pulsados,
mediante la lectura del registro P1IN. Si se pulsan el 1 y el 2,
tendremos que P1IN toma el valor 00001011, y por tanto la variable fil
toma el valor 00000001, y la variable col toma el valor 00000011. La
expresión if ((Contar(fil)==1) && (Contar(col) == 1)) sería falsa,
puesto que Contar(col) daría un valor de 2. Por tanto no se entra en el
bloque if que deja en modo activo al microcontrolador y tras el retorno
de la RTI del watchdog el microcontrolador vuelve a su estado de bajo
consumo.
4
4. Suponga ahora que primero se pulsa el botón 1, pero no se suelta, durante un tiempo relativamente largo
(por ejemplo, un segundo). Antes de soltarlo, se pulsa el botón 2. A continuación se sueltan los dos botones
a la vez. Explique en detalle lo que sucede. ¿Por qué es necesaria la instrucción P1IES = 0x00 en la
función Config_Perifericos()? (1,5 puntos)
Inicialmente el microcontrolador está en modo de bajo consumo LPM0. Si
se pulsa el botón 1, la rutina de tratamiento de interrupción, RTI_P1,
configurará la RTI del watchdog. En la RTI del watchdog, se borrará el
flag de P1IFG y tendremos que la variable fil toma el valor 00000001, y
la variable col toma el valor 0000001 también. La expresión if
((Contar(fil)==1) && (Contar(col) == 1)) sería ahora verdadera, y a
continuación se activa la tarea tarea.play_tonos y se deja a la CPU en
modo activo tras la interrupción. En el programa principal, en la tarea
tarea.play_tonos, se generan los dos tonos de 697Hz y 1209Hz. Mientras
el botón no se suelte, los tonos siguen generándose. Si transcurrido un
tiempo se pulsa un segundo botón, el proceso anteriormente descrito se
repite hasta que, al igual que el ejercicio anterior, la comprobación
Contar(col) nuevamente da un valor igual a 2, con lo cual la rutina del
watchdog deja a la CPU en el estado de bajo consumo LPM0. Los tonos del
1 siguen generándose. Al soltar los botones, los flancos de bajada
generados dispararían la rutina RTI_P1 y consiguientemente RTI_WDT. Esta
vez la comprobación ((Contar(col) == 0) && (Contar(fil) == 0)) sería
verdadera, entrándose en el bloque if que programa la tarea
tarea.apagar_tonos y deja a la CPU en modo activo en el programa
principal. En la tarea tarea.apagar_tonos se detiene la generación de
señales PWM. Por su parte, la instrucción P1IES = 0x00 configura los
pulsadores para que se detecte la primera pulsación mediante el
correspondiente flanco de subida.
5
Realice la conexión del nuevo teclado avanzado en el sistema,
sustituyendo el teclado actual. (1 punto)
6. Modifique, en coherencia con su respuesta a la pregunta anterior, la parte del programa que gestiona las
rutinas de tratamiento de interrupción para que puedan detectarse las pulsaciones de la nueva columna de
botones. (1 punto)
La RTI_WD necesitaría realizar los siguientes cambios:
fil = (P1IN >> 3) & 0x0F; fil = (P1IN >> 4) & 0x0F;
7. Modifique, en coherencia con sus respuestas a las preguntas 5 y 6, el resto del programa (programa
principal, variables globales y funciones auxiliares) para que puedan detectarse las pulsaciones de la nueva
columna de botones. Necesariamente las nuevas variables globales incluirán un nuevo array int
tonoscolumnas[4] . (1 punto)
Y en la función Config_Perifericos():
P1REN = 0x7F P1REN = 0xFF
6
8. Si la nueva frecuencia correspondiente a esta columna es de 1633 Hz, ¿cuál es el nuevo valor a introducir
en el array int tonoscolumnas[4]? (1 punto)
Realizando los mismos cálculos que ya se hicieron en el ejercicio anterior,
TA1CCR1 = FSMCLK/(2*FCOLUMNAS) = 1x106/(2*1633) ≈ 306
Y por tanto la nueva instrucción sería
int tonoscolumnas[4] = {414, 374, 346, 306};
O, en hexadecimal:
int tonoscolumnas[4] = {0x19E, 0x0176, 0x015A, 0x0132};
7
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 28 DE JUNIO DE 2013
EXAMEN DE MICROCONTROLADORES TIEMPO: 2 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
c) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
-1/9-
A continuación se muestra el código correspondiente al sistema:
#include "io430g2533.h" }//else if(caracter_error)
/* ====== CONSTANTES ============================= */ indiceS_C++;
#define ON 1 indiceS_S=0;
#define OFF 0 if (tipo_pausa==TPP){
#define LED_ON 1 sec_car[indiceS_C++]=' ';
#define LED_OFF 0 }//if (tipo_pausa==TPP)
#define UdT 1024 if (tipo_pausa==TFT){
#define T_LED 256 sec_car[indiceS_C++]='$';
#define TPS 0 indiceS_C=0;
#define TPC 1 }//if (tipo_pausa==TPP)
#define TPP 2 }//if(tipo_pausa != TPS)
#define TFT 3 } // if (tareas.f1 == ON)
#define TAM_SEC_SIMB 5 } // while (tareas.total != OFF)
#define TAM_CAR 40 } // for (;;)
} // int main(void)
/* ====== TIPOS DATOS ============================ */
typedef union { /* ====== FUNCIONES ============================= */
unsigned volatile char total; void Config_uC(void) {
struct { WDTCTL = WDTPW + WDTHOLD;
unsigned char f0 :1; DCOCTL = 0;
unsigned char f1 :1; BCSCTL1 = CALBC1_1MHZ;
}; DCOCTL = CALDCO_1MHZ;
} flags; P2DIR = BIT7;
P2SEL = BIT7 + BIT6;
/* ====== VARIABLES GLOBALES ===================== */ } // void Config_uC(void)
flags tareas;
unsigned char tiempo_raya, simbolo, tipo_pausa, void Config_Perifericos(void) {
caracter_error, sec_simb[TAM_SEC_SIMB+1], indiceS_S, P1DIR_bit.P0 = P1DIR_bit.P6 = ON;
sec_car[TAM_CAR], indiceS_C; P1OUT_bit.P0 = P1OUT_bit.P6 =LED_OFF;
P1DIR_bit.P3 = OFF;
/* ====== PROTOTIPOS ============================= */ P1REN_bit.P3 = P1OUT_bit.P3=P1IES_bit.P3=ON;
void Config_uC(void); P1IFG_bit.P3 = OFF;
void Config_Perifericos(); P1IE_bit.P3 = ON;
unsigned char D_morse(unsigned char *); TA0CTL = TASSEL_1 | ID_3 | MC_2 | TACLR;
} // void Config_Perifericos(void)
/* ====== PROGRAMA PRINCIPAL ===================== */
unsigned char D_morse(unsigned char *secuencia) {
int main(void) { const static unsigned char caracteres[] =
Config_uC(); "#ETIANMSURWDKGOHVF#L#PJBXCYZQ##54#3###2#######16#
Config_Perifericos(); ######7###8#90";
unsigned char caracter;
tareas.total = 0; unsigned char posicion = 0;
tipo_pausa= TPS; unsigned char cont_aux = 0;
caracter_error=OFF; while (secuencia[cont_aux] != '\0') {
indiceS_S=0; if (secuencia[cont_aux] == '.') {
indiceS_C=0; posicion = (2*posicion)+1;
} // if (secuencia[cont_aux] == '.')
__enable_interrupt(); else if (secuencia[cont_aux] == '-') {
for (;;) { posicion = (2*posicion)+2;
__low_power_mode_0(); } // else if (secuencia[cont_aux] == '-')
while (tareas.total) { cont_aux++;
if (tareas.f0==ON) { }// while (secuencia[cont_aux] != '\0')
tareas.f0 = OFF; caracter = caracteres[posicion];
//pregunta 5 return(caracter);
if (indiceS_S < (TAM_SEC_SIMB)){ } // unsigned char D_morse(unsigned char *secuencia)
sec_simb[indiceS_S]=simbolo;
indiceS_S++; /* ====== RUTINAS TRATAMIENTO INTERRUPCION ====== */
sec_simb[indiceS_S]='\0';
}//if (indiceS_S< TAM_SEC_SIMB) #pragma vector = TIMER0_A0_VECTOR
else{ __interrupt void RTI_T0_TACCR0(void) {
caracter_error=ON; P1OUT_bit.P0 = P1OUT_bit.P6 = LED_OFF;
}//else if(indiceS_S < (TAM_SEC_SIMB)) TA0CCTL0_bit.CCIE = OFF;
if(simbolo=='.') { } // __interrupt void RTI_T0_TACCR0(void)
P1OUT_bit.P0 = LED_ON;
}// if(simbolo=='.') #pragma vector = TIMER0_A1_VECTOR
if(simbolo=='-'){ __interrupt void RTI_T0_TACCR12(void) {
P1OUT_bit.P6 = LED_ON; switch (__even_in_range(TA0IV, 10)) {
}// if(simbolo=='-') case (2): {
TA0CCR0 = TA0R + T_LED; tiempo_raya=ON;
TA0CCTL0_bit.CCIFG = OFF; TA0CCTL1_bit.CCIE = OFF;
TA0CCTL0_bit.CCIE = ON; simbolo = '-';
} // if (tareas.f0 == ON) tareas.f0 = ON;
if (tareas.f1 == ON) { break;
tareas.f1 = OFF; } // case (2)
if(tipo_pausa!=TPS){ case (4): {
if(caracter_error){ tipo_pausa++;
sec_car[indiceS_C]='@'; switch (tipo_pausa){
caracter_error=OFF; case(TPC): {
}//if(caracter_error) TA0CCR2 = TA0CCR2 + (4* UdT);
else{ break;
sec_car[indiceS_C]=D_morse(sec_simb); } //case(TPC)
case(TPP): {
-2/9-
TA0CCR2 = TA0CCR2 + (7* UdT); //Flanco de bajada (pulsador presionado)
break; tiempo_raya=OFF;
} //case(TPP) TA0CCR1 = TA0R + (3* UdT);
case(TFT): { TA0CCTL1_bit.CCIFG = OFF;
TA0CCTL2_bit.CCIE = OFF; TA0CCTL1_bit.CCIE = ON;
TA0CCTL2_bit.CCIFG = OFF;
tareas.f1=ON; TA0CCTL2_bit.CCIE = OFF;
break; TA0CCTL2_bit.CCIFG = OFF;
} //case(TFT) if(tipo_pausa!=TFT){
}// switch (tipo_pausa) tareas.f1=ON;
break; }// if(tipo_pausa!=TFT)
} // case (4) } // if (P1IES_bit.P3 == ON)
} // switch (__even_in_range(TA0IV, 10)) else {
if (tareas.total != OFF) { //Flanco de subida (pulsador soltado)
__low_power_mode_off_on_exit(); if (tiempo_raya== OFF) {
} // if (tareas.total != OFF) simbolo='.';
} // __interrupt void RTI_T0_TACCR12(void) TA0CCTL1_bit.CCIE = OFF;
tareas.f0=ON;
#pragma vector = WDT_VECTOR }//if (tiempo_raya== OFF)
__interrupt void RTI_WD(void) { tipo_pausa=TPS;
WDTCTL = WDTPW + WDTHOLD; TA0CCR2 = TA0R + (3* UdT);
P1IFG_bit.P3 = OFF; TA0CCTL2_bit.CCIFG = OFF;
P1IE_bit.P3 = ON; TA0CCTL2_bit.CCIE = ON;
} // __interrupt void RTI_WD(void) } // else if (P1IES_bit.P3 == ON)
P1IES_bit.P3 = ~(P1IES_bit.P3);
#pragma vector = PORT1_VECTOR P1IFG_bit.P3 = OFF;
__interrupt void RTI_P1(void) { if (tareas.total != OFF) {
P1IE_bit.P3 = OFF; __low_power_mode_off_on_exit();
WDTCTL = WDT_MDLY_32; } // if (tareas.total != OFF)
IFG1_bit.WDTIFG=OFF; } // void RTI_P1(void)
IE1_bit.WDTIE = ON;
if (P1IES_bit.P3 == ON) {
La figura1 muestra la conexión al microcontrolador MSP430G2533 de los elementos de los que dispone el
sistema MORSE (un pulsador para la introducción de los símbolos , dos LEDS asociados a los símbolos
punto y raya y un cristal de 32768Hz).
ROJO
VERDE
Teniendo en cuenta el código anterior y el esquema del sistema, conteste de forma justificada a cada una
de las preguntas que se plantean sobre la implementación del sistema MORSE.
-3/9-
LEDS (2,5p)
1. En el sistema existen dos LEDs conectados respectivamente a los terminales del puerto 1 P1.0 (LED
ROJO) y P1.6 (LED VERDE). Responda y justifique las siguientes preguntas según se ha
implementado en el código anterior.
a. ¿A qué símbolo está asociado el LED ROJO? (0,5p)
El LED ROJO está asociado al símbolo punto tal y como se ve en las siguientes instrucciones que
se ejecutan en la tarea.f0 del programa principal.
if(simbolo=='.')
P1OUT_bit.P0 = LED_ON;
}// if(simbolo=='.')
b. ¿Qué acción provoca el encendido del LED ROJO y en qué momento (exprese el momento en
términos de la constante UdT)? (0,5p)
El encendido del LED ROJO se produce cuando se suelta el pulsador asociado al terminal P1.3 y
el tiempo que ha permanecido pulsado es menor que 3UdT.
c. ¿Qué acción provoca el encendido del LED VERDE y en qué momento (exprese el momento
en términos de la constante UdT)? (0,5p)
El encendido del LED VERDE se produce cuando se tiene presionado el pulsador asociado al
terminal P1.3 un tiempo igual 3UdT. En 3UdT se produce el encendido del LED VERDE aunque no
se haya soltado el pulsador.
d. ¿Cuánto tiempo permanece encendido el LED ROJO? (0,5p)
Cuando el pulsador se suelta y ha estado presionado menos de 3 UdT se pasa a ejecutar la tarea
f0 en la que se enciende el LED ROJO y se planifica una interrupción en T_LED ciclos del TA0CCR0
del TA0. En la rutina de tratamiento de interrupción del TA0CCR0 se programa el apagado de
los LEDS. Por lo tanto, el LED ROJO habrá permanecido encendido T_LED/fTA0= 62,5ms.
JUSTIFICACIÓN
El LED ROJO permanece encendido T_LED ciclos del TA0, gestionados a través de la interrupción
en modo comparación del registro TA0CCR0.
TA0 se programa en la rutina Config_Perifericos() a través de la siguiente instrucción
TA0CTL = TASSEL_1 | ID_3 | MC_2 | TACLR;
La instrucción anterior programa a TA0 para que realice su cuenta con la fuente de reloj ACLK,
modo de división por 8 y modo continuo.
Por lo tanto, la frecuencia de cuenta del TA0 es: fTA0= 32768/8=4096 Hz
En la tarea f0, con las instrucciones que hay más abajo, se programa una interrupción del
registro TA0CCR0 en T _LED ciclos, lo que se producirá en T_LED/fTA0= 62,5ms
TA0CCR0 = TA0R + T_LED;
TA0CCTL0_bit.CCIFG = OFF;
TA0CCTL0_bit.CCIE = ON;
Dentro de la rutina de tratamiento del TA0CCR0 RTI_T0_TACCR0( ) se apagan los LEDs,
por lo que el LED ROJO habrá permanecido encendido 62,5ms
-4/9-
e. ¿Cuánto tiempo permanece encendido el LED VERDE? (0,5p)
El LED VERDE se mantiene encendido el mismo tiempo que el LED ROJO62.5ms.
Cuando el pulsador permanece presionado 3 UdT se pasa a ejecutar la tarea f0 en la que se
enciende el LED VERDE y se planifica una interrupción en T_LED ciclos del TA0CCR0 del TA0. En
la rutina de tratamiento de interrupción del TA0CCR0 se programa el apagado de los LEDS. Por
lo tanto el LED VERDE habrá permanecido encendido T_LED/fTA0= 62,5ms.
SIMBOLOS (2p)
2. En el sistema implementado se ha establecido una temporización para los símbolos punto y raya.
Responda a las siguientes preguntas teniendo en cuenta la implementación que se ha realizado en el
código anterior.
a. ¿Qué intervalo de tiempo de pulsación expresado en ms se considera un símbolo punto? (1p)
Cualquier pulsación menor que 3UdT.
Al presionar el pulsador, en la rutina de interrupción RTI_P1() se programa una interrupción
del registro TA0CCR1 en 3UdT y se pone la variable de estado tiempo_raya= OFF . Si se
produce la interrupción del registro TA0CCR1 antes de soltar el pulsador en la rutina de
tratamiento de interrupción RTI_T0_TACCR12( ), se pone tiempo_raya= ON, lo que marca que
el símbolo introducido es una raya. En caso contrario tiempo_raya permanece a OFF marcando
que símbolo introducido es un punto.
UdT=1024 ciclos con la configuración de TA0, que justificó en la pregunta 1.d, UdT tiene una
duración temporal de 250ms. Por lo tanto cualquier pulsación inferior a 750ms será
considerado como un símbolo punto.
b. ¿Qué intervalo de tiempo de pulsación expresado en ms se considera un símbolo raya? (1p)
Cualquier pulsación mayor o igual que 3UdT. Cualquier pulsación mayor que 750ms
PAUSAS (2,5p)
3. En el sistema implementado se han establecido cuatro tipos de pausas (TPS, TPC, TPP y TFT), las
cuales han sido definidas anteriormente en la descripción del MORSE. Responda a las siguientes
preguntas teniendo en cuenta su implementación en el código anterior.
a. ¿Qué intervalo de tiempo expresado en ms debe permanecer soltado el pulsador para que el
sistema asuma que se trata de una pausa entre símbolos TPS? (0,5p)
Las pausas se miden a través de las interrupciones programadas del registro TA0CCR2. Cuando
se suelta el pulsador, lo que provoca la ejecución de la rutina de interrupción RTI_P1(), se
programa una interrupción de TA0CCR2 en 3UdT (750ms tal y como se ha calculado en las
preguntas anteriores) y la variable tipo_pausa se inicializa al valor TPS. De esta forma, si no
se llega a producir la interrupción de TA0CCR2 cuando se vuelve a presionar el pulsador se
ejecuta la tarea f1( la tarea f1 identifica y trata los distintos tipos de pausas) con el valor TPS
para la variable tipo_pausa. Por lo tanto cualquier valor de la pausa inferior a 750ms se
considera TPS.
Intervalo TPS t<750ms
-5/9-
b. ¿Qué intervalo de tiempo expresado en ms debe permanecer soltado el pulsador para que el
sistema asuma que se trata de una pausa entre caracteres TPC? (0,5p)
Si tras programar la interrupción de TA0CCR2 en 3UdT, en la rutina de interrupción RTI_P1(),
la interrupción de TA0CCR2 se produce, ocurre lo siguiente en la rutina de tratamiento de
TA0CCR1 y TA0CCR2 RTI_T0_TACCR12(), en la parte correspondiente al TA0CCR2:
i) la variable tipo_pausa se incrementa, pasando su valor a TPC.
ii) se programa una nueva interrupción de TA0CCR2 en 4UdT adicionales.
Si esta nueva interrupción planificada en 4UdT adicionales se llega a producir, provocaría el
incremento la variable tipo_pausa, pasando a valer TPP y programando una nueva
interrupción en 7UdT adicionales.
Por lo tanto, se puede indicar que cualquier pausa mayor que 3UdT (750ms) pero menor que
7UdT (3UdT+4UdT) (1750ms) se considera una pausa entre caracteres.
Intervalo TPC1750ms>t≥750ms
c. ¿Qué intervalo de tiempo expresado en ms debe permanecer soltado el pulsador para que el
sistema asuma que se trata de una pausa entre palabras TPP? (0,5p)
Cuando la variable tipo_pausa pasa a valer TPP se programa otra interrupción en 7UdT
adicionales, si esta interrupción planificada se produce, entonces modifica la variable al valor
TFT. Por lo tanto, cualquier pulsación mayor que 7UdT (1750ms) pero menor que 14 UdT
(7UdT+7UdT) (3500ms) se considerará una pausa entre palabras.
Intervalo TPP3500ms>t≥1750ms
d. ¿Qué intervalo de tiempo expresado en ms debe permanecer soltado el pulsador para que el
sistema asuma que se trata de una pausa que indica el final de transmisión de un mensaje
TFT? (0,5p)
Cualquier valor mayor que 14UdT 3500ms
Intervalo TFT t≥3500ms
En las instrucciones que hay más arriba se programa, que en el caso de que indiceS_S
alcance el valor 5, la variable caracter_error se pone a ON. Si indiceS_S vale 5, significa
que se ha alcanzado el último elemento del array para el que se ha hecho reserva de memoria, y
que en la anterior ejecución de la tarea f0 se había inicializado al carácter fin de cadena
sec_simb[5]=’\0’, por lo tanto ya no hay más espacio para almacenar más símbolos y eso
se indica con la variable caracter_error.
En la tarea f1 se tratan tanto las pausas como los errores, cuando la pausa corresponde a una
distinta que la pausa entre símbolos entonces si la variable caracter_error está a ON
entonces se almacena en el array sec_car el carácter arroba ‘@’
-7/9-
ERRORES DE PROGRAMACIÓN (1,5p)
5. En el sistema con el código implementado cuando se introduce la secuencia a que se muestran a
continuación
TPS TPS TPS TPS TPS TPS TPSTPP (secuencia a)
en el array sec_car se almacena los valores que se visualizan en la figura2, correspondiente a la ventana
watch 1 del entorno de desarrollo IAR.
Figura 2. Captura de la ventana watch 1 cuando se introduce la secuencia a con el código sin modificar
Si se realiza el cambio que se muestra a continuación en la sentencia que está marcada en el programa
principal con el comentario // pregunta 5:
Sentencia original if (indiceS_S < (TAM_SEC_SIMB)){
y se introduce la secuencia a, en esta ocasión se obtiene un resultado distinto e incorrecto ya que el cambio
provoca un error. El resultado obtenido cuando se introduce la secuencia a con el código modificado se
visualiza en la figura 3
Figura 3. Captura de la ventana watch 1 cuando se ha introducido la secuencia a con el código modificado
Observando las ventanas watch 1 (figuras 2 y 3), las variables involucradas y el código, explique cuál es la
causa del error (1,5p)
if (indiceS_S < (TAM_SEC_SIMB+1)){
sec_simb[indiceS_S]=simbolo;
indiceS_S++;
sec_simb[indiceS_S]='\0';
}//if (indiceS_S< TAM_SEC_SIMB)
else{
caracter_error=ON;
}//else if(indiceS_S < (TAM_SEC_SIMB))
Al cambiar el código, se permite introducir en el array sec_simb 7 elementos, cuando la
reserva del array ha sido de 6. En las figuras 2 y 3 se ve como, sec_simb tiene reservada
memoria RAM para 6 elementos en el rango de direcciones 0x205 a 0x20A y la variable
indiceS_S tiene asignada la dirección 0x20B. Con esta asignación, la introducción de un
elemento más en el array provoca que se acceda a una zona de memoria reservada para otra
-8/9-
variable, y se modifique su valor, pudiendo llevar al programa a un funcionamiento incorrecto.
En este caso la variable afectada es indiceS_S.
Explicación de la situación que se genera al introducir la secuencia a
Con el código modificado, al introducir la secuencia a permite que cuando indiceS_S vale 5 se
realice las siguientes acciones:
i) con la instrucción sec_simb[indiceS_S]=simbolo; se almacena el sexto punto de la
secuencia a en la posición de memoria 0x20A, correspondiente al elemento sec_simb[5]
ii) con la instrucción indiceS_S++; se incrementa en una unidad la variable indiceS_S ,
pasando a valer 6
iii) con la instrucción sec_simb[indiceS_S]='\0';se almacene el carácter de fin de
cadena en una posición no reservada por el compilador para el array sec_simb[6],
correspondiente a la dirección de memoria RAM 0x20B. La dirección 0x20B es la posición de
memoria que el compilador había reservado para la variable indiceS_S por lo que al
realizar la instrucción machaca el valor la variable con el valor del carácter fin de cadena que
es 0. Esto provoca la variable indiceS_S se inicialice a 0.
En este momento, cuando se introduce el séptimo punto de la secuencia a lo hace en la posición
del array sec_simb[0] ya que la variable indiceS_S vale 0. El octavo punto lo introduce en
la posición del array sec_simb[1], con lo que al producirse la pausa entre palabras TPP la
secuencia a se trata como si sólo tuviera dos puntos y se decodificará como un carácter ‘I’ (..), lo
que es un comportamiento no deseado de la implementación.
-9/9-
UNIVERSIDAD DE MÁLAGA ETSI TELECOMUNICACIÓN
DPTO. DE TECNOLOGÍA ELECTRÓNICA 29 DE JUNIO DE 2012
EXAMEN DE MICROCONTROLADORES TIEMPO: 3 HORAS
TITULACIÓN: __________________________________________________________________________
INSTRUCCIONES:
a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN
b) RESPONDA JUSTIFICADAMENTE CADA PREGUNTA EN EL ESPACIO RESERVADO PARA ELLO (NO SE
CONSIDERARÁ VÁLIDA NINGUNA RESPUESTA NO JUSTIFICADA)
c) ES NECESARIO OBTENER UN MÍNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN
d) LA CALIFICACIÓN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIÓN FINAL DE LA
ASIGNATURA
DATOS:
a) CONSTANTES DEL FICHERO DE CABECERA “io430g2533.h”:
− #define DIVA_2 (0x20) /* ACLK Divider 2: /4 */
− #define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */
− #define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */
− #define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continuous up */
− #define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */
− #define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */
− #define OUTMOD_4 (4*0x20u) /* PWM output mode: 4 - toggle */
− #define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */
− #define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0_A CC1, CC2, TA0 */
− #define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */
Se desea diseñar el control de un semáforo de calle que emita una señal sonora para invidentes basándonos
en un sistema digital desarrollado con el microcontrolador MSP430G2533. En la figura 1 se muestra parte
del esquema del sistema de control.
-1/6-
A continuación se muestra el código correspondiente al sistema de control:
-2/6-
1. Indique qué elementos del módulo de reloj se emplean en la aplicación y cómo están configurados
(función Config_uC()). [0.5 puntos]
La fuente de reloj del DCO se programa para generar una señal a 1 MHz introduciendo los valores de
calibración almacenados en la memoria Flash (CALBC1_1MHZ y CALDCO_1MHZ) en los registros
BCSCTL1 y DCOCTL. Esta fuente de reloj se utiliza para generar las señales de reloj MCLK y SMCLK:
DCOCTL = 0;
BCSCTL1 = CALBC1_1MHZ + DIVA_2;
DCOCTL = CALDCO_1MHZ;
El cristal de cuarzo externo de 32768 Hz se utiliza como fuente de reloj de la señal de reloj ACLK,
configurando los pines P2.6 y P2.7 del microcontrolador con sus funcionalidades XIN y XOUT:
P2DIR_bit.P6 = 0;
P2DIR_bit.P7 = 1;
P2SEL_bit.P6 = P2SEL_bit.P7 = 1;
La señal de reloj ACLK se configura a 8192 Hz, dividiendo por 4 la fuente de reloj del cristal de cuarzo
de 32768 Hz, escribiendo para ello el valor DIVA_2 en el campo correspondiente del registro BCSCTL1:
BCSCTL1 = CALBC1_1MHZ + DIVA_2;
y si es mayor modifica el tiempo que falta para producir dicho cambio de luces desde el VERDE al
AMBAR en 19.999 s ~ 20 s mediante la instrucción TA0CCR0 = TA0R + 0x4FFF;.
− AMBAR/ROJO: al encontrarse el pulsador de peatón deshabilitado no se produce ningún efecto.
NOTA: El pulsador de peatón vuelve a habilitarse al entrar de nuevo en el estado VERDE mediante la
instrucción P1IE_bit.P3 = ON;.
Así pues, presionar el pulsador de peatón sólo tiene efecto en el estado VERDE, y su función es la de
comprobar si el tiempo de espera para pasar al AMBAR es mayor de unos 20 s: si es menor no realiza
ninguna acción, y si es mayor establece dicho tiempo de espera en unos 20 s.
5. Si el pulsador no fuese ideal, ¿sería necesario programar un antirrebote SW en el sistema? [1 punto]
No, pues el pulsador de peatón se deshabilita tras detectar la primera pulsación en el estado VERDE
dentro de la propia rutina de interrupción RTI_Port1, y vuelve a habilitarse dentro de la tarea f0
cuando se alcanza de nuevo el estado VERDE, por lo que permanece deshabilitado como mínimo el
tiempo que duran los estados AMBAR y ROJO (37 s), tiempo más que suficiente para que se extingan
los posibles rebotes del pulsador.
-4/6-
6. Modifique el sistema para que se inicie en el estado correspondiente a AMBAR, siendo el resto del
funcionamiento el mismo que en el código propuesto. [1 punto]
Para implementar esta modificación habría que realizar inicialmente todas aquellas funciones que
realiza el sistema en el estado AMBAR, por lo que habría que tener en cuenta los siguientes aspectos:
− Encender la luz AMBAR: implica sustituir en la función Config_Puertos() la instrucción P2OUT
= BIT2; (enciende LV) por la instrucción P2OUT = BIT1; (enciende LA).
− Actualizar el estado del sistema: implica inicializar correctamente en la definición de las variables
globales la variable idx al valor 1 mediante la instrucción unsigned short int idx = 1;.
− Establecer la duración del estado inicial (AMBAR): implica sustituir en la función Config_TA0()
la instrucción TA0CCR0 = TA0R + semt[0]; (duración VERDE) por la instrucción TA0CCR0 =
TA0R + semt[1]; (duración AMBAR).
8. Considerando el esquema de la figura 1 y el código del programa relacionado con el TIMERA1 y los
bloques comparadores TIMERA0CCR1 y TIMERA0CCR2, ¿en qué condiciones se genera una onda
sonora en el sistema? ¿qué características tiene el sonido emitido? [2 puntos]
La onda sonora se obtiene generando una señal PWM en el pin 3 del puerto P2 donde está conectado el
altavoz, pin que se corresponde con la unidad de salida 0 del temporizador TA1 (TA1.0). Así pues, los
aspectos relacionados con la onda sonora se identifican con aquellas secciones de código que
configuran el temporizador TA1. Analizando el código se pueden deducir los siguientes aspectos:
− Configuración inicial del temporizador TA1: en la función Config_TA1() se configura el
temporizador TA1 en modo ascendente (MC_1) con la señal de reloj ACLK (TASSEL_1) sin dividir
(ID_0), es decir, a una frecuencia de 8192 Hz:
TA1CTL = TASSEL_1|MC_1|ID_0|TACLR;
Además, se establece que la unidad de salida 0 genere un PWM en modo Toggle (OUTMOD_4), por lo
que conmutará su salida cada vez que el valor de la cuenta del temporizador TA1 (TA1R) alcance el
valor del registro TA1CCR0 (es decir, se necesitan dos cuentas de TA1CCR0 para generar un ciclo):
TA1CCTL0 = OUTMOD_4;
Es importante notar que la función Config_TA1() no inicializa el valor del registro TA1CCR0, por
lo que el temporizador no comenzará a funcionar y el PWM no se genera inicialmente.
− Activación/desactivación de la onda sonora: en la tarea f0 se activa/desactiva la generación del
PWM del temporizador TA1, y por lo tanto la onda sonora. La activación se produce en el estado
ROJO (case 2) inicializando el valor del registro TA1CCR0 mediante la instrucción TA1CCR0 = 7; ,
y la desactivación se produce en el estado VERDE (case 0) borrando el valor del registro TA1CCR0
mediante la instrucción TA1CCR0 = 0; .
-5/6-
− Características de la onda sonora: en el estado ROJO (case 2) de la tarea f0 se define la
operación del PWM que generará la onda sonora. En primer lugar, se inicializa el valor del
registro TA1CCR0 a 7, por lo que la frecuencia inicial del PWM será:
f = ACLK/(2*(TA1CCR0+1)) = 512 Hz
La primera interrupción (TA0CCR1) se genera cada segundo después de iniciar la onda sonora, y
según la rutina de interrupción asociada a la misma RTI_TA0_CCR12 su efecto (case 2) consiste
en alternar el valor del registro TA1CCR0 entre 7 y 14, por lo que la frecuencia del PWM alternará
entre:
· f = ACLK/(2*(7+1)) = 512 Hz
· f = ACLK/(2*(14+1)) = 273.17 Hz ~ 273 Hz
Así pues, la onda sonora estará formada inicialmente por un pitido tipo sirena que alterna cada
segundo entre 512 Hz y 273 Hz.
La segunda interrupción (TA0CCR2) se genera unos 30 segundos después de iniciar la onda sonora,
y según la rutina de interrupción asociada a la misma RTI_TA0_CCR12 su efecto (case 4) consiste
en reducir a la mitad el valor de la variable tmod que controla el tiempo de activación de la
primera interrupción (TA0CCR1):
TA0CCR1 = TA0R + tmod; → tmod = 0x200 = 512 → t = 1024 / 1024 = 0.5 s
Así pues, la onda sonora estará formada al final (cuando queden unos 5 s para finalizar el estado
ROJO) por un pitido tipo sirena que alterna cada medio segundo entre 512 Hz y 273 Hz, por lo que
se acelera su variación para avisar al peatón de que el estado ROJO está próximo a finalizar.
9. Modifique el sistema para que, si se pulsa el botón en AMBAR, el sistema se quede bloqueado (sin
responder al pulsador ni realizar cambios de luces ni ninguna otra actividad) en bajo consumo, no
pudiéndose salir de dicho estado salvo por un RESET. [1 punto]
Para implementar esta modificación habría que tener en cuenta los siguientes aspectos:
− Habilitar el pulsador de peatón en el estado AMBAR: implica mover en la función main() la
instrucción P1IE_bit.P3 = OFF; (deshabilita interrupción pulsador de peatón) desde el estado
AMBAR (case 1) al estado ROJO (case 2).
− Deshabilitar el temporizador TA0 al presionar el pulsador de peatón en el estado AMBAR: implica
introducir el siguiente código en la rutina de interrupción RTI_Port1:
__interrupt void RTI_Port1(void) {
P1IFG_bit.P3 = OFF;
P1IE_bit.P3 = OFF;
if (idx == 0) {
tareas.f1 = ON;
} // if (idx == 0)
else {
TA0CTL = MC_0;
TA0CCTL0_bit.CCIFG = OFF;
} // else: if (idx == 0)
__low_power_mode_off_on_exit();
} // void RTI_Port1(void)