12 May

Conceptos Fundamentales de Microcontroladores y Microprocesadores

Microprocesador (MP) vs. Microcontrolador (MC)

Un Microprocesador (MP) es un circuito integrado que ejecuta órdenes, organiza y envía información al resto de los componentes que integran una computadora. Sin embargo, no es capaz de ser funcional por sí mismo; requiere de otros dispositivos como memoria de programa, memoria de datos, dispositivos de comunicación o periféricos. Está diseñado para ejecutar instrucciones de propósito general.

Un Microcontrolador (MC), a menudo considerado un «sistema mínimo», es un circuito integrado que generalmente incluye un sistema mínimo completo en un solo chip. Incorpora la CPU, memoria (programa y datos) y periféricos. Un MC tiene una memoria de programa y datos fija, sin posibilidad de aumentarla o disminuirla externamente de forma sencilla. Fueron creados inicialmente para resolver problemas específicos.

Unidades Lógicas Básicas de un Microcontrolador

Las unidades lógicas básicas que conforman un microcontrolador son:

  • Unidad Aritmética Lógica (ALU)
  • Unidad de Control
  • Registros
  • Circuito de Reloj (Clock)
  • Memoria de Solo Lectura (ROM) o Flash (Memoria de Programa)
  • Memoria de Acceso Aleatorio (RAM) (Memoria de Datos)
  • Puertos de Entrada/Salida (E/S)

Algunos microcontroladores incorporan periféricos adicionales para mayor flexibilidad en sus aplicaciones, como:

  • Convertidores Digital-Analógico (DAC)
  • Moduladores de Ancho de Pulso (PWM)
  • Convertidores Analógico-Digital (ADC)
  • Interfaces de comunicación: Bluetooth (BT), I²C, SPI, WiFi, LoRa
  • Memoria EEPROM

Arquitecturas de Procesadores

Arquitectura Von Neumann

Esta arquitectura utiliza buses compartidos para la memoria de datos y la memoria de programas. A menudo se asocia con procesadores CISC (Complex Instruction Set Computer), que se refiere a la gran cantidad de instrucciones que el procesador puede ejecutar. El hecho de que ambas memorias compartan un mismo bus para direcciones y datos implica un posible congestionamiento en la transferencia de información, limitando la velocidad.

Arquitectura Harvard

La arquitectura Harvard cuenta con buses internos separados para la memoria de datos (típicamente 8 bits) y la memoria de programa (pueden ser 12, 14, 16 bits o más). También se asocia comúnmente con procesadores RISC (Reduced Instruction Set Computer). La separación de los canales de direcciones y datos supone una ventaja de, al menos, el doble de velocidad de acceso respecto a la arquitectura Von Neumann, ya que permite buscar la siguiente instrucción mientras se accede a los datos de la instrucción actual.

Componentes Clave de la CPU

Unidad Central de Procesamiento (CPU)

Es el hardware principal de un microprocesador o microcontrolador. Interpreta las instrucciones de un programa informático mediante la realización de las operaciones básicas aritméticas, lógicas y de entrada/salida (E/S) del sistema.

Funciones Principales de la CPU
  • Buscar y ejecutar instrucciones del programa en el orden adecuado.
  • Transferir datos entre la memoria y las secciones de entrada/salida.
  • Responder a las interrupciones externas.
  • Proporcionar señales de temporización y control para sincronizar el sistema.

Acumulador (Registro W en PIC)

Es un registro fundamental en el que se almacenan temporalmente los resultados aritméticos y lógicos intermedios que serán tratados por la Unidad Aritmético-Lógica (ALU).

Unidad Aritmético-Lógica (ALU)

Realiza operaciones aritméticas (como sumar, restar, incrementar, decrementar) y lógicas (como AND, OR, XOR, rotaciones, desplazamientos).

Registro de Estado (STATUS)

Contiene información sobre el estado actual de la CPU después de una operación. Sus bits individuales son indicadores o flags (como Acarreo (Carry), Cero (Zero), Acarreo Digital (DC)) que se utilizan en instrucciones condicionales (bifurcaciones) para tomar decisiones en el flujo del programa.

Contador de Programa (PC)

Es un registro que contiene la dirección de memoria de la siguiente instrucción del programa que se va a ejecutar. Su longitud es igual que la anchura del bus de direcciones de la memoria de programa.

Puntero de Pila (Stack Pointer – SP)

Es un registro que apunta a la posición de memoria actual (generalmente la cima) dentro de una zona especial llamada Pila (Stack). Sigue la pista de la siguiente posición de memoria disponible en la pila. La pila se utiliza para el almacenamiento temporal de datos, direcciones de retorno (en llamadas a subrutinas o interrupciones) y el contenido de registros.

Registros de Propósito General (GPR)

Son registros utilizados para almacenar datos temporalmente durante la ejecución del programa. No tienen tareas específicas asignadas por hardware, a diferencia del Acumulador, PC o SP, aunque algunas instrucciones pueden operar específicamente con ellos. Generalmente, no pueden funcionar directamente como acumulador en la ALU ni en operaciones de E/S directas sin pasar por otros registros.

El Microcontrolador PIC16F877A

Características Principales

  • Arquitectura: Harvard RISC. Se considera Harvard porque separa la memoria de datos (RAM) de la memoria de programa (Flash), lo que permite acceder a instrucciones y datos simultáneamente. Es RISC por su conjunto reducido y optimizado de instrucciones (típicamente 35 instrucciones).
  • Circuito de Reloj: Genera los impulsos que sincronizan el funcionamiento interno del sistema.
  • Temporizadores (Timers): Módulos para medir tiempo o generar eventos periódicos.
  • Perro Guardián (Watchdog Timer – WDT): Un temporizador independiente que provoca una reinicialización del sistema si el programa se bloquea. Es un temporizador que decrementa un contador, iniciando con un valor alto. Cuando el contador llega a cero, se reinicia el sistema. Se debe diseñar una subrutina en el programa para refrescar («patear») o reiniciar al perro guardián periódicamente antes de que provoque el reset, demostrando que el programa sigue funcionando correctamente.
  • Estado de Reposo (Sleep Mode): Modo de bajo consumo de energía.
  • Comparadores Analógicos: Permiten comparar voltajes analógicos.
  • Memoria de Programa (Flash): 8K palabras de 14 bits. Ubicada en las direcciones 0x0000 a 0x1FFF. Almacena el código del programa.
  • Memoria de Datos (RAM): 368 bytes. Organizada en bancos. Almacena datos temporales y Registros de Función Especial (SFR).
  • Memoria EEPROM de Datos: 256 bytes para almacenamiento no volátil de datos.

Registros Clave del PIC16F877A

  • Contador de Programa (PC): Tiene 13 bits. Es un registro interno que indica la dirección de la siguiente instrucción a ejecutar en la memoria de programa.
  • Registro de Trabajo (W): Tiene 8 bits. Es un registro interno y se usa como acumulador principal para operaciones aritméticas y lógicas.
  • Registro de Estado (STATUS): Tiene 8 bits. Está ubicado en la dirección 0x03 (y replicado en otros bancos) de la RAM de datos (SFR). Almacena indicadores como Carry (C), Zero (Z), Digit Carry (DC) y los bits de selección de banco de memoria (RP0, RP1).
  • Puntero de Pila (Stack Pointer): Gestiona la pila de hardware de 8 niveles.

Puertos de Entrada/Salida (E/S) Paralelos

El PIC16F877A dispone de varios puertos configurables como entrada o salida:

  • Puerto A (PORTA / TRISA): 6 bits.
  • Puerto B (PORTB / TRISB): 8 bits.
  • Puerto C (PORTC / TRISC): 8 bits.
  • Puerto D (PORTD / TRISD): 8 bits.
  • Puerto E (PORTE / TRISE): 3 bits.

Se configuran como entrada (bit a ‘1’) o salida (bit a ‘0’) mediante los registros TRISx correspondientes (ej. TRISA para PORTA). Los registros PORTx se usan para leer el estado de los pines (si están configurados como entrada) o para escribir el estado lógico (si están configurados como salida).

Programación en Ensamblador para PIC

Configuración Inicial y Directivas

Palabra de Configuración (`__CONFIG`)

Define los «fuses» o bits de configuración del microcontrolador, que determinan su modo de operación fundamental. Se establece una sola vez al programar el chip.

__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON

Ejemplo de configuración:

  • _CP_OFF: Protección de Código desactivada (Code Protection OFF). Si estuviera ON (_CP_ON), el código no podría ser leído externamente después de programado.
  • _WDT_OFF: Perro Guardián desactivado (Watchdog Timer OFF). Si fuera _WDT_ON, estaría habilitado por defecto.
  • _XT_OSC: Selección del tipo de oscilador (en este caso, Cristal/Resonador XT). Otros modos comunes son HS, LP, RC. (Controlado por los bits FOSC1 y FOSC0).
  • _PWRTE_ON: Temporizador de Encendido habilitado (Power-up Timer Enable ON). Genera un retardo fijo en la inicialización del microcontrolador después de encenderse, asegurando que el voltaje de alimentación sea estable.

La palabra de configuración se almacena en una dirección específica de la memoria de programa (2007h en el PIC16F877A). El espacio de 2000h a 3FFFh también puede contener IDs de dispositivo y espacio de prueba.

Directivas del Ensamblador

Son instrucciones para el programa ensamblador (no para el microcontrolador) que facilitan la escritura y organización del código.

  • LIST P=PIC16F877A: Indica al ensamblador qué microcontrolador específico se está utilizando.
  • #INCLUDE <P16F877A.INC>: Incluye un archivo de cabecera que contiene definiciones estándar para los registros (SFR) y bits del PIC16F877A, permitiendo usar nombres simbólicos (como STATUS, PORTB) en lugar de direcciones numéricas.
  • EQU (Equate): Permite asignar un nombre simbólico (etiqueta) a un valor constante, dirección de memoria o registro. Ejemplo: CONTADOR EQU 0x20.
  • ORG (Origin): Indica al ensamblador la dirección de memoria de programa a partir de la cual debe colocar las siguientes instrucciones. Por ejemplo, ORG 0x0000 para el vector de reset, u ORG 0x0005 para iniciar el programa principal, dejando libre la dirección 0x0004 para el vector de interrupción.
  • END: Marca el final del código fuente para el ensamblador.

Contexto Histórico: Evolución de Microcontroladores Intel

En 1976, Intel introdujo la arquitectura de 8 bits MCS-48, enfocada inicialmente en aplicaciones automotrices.

Con mejoras importantes, en 1980 se lanzó al mercado el Intel 8051, estableciendo la arquitectura estándar MCS-51. Esta arquitectura sigue siendo relevante actualmente y fue pionera en incorporar memoria Flash (basada en tecnología ETOX – EPROM Tunnel Oxide) en versiones posteriores.

Deja un comentario