26 Abr
Conceptos Fundamentales sobre Microcontroladores y Programación Embebida
¿Cuántas llamadas a función puede encadenar un PIC16F84 o los PIC de 8 bits de gama media?
8 niveles de profundidad en la pila (stack).
¿Qué hace la instrucción CLRWDT
?
Reinicia el temporizador del Watchdog Timer (WDT).
Para implementar una condición como if(A > B)
se usa un salto condicional. ¿Qué bit del registro de estado (STATUS) se utiliza en ese salto para decidir si se salta o no?
El bit de Carry (C). Las comparaciones de mayor/menor (>
, <
) se realizan mediante restas, y el resultado se evalúa comprobando el bit de Carry.
¿Y para implementar una condición como if(A == B)
?
El bit Zero (Z).
En una instrucción ensamblador de PIC, ¿cómo se indica si el resultado de la operación debe guardarse en el registro de trabajo W?
Generalmente, con un 0 en el bit de destino (‘d’, a menudo el bit 7) de la instrucción. Si ‘d’ es 0, el resultado va a W; si es 1, va al registro F especificado.
El ‘opcode’ (código de operación) de una instrucción se coloca:
En los bits más significativos de la palabra de instrucción.
¿Para qué sirve el registro INTCON
(dirección 0x0B / 0x8B)?
Para el control de interrupciones. Permite habilitar/deshabilitar interrupciones globales y específicas, y contiene los flags que indican si una interrupción ha ocurrido.
¿Para qué sirve el registro OPTION_REG
(dirección 0x81 / 0x181)?
Para configurar varias opciones del microcontrolador, incluyendo el prescaler del Timer0/WDT, la fuente de reloj del Timer0, y las resistencias de pull-up del Puerto B.
¿Qué contiene el registro Program Counter (PC)?
La dirección de la próxima instrucción a ejecutar.
¿Qué hace la instrucción COMF
?
Complementa (invierte) el valor de cada bit del registro F especificado.
Si ejecuto la instrucción RRF F, d
sobre un registro F que contiene 0x45, con el registro STATUS en 0x1F (Carry=1), ¿qué valor se obtiene en F (asumiendo d=1)?
0xA2
(Explicación: 0x45 = 0100 0101
. Rotando a la derecha a través de Carry=1: 1010 0010
= 0xA2).
Si ejecuto la instrucción RLF F, d
sobre un registro F que contiene 0x23, con STATUS = 0x0F (Carry=1), ¿qué valor se obtiene en F (asumiendo d=1)?
0x47
(Explicación: 0x23 = 0010 0011
. Rotando a la izquierda a través de Carry=1: 0100 0111
= 0x47).
¿Qué tipos de instrucciones pueden requerir dos ciclos de instrucción en un PIC16F84?
Principalmente, las instrucciones que modifican el flujo del programa: saltos (GOTO
), llamadas (CALL
) y retornos (RETURN
, RETLW
, RETFIE
). También las que omiten la siguiente instrucción (BTFSC
, BTFSS
, INCFSZ
, DECFSZ
) cuando la condición de omisión se cumple.
¿Cuál es el complemento a 2 (en 8 bits) de 0x39?
0xC7
(Pasos: convertir a binario 0011 1001
, invertir bits 1100 0110
, sumar 1 1100 0111
, convertir a hexadecimal).
¿Qué arquitectura de computadoras utiliza un único espacio de memoria tanto para instrucciones como para datos?
La arquitectura Von Neumann.
¿Se puede modificar el consumo estático de un microcontrolador?
Sí, principalmente cambiando el voltaje de alimentación. También influyen la temperatura y los modos de bajo consumo.
¿En qué protocolo de comunicación los dispositivos periféricos (esclavos) tienen direcciones, típicamente de 7 bits (o 10 bits)?
En el protocolo I²C (Inter-Integrated Circuit).
¿Qué lenguaje de programación es el más utilizado para programar microcontroladores?
El lenguaje C.
Al programar, ¿qué ventaja principal se obtiene al usar funciones en lugar de repetir bloques de código?
Reduce el uso de memoria de programa (código) y mejora la legibilidad y mantenibilidad del código.
¿Qué palabra reservada se debe usar en C para asegurar que cada acceso (lectura o escritura) a una variable se realice directamente en su ubicación de memoria, evitando optimizaciones del compilador?
La palabra reservada volatile
.
Si ejecutamos muchas instrucciones MOVLW
seguidas en un PIC16F84, ¿cada cuántos ciclos de reloj se completa la ejecución de una?
Cada 4 ciclos de reloj. En esta arquitectura, un ciclo de instrucción equivale a 4 ciclos de reloj (oscilador).
¿Qué tamaño en bits tiene típicamente un tipo de dato int
en los compiladores C para la familia PIC16F?
16 bits.
¿Qué tamaño en bits tienen las instrucciones en un microcontrolador PIC16F84?
14 bits.
¿Qué función realiza el front-end de un compilador?
Analiza el código fuente (análisis léxico, sintáctico y semántico) y lo traduce a una representación intermedia.
¿Qué hace el modo Deep Sleep en los microcontroladores PIC con tecnología nanoWatt XLP?
Apaga la mayoría de los componentes internos del microcontrolador para lograr un consumo de energía extremadamente bajo, manteniendo solo elementos esenciales como el WDT o fuentes de interrupción específicas.
¿Cuántos hilos (líneas de señal) utiliza un bus I²C?
Dos: SDA (Serial Data) y SCL (Serial Clock) (además de GND y opcionalmente VCC).
En lenguaje C, si quiero poner a 1 el bit 1 (el segundo bit, considerando el bit 0 como el primero) de una variable entera ‘var’, ¿qué operación debo realizar?
var = var | 0x02;
o su forma abreviada var |= 0x02;
.
¿Qué documentación se debe consultar para saber cómo acceder al registro de un periférico conectado a un procesador MicroBlaze?
La hoja de características (datasheet) del periférico y la configuración del mapa de memoria del sistema (definida en las herramientas de desarrollo), que indica la dirección base del periférico en el bus.
Comparando un microcontrolador típico con un SoC basado en microprocesador:
Generalmente, la programación de microcontroladores requiere una mayor atención a los detalles de bajo nivel y la optimización de recursos debido a sus limitaciones, aunque ambos pueden programarse en C.
¿Cuál es el tamaño nativo de datos (ancho del bus de datos y registros principales) de los microcontroladores de la familia PIC24?
16 bits.
¿Qué definen los requisitos no funcionales de un sistema embebido?
Definen cómo debe operar el sistema. Incluyen aspectos como el tiempo de respuesta, el consumo de energía, la fiabilidad, la seguridad, el coste, el tamaño físico, etc.
¿Qué arquitectura, Harvard o Von Neumann, tiende a tener un peor rendimiento en términos de ciclos por instrucción debido al cuello de botella de acceso a memoria?
La arquitectura Von Neumann, ya que utiliza el mismo bus para buscar instrucciones y datos.
En los microcontroladores (especialmente los basados en Harvard como los PIC), ¿qué tipo de memoria suele ser más grande, la de instrucciones (programa) o la de datos (RAM)?
La memoria de instrucciones (Programa / Flash).
¿Cuál es el complemento a 2 (en 8 bits) de 0x46?
0xBA
(Pasos: 0100 0110
-> 1011 1001
-> 1011 1010
).
¿Desde qué modo de bajo consumo se suele salir de una manera muy similar a un reinicio (reset)?
Desde el modo Deep Sleep (o modos equivalentes de muy bajo consumo).
¿Qué instrucción provoca un salto (cambio en el PC) en el PIC16F84?
Instrucciones como RETURN
, GOTO
, CALL
, o saltos condicionales como BTFSC
/BTFSS
cuando la condición se cumple.
¿Qué instrucción incrementa el valor de un registro F?
INCF
(Increment F). La instrucción INCFSZ
también lo incrementa, pero además puede saltar la siguiente instrucción.
Si el registro F contiene 0x8C y el bit Carry (C) del STATUS es 1, ¿cuál es el resultado en F después de ejecutar RRF F, 1
dos veces seguidas?
0x63
(1ª RRF: F=1000 1100
, C=1 -> F=1100 0110
=0xC6, C=0. 2ª RRF: F=1100 0110
, C=0 -> F=0110 0011
=0x63, C=0).
Un Timer de un PIC se configura con un prescaler de 1:128. Si el ciclo de instrucción es de 1 µs, ¿cuántos incrementos debe contar el registro del Timer (TMR0) para que transcurran aproximadamente 1.3 ms?
Aproximadamente 10 incrementos (1.3 ms / (1 µs * 128) = 1300 / 128 ≈ 10.15).
¿Cuál de los siguientes protocolos de comunicación serie, en su configuración básica, no está diseñado para conectar múltiples esclavos en un mismo bus compartido?
UART (Universal Asynchronous Receiver/Transmitter).
¿Qué tipo de dependencias pueden provocar paradas (stalls) en el pipeline del PIC16F84?
Las dependencias de control (instrucciones de salto) y, en menor medida, ciertas dependencias de datos.
¿Qué ventaja puede ofrecer una arquitectura Von Neumann en comparación con una Harvard estricta?
Mayor flexibilidad en la asignación de memoria, ya que el mismo espacio puede usarse para código o datos.
Comparando un microcontrolador típico con un SoC basado en microprocesador, ¿qué se puede decir sobre el tamaño de datos que manejan?
Los microcontroladores (especialmente los de 8 o 16 bits) suelen operar con tamaños de datos más pequeños (8, 16 bits) en comparación con los microprocesadores de los SoC (32 o 64 bits).
En un PIC16F84, ¿cómo se accede a la dirección 0x81 del banco de registros (Register File)?
Se debe seleccionar el Banco 1 (poniendo STATUS, RP0
a 1) y luego usar la dirección 0x01
en el campo ‘f’ de la instrucción.
En general, los microcontroladores de la familia PIC16:
Utilizan instrucciones de 14 bits y operan principalmente con datos de 8 bits.
¿En qué familias de microcontroladores PIC de 8 bits está disponible la tecnología de bajo consumo nanoWatt (o nanoWatt XLP)?
En algunos modelos de gama media (PIC16F) y gama alta (PIC18F).
¿Qué protocolo de comunicación serie común no utiliza una señal de reloj dedicada para la sincronización?
UART (es asíncrono).
Al utilizar el Watchdog Timer (WDT):
Es necesario reiniciarlo periódicamente (ej: con CLRWDT
) desde el software antes de que expire para evitar un reset del microcontrolador.
¿Cuántos ciclos de instrucción consume la ejecución de la instrucción INCF
?
Un ciclo de instrucción.
¿Cuál es el rango de frecuencias de reloj máximas que podemos encontrar en microcontroladores modernos?
Desde pocos MHz hasta varios cientos de MHz (o incluso >1 GHz en algunos de 32 bits).
¿Qué contiene el Registro de Instrucción (Instruction Register)?
La instrucción que se está decodificando y ejecutando actualmente.
¿Qué tipos de dependencias pueden causar paradas (stalls) en el pipeline de un PIC16F84?
Principalmente las dependencias de control (saltos).
Cuando queremos acceder a una posición de memoria cuya dirección depende de una variable (ej: array[i]
), ¿qué modo de direccionamiento se utiliza?
Direccionamiento indirecto.
En ensamblador de PIC, ¿cómo se realiza típicamente el acceso indirecto a memoria de datos (RAM)?
Se escribe la dirección en el registro FSR
(File Select Register) y se accede al dato a través del registro INDF
(Indirect File).
En el desarrollo para microcontroladores, ¿es común trabajar sin un sistema operativo tradicional?
Sí, es muy común trabajar directamente sobre el hardware (bare-metal) o con un RTOS.
En general, ¿qué tamaño de instrucción tienen los microcontroladores PIC de 8 bits de gama alta (familia PIC18F)?
16 bits.
En los microcontroladores PIC que lo soportan, el modo Deep Sleep:
Es el modo que ofrece el menor consumo de energía.
¿Cuántos ciclos de instrucción consume la ejecución de la instrucción RETFIE
(Return From Interrupt) en un PIC16F84?
Dos ciclos de instrucción.
¿Cuántos ciclos de instrucción consume la ejecución de la instrucción DECFSZ
(Decrement F, Skip if Zero)?
Es variable: un ciclo si no salta, dos ciclos si salta (resultado es cero).
El registro de control de interrupciones (INTCON
) en un PIC contiene bits que indican:
Tanto las interrupciones que están habilitadas como las que han ocurrido (flags).
Un Timer de un PIC se configura con un prescaler de 1:64. Si el ciclo de instrucción es de 1 µs, ¿cuántos incrementos debe contar el registro del Timer para que transcurran aproximadamente 1 ms?
Aproximadamente 15-16 incrementos (1 ms / (1 µs * 64) = 1000 / 64 = 15.625).
¿Desde qué bancos de memoria de registros se puede acceder directamente al registro STATUS
en un PIC16F84?
Desde el Banco 0 y el Banco 1.
En lenguaje C, si quiero poner a 0 el bit 1 (el segundo bit) de una variable entera ‘var’, ¿qué operación debo realizar?
var = var & (~0x02);
o su forma abreviada var &= ~0x02;
.
¿Cuántas líneas de entrada de interrupción física suele tener un procesador soft-core como MicroBlaze?
Típicamente una o dos, pero se conecta a un controlador de interrupciones (INTC) que gestiona múltiples fuentes.
Al diseñar un periférico sencillo (GPIO, Timer) para un bus AXI, ¿qué versión de AXI es la más adecuada?
AXI4-Lite.
Las arquitecturas Harvard y Von Neumann se diferencian fundamentalmente en:
Cómo gestionan el acceso a la memoria de instrucciones y datos (buses separados vs. bus único).
¿El pipeline del PIC16F84 puede sufrir paradas (stalls) debido a dependencias entre instrucciones?
Sí, principalmente debido a dependencias de control (saltos) y algunas dependencias de datos.
¿Qué evento importante del microcontrolador no se gestiona a través de los bits del registro INTCON
?
El Reset.
¿Cómo se conectan los periféricos en PIC16F84 y en MicroBlaze?
Son distintos: PIC16F84 usa registros SFR mapeados en un espacio especial accesible como memoria; MicroBlaze usa exclusivamente mapeo en memoria vía AXI.
Si se configura el prescaler del Timer0 a 1:8 y se carga TMR0 con 0, ¿cuántos ciclos de instrucción tardará en desbordar (asumiendo TMR0 de 8 bits)?
Tardará 2048 ciclos de instrucción (256 cuentas * 8 ciclos/cuenta).
¿Desde qué bancos de memoria de registros se puede acceder directamente al registro INTCON
en un PIC16F84?
Desde el Banco 0 y el Banco 1.
¿Desde qué banco de memoria de registros se puede acceder al registro TRISA
(Control Dirección Puerto A) en un PIC16F84?
Únicamente desde el Banco 1.
En software (C), al leer una variable, no siempre se accede a memoria física. ¿Quién puede evitarlo?
El compilador, mediante optimizaciones (ej: usando registros), a menos que la variable sea volatile
.
¿Cuántas variantes principales existen del protocolo AXI4?
Tres: AXI4 (completo), AXI4-Lite (registros) y AXI4-Stream (flujo de datos).
¿Qué arquitectura de memoria utiliza típicamente un microcontrolador PIC de 8 bits?
La arquitectura Harvard (o Harvard modificada).
Comparando la gestión de eventos mediante encuesta (polling) frente a interrupciones:
El polling requiere que el programa principal verifique activamente el estado, mientras que las interrupciones interrumpen el flujo normal del programa principal para atender el evento.
¿Qué etapa del proceso de compilación necesita conocer la memoria del sistema destino?
El enlazador (linker).
¿Qué tamaño en bits ocupa el opcode de la instrucción MOVLW
en un PIC12F508 (gama baja)?
4 bits (el opcode es 1100
).
Aplicada a un registro F, ¿qué instrucción pone el bit 2 de F a 0?
BCF F, 2
(Bit Clear F).
En C, si var
es un puntero con la dirección 0x42100000, ¿cómo se accede al dato en esa dirección?
Mediante desreferencia: dato = *var;
.
¿Qué tipo de acceso a periféricos soporta el procesador MicroBlaze?
Mapeo en memoria (Memory-Mapped I/O).
¿Cuál de los modelos teóricos de computación tiene la menor potencia de cómputo?
El Autómata Finito.
¿Cuál es el tamaño de instrucción en bits de los microcontroladores PIC16 (gama media)?
14 bits.
¿Cuántos bits de dirección se necesitan como mínimo para direccionar una memoria de 2 KBytes?
11 bits (2^11 = 2048).
¿Cuántos ciclos de instrucción consume la ejecución de la instrucción BTFSC
(Bit Test F, Skip if Clear)?
Es variable: un ciclo si no salta (bit=1), dos ciclos si salta (bit=0).
En C (32 bits, int=4 bytes), ¿qué dirección se lee con: int *ptr = (int*)0x42100000 + 4; dato = *ptr;
?
0x42100010
(Dirección base + 4 * sizeof(int) = 0x42100000 + 16).
¿Qué versión del bus AXI está diseñada para transmitir datos en flujo continuo sin direcciones?
AXI4-Stream.
Comparando el desarrollo en hardware (VHDL/FPGA) con software (C/Procesador):
El desarrollo en hardware permite una implementación con mayor concurrencia (paralelismo).
¿Cuál de los modelos teóricos de computación puede resolver la clase más amplia de problemas?
La Máquina de Turing.
¿Cuál es el tamaño de instrucción en bits de los PIC de 8 bits de gama baja (PIC10F/PIC12F)?
12 bits.
¿Cuántos hilos necesita un periférico esclavo para comunicarse por SPI estándar?
Cuatro: SCLK, MOSI, MISO, SS/CS.
¿Cuántos ciclos de instrucción consume la ejecución de la instrucción RETLW
(Return with Literal in W)?
Dos ciclos de instrucción.
¿Qué instrucción sirve para poner a 1 un bit específico de un registro F?
BSF F, b
(Bit Set F).
Deja un comentario