Vous êtes sur la page 1sur 7

UNIVERSIDAD DE MLAGA DPTO.

DE TECNOLOGA ELECTRNICA EXAMEN DE MICROCONTROLADORES

ETSI TELECOMUNICACIN 20 DE DICIEMBRE DE 2012 TIEMPO: 3 HORAS

APELLIDOS, NOMBRE: ______________________________________________ D.N.I.: _____________ TITULACIN: __________________________________________________________________________

INSTRUCCIONES: a) LEA ATENTAMENTE EL ENUNCIADO Y LAS PREGUNTAS DEL EXAMEN b) ES NECESARIO OBTENER UN MNIMO DE 3 PUNTOS (SOBRE 10) PARA SUPERAR EL EXAMEN c) LA CALIFICACIN DEL EXAMEN CONSITITUYE EL 60% DE LA CALIFICACIN FINAL DE LA ASIGNATURA DATOS: a) CONSTANTES DEL FICHERO DE CABECERA io430g2533.h:
#define #define #define #define #define #define #define #define #define TASSEL_1 TASSEL_2 ID_1 ID_3 MC_2 MC_3 PORT1_VECTOR USCIAB0TX_VECTOR TIMER1_A1_VECTOR (1*0x100u) (2*0x100u) (1*0x40u) (3*0x40u) (2*0x10u) (3*0x10u) (2 * 2u) (6 * 2u) (12 * 2u) /* /* /* /* /* /* /* /* /* Timer A clock source select: 1 - ACLK */ Timer A clock source select: 2 - SMCLK */ Timer A input divider: 1 - /2 */ Timer A input divider: 3 - /8 */ Timer A mode control: 2 - Continous up */ Timer A mode control: 3 - Up/Down */ 0xFFE4 Port 1 */ 0xFFEC USCI A0/B0 Transmit */ 0xFFF8 Timer1_A CC1, CC2, TA1 */

Se desea disear un juego de ingenio basado en el microcontrolador MSP430G2533. Dicho juego pretende acertar un cdigo de longitud variable generado aleatoriamente, compuesto por dgitos comprendidos entre 0 y 3. Para ello se dispone de un teclado numrico y un LCD que se conectan al microcontrolador a travs del bus I2C (los detalles y el funcionamiento de esta conexin 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.

Figura 1. Esquema del sistema.

-1/7-

En el esquema de la Figura 1 se puede apreciar que el teclado y el LCD estn 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 travs del bus I2C, activando la rutina de interrupcin RTI_I2C. Esta rutina de interrupcin analiza las teclas pulsadas, y si se corresponden con dgitos comprendidos entre 0 y 3 se almacenan en el array sec2. Cuando el nmero de dgitos almacenados coincide con la longitud del cdigo generado se activa la tarea tareas.f1 del sistema. La funcin Write_LCD(char *string) se encarga de enviar a travs del bus I2C una cadena de caracteres para que el LCD la muestre por pantalla. El funcionamiento del juego se describe a continuacin: 1. Inicialmente el microcontrolador genera un cdigo aleatorio formado por una secuencia de dgitos entre 0 y 3. 2. Despus de generar el cdigo el usuario utilizar el teclado para introducir una secuencia de dgitos entre 0 y 3, con el objetivo de intentar acertar el cdigo generado. 3. Una vez introducida la secuencia del usuario el microcontrolador la compara con el cdigo generado e indica en el LCD cuntos dgitos iguales (y que adems coincidan con la misma posicin del cdigo generado) tiene la secuencia introducida, aunque no indica qu dgitos son los que coinciden. 4. Si ambas secuencias coinciden totalmente, se habr acertado el cdigo generado. En la Figura 2 se muestra un ejemplo en la que el usuario necesita de siete intentos para adivinar el cdigo generado 2 0 1:
0 1 2 3 2 2 2

, , , , , , ,

0 1 2 3 3 1 0

,0 ,1 ,2 ,3 ,3 ,0 ,1

Aciertos: 1

Aciertos: 1

Aciertos: 1

Aciertos: 0 Aciertos: 1

Aciertos: 1

Aciertos: 3

Cdigo acertado!

Figura 2. Ejemplo.

-2/7-

A continuacin se muestra el cdigo correspondiente al sistema:


#include "io430g2533.h" #include "stdio.h" /* ====== CONSTANTES ============================= */ #define COD 8 /* ====== TIPOS DATOS ============================ */ typedef union { unsigned volatile char total; struct { unsigned char f0 :1; unsigned char f1 :1; unsigned char f2 :1; }; } flags; /* ====== VARIABLES GLOBALES ===================== */ flags tareas; unsigned char tam, niv, time, sec1[COD], sec2[COD]; char text[16+1]; /* ====== PROTOTIPOS ============================= */ void void void void void Config_uC(void); Config_Timers(void); Config_Ports(void); Config_I2C(void); Write_LCD(char *string); void Config_uC(void) { WDTCTL = WDTPW + WDTHOLD; DCOCTL = 0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P2DIR = BIT7; P2SEL = BIT7 + BIT6; } // void Config_uC(void) void Config_Timers(void) { TA0CTL = TASSEL_2 + ID_1 + MC_2 + TACLR; TA1CCR0 = 0xF000; TA1CTL = TASSEL_1 + ID_3 + TACLR + TAIE; } // void Config_Timers(void) void Config_Ports(void) { P1DIR = P1IFG = 0; P1REN = P1OUT = P1IES = P1IE = BIT3; } // void Config_Ports(void) void Config_I2C(void) { // } // void Config_I2C(void) void Write_LCD(char *string) { // } // void Write_LCD(char *string) /* ====== RUTINAS TRATAMIENTO INTERRUPCION ====== */ #pragma vector = PORT1_VECTOR __interrupt void RTI_P1(void) { tareas.f0 = 1; P1IE = P1IFG = 0; TA1CTL |= MC_3; __low_power_mode_off_on_exit(); } // void RTI_P1(void) #pragma vector = USCIAB0TX_VECTOR __interrupt void RTI_I2C(void) { static unsigned char num = 0; // if (num == tam) { tareas.f1 = 1; __low_power_mode_off_on_exit(); } // if (num == tam) } // void RTI_I2C(void) #pragma vector = TIMER1_A1_VECTOR __interrupt void RTI_TA1IFG(void) { TA1CTL_bit.TAIFG = 0; time++; if (time == tam) { tareas.f2 = 1; __low_power_mode_off_on_exit(); } // if (time == tam) } // void RTI_TA1CCR1(void) Write_LCD("Juego superado!"); __disable_interrupt(); __low_power_mode_4(); } // if (tam > COD) tareas.f0 = 1; } // if (suc == tam) } // if (tareas.f1) if (tareas.f2) { tareas.f2 = 0; Write_LCD("--- GAMEOVER ---"); __disable_interrupt(); __low_power_mode_4(); } // if (tareas.f2) } // while (tareas.total) } // for (;;) } // int main(void) /* ====== FUNCIONES ============================= */

/* ====== PROGRAMA PRINCIPAL ===================== */ int main(void) { unsigned char suc, cont; unsigned int aux; Config_uC(); Config_Timers(); Config_Ports(); Config_I2C(); tareas.total = 0; niv = 1; tam = 3; time = 0; Write_LCD("Pulse Inicio..."); for (;;) { __low_power_mode_0(); while (tareas.total) { if (tareas.f0) { tareas.f0 = 0; aux = TA0R; for (cont = 0; cont < tam; cont++) { sec1[cont] = (char) (aux >> (2*cont)); sec1[cont] &= 0x03; } // for (cont = 0; cont < tam; cont++) TA1CTL_bit.TACLR = 1; time = 0; sprintf(text, "Nivel: %d", niv); Write_LCD(text); } // if (tareas.f0) if (tareas.f1) { tareas.f1 = 0; suc = 0; for (cont = 0; cont < tam; cont++) { if (sec1[cont] == sec2[cont]) { suc++; } // if (sec1[cont] == sec2[cont]) } // for (cont = 0; cont < tam; cont++) sprintf(text, "Aciertos: %d", suc); Write_LCD(text); if (suc == tam) { Write_LCD("Cdigo acertado!"); niv++; tam += 2; if (tam > COD) {

-3/7-

Puntuacin: 1. Respuesta correcta : +0.5 puntos Respuesta incorrecta : 0.17 puntos Respuesta en blanco : +0.0 puntos Segn el algoritmo utilizado para generar el cdigo:
aux = TA0R; for (cont = 0; cont sec1[cont] sec1[cont] } // for (cont = 0; < tam; cont++) { = (char) (aux >> (2*cont)); &= 0x03; cont < tam; cont++)

indicar el nmero mximo de dgitos que puede tener dicho cdigo: a. 3 b. 5 c. 7 d. Ninguna de las otras opciones es correcta 2. Si se presiona el pulsador Inicio antes de comenzar el juego cuando el valor del registro TA0R es 0x5C3A, indicar cul es el cdigo generado de longitud 7 dgitos: a. b. c. d. 3. 1130032 2230031 1300322 Ninguna de las otras opciones es correcta

Si se modifica el procedimiento de generacin del cdigo para que est compuesto por dgitos comprendidos entre 0 y 7:
aux = TA0R; for (cont = 0; cont sec1[cont] sec1[cont] } // for (cont = 0; < tam; cont++) { = (char) (aux >> (3*cont)); &= 0x07; cont < tam; cont++)

indicar cul sera la longitud mxima que se podra obtener para dicho cdigo: a. b. c. d. 4. 5 8 No se puede realizar dicha modificacin Ninguna de las otras opciones es correcta

Indicar el nmero de niveles que hay que pasar para superar el juego: a. b. c. d. 2 3 4 Ninguna de las otras opciones es correcta

5.

Indicar cul es el grado de dificultad que se incrementa al aumentar el nivel del juego: a. b. c. d. Se aumenta la longitud del cdigo generado Se reduce el tiempo permitido para acertar el cdigo Se reduce el nmero de intentos permitidos para acertar el cdigo Ninguna de las otras opciones es correcta

-4/7-

6.

Indicar cul es el nmero de intentos permitidos para intentar acertar el cdigo en un nivel: a. b. c. d. 8 16 20 Ninguna de las otras opciones es correcta

7.

Indicar cul es el tiempo permitido para intentar acertar el cdigo en un nivel: a. b. c. d. 15 segundos 30 segundos Depende del nivel Ninguna de las otras opciones es correcta

8.

Indicar qu ocurre si no se consigue acertar el cdigo de un nivel en el tiempo permitido: a. b. c. d. El juego comienza de nuevo desde el primer nivel El juego comienza de nuevo desde el nivel actual El juego finaliza y el sistema se bloquea Ninguna de las otras opciones es correcta

9.

Indicar la longitud del cdigo en el nivel 3: a. b. c. d. 3 7 8 Ninguna de las otras opciones es correcta

10. Indicar cul es la utilidad del pulsador Inicio: a. b. c. d. Generar el cdigo y comenzar el juego Comenzar otra partida una vez que se ha superado el juego Reiniciar el juego durante una partida Ninguna de las otras opciones es correcta

11. Indicar si es necesario incorporar un sistema antirrebote para el pulsador Inicio: a. b. c. d. S, todos los pulsadores necesitan siempre un sistema antirrebote No, pues al utilizar una resistencia de pullup interna en el pin P1.3 no se producen rebotes Depende del cdigo generado Ninguna de las otras opciones es correcta

12. Indicar qu ocurre si se presiona el pulsador Inicio una vez ha comenzado el juego: a. b. c. d. Nada Se reinicia el juego Depende del nivel en el que se encuentre la partida Ninguna de las otras opciones es correcta

13. Indicar cmo se puede comenzar otra partida una vez que se ha superado el juego: a. b. c. d. No se puede Presionando el pulsador Inicio Comienza automticamente Ninguna de las otras opciones es correcta

-5/7-

14. Indicar si es posible reiniciar el juego durante una partida: a. b. c. d. No S, siempre S, pero nicamente tras superar el primer nivel Ninguna de las otras opciones es correcta

15. Indicar qu utilidad tiene el pulsador Reset: a. b. c. d. Ninguna, pues su funcionalidad es la misma que la del pulsador Inicio Reinicia el juego si todava no se ha llegado al final del mismo Reinicia el juego en cualquier momento Ninguna de las otras opciones es correcta

16. Indicar qu funcionalidad tiene la tarea tareas.f0 del sistema: a. b. c. d. Generar un cdigo de longitud mxima para todos los niveles al principio del juego Generar un cdigo de la longitud adecuada al principio de cada nivel Generar un cdigo cada vez que se presione el pulsador Inicio Ninguna de las otras opciones es correcta

17. Indicar qu informacin almacena el array sec1 del sistema: a. b. c. d. La secuencia introducida por el usuario El valor decimal entre 0 y 9 de los dgitos menos significativos del temporizador TA0R El valor decimal entre 0 y 9 de los dgitos ms significativos del temporizador TA0R Ninguna de las otras opciones es correcta

18. Indicar si es posible utilizar el modo de bajo consumo LPM3 en el sistema: a. b. c. d. S No, pues se deshabilitara la interrupcin correspondiente al pulsador Inicio No, pues se deshabilitara el funcionamiento del temporizador TA0 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. b. c. d. Ninguna El texto que aparece en el LCD Si no se supera el juego el sistema se bloquea, y si se supera comienza automticamente de nuevo Ninguna de las otras opciones es correcta

20. Indicar si existe alguna limitacin de tiempo mximo para superar el juego: a. b. c. d. No, se puede emplear todo el tiempo que se requiera S, la suma de los tiempos permitidos para cada uno de los niveles, que es 7.5 minutos S, el tiempo permitido para el nivel ms complejo, que es 3.5 minutos Ninguna de las otras opciones es correcta

-6/7-

Instrucciones: Para seleccionar una respuesta : marcarla Para borrar una respuesta marcada : rodearla con un crculo

Pregunta 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Respuesta a b c d

-7/7-

Vous aimerez peut-être aussi