Conceptos Fundamentales de Arquitectura de Microprocesadores y Comunicación Serie

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 10,81 KB

1. La Pila (Stack): Concepto y Uso en Programación

Una pila es una estructura de datos fundamental que consiste en un conjunto de direcciones de memoria contiguas, a la cual se accede siempre por un único extremo, conocido como cabeza de pila o tope de pila.

El modo de acceso a sus elementos es del tipo LIFO (Last In, First Out), lo que significa que el último elemento en ser añadido es el primero en ser recuperado.

Su uso principal es almacenar y recuperar datos de manera eficiente, siendo una herramienta indispensable en la gestión de llamadas a funciones, el almacenamiento temporal de registros y la manipulación de datos en la ejecución de programas.

Programa Ejemplo de Uso de Pila

A continuación, se presenta un programa de ejemplo en ensamblador para ilustrar el funcionamiento básico de una pila:


ORG $80
DB $16, $00

ORG $EE00
LDHX #$0081   ; Carga el valor $0081 en el registro de índice X.
PSHX          ; Guarda el contenido de X (que es $0081) en la pila. El puntero de pila (SP) se decrementa.
PULA          ; Recupera el valor del tope de la pila y lo carga en el acumulador A. El SP se incrementa.
STA $81       ; Almacena el contenido del acumulador A (que ahora es $0081) en la dirección de memoria $81.

Nota: En este ejemplo, el valor `$0081` se carga en `X`, luego se guarda en la pila con `PSHX`. Posteriormente, `PULA` lo recupera y lo carga en el acumulador `A`. Finalmente, `STA $81` almacena este valor en la dirección de memoria `$81`.

2. Descripción de los Buses del Sistema: Direcciones, Datos y Control

Los buses son conjuntos de líneas de comunicación que permiten la transferencia de información entre los diferentes componentes de un sistema informático, como el microprocesador, la memoria y los dispositivos de entrada/salida. Se clasifican principalmente en Bus de Datos, Bus de Direcciones y Bus de Control.

Bus de Datos

  • Función: Permite al microprocesador intercambiar datos con los bloques de memoria y los módulos de entrada/salida (E/S).
  • Direccionalidad: Es bidireccional, lo que significa que puede tanto enviar como recibir datos.
  • Tamaño: Su número de líneas determina el tamaño de palabra con el que opera el microprocesador (ej., 8, 16, 32 o 64 bits).
  • Estado: Las líneas son tri-state (tres estados), pudiendo estar en bajo (0), en alto (1) o en alta impedancia (Z), lo que permite que múltiples dispositivos compartan el bus sin interferencias.

Bus de Direcciones

  • Función: Mediante este bus, el microprocesador selecciona la posición de memoria o el dispositivo de E/S específico con el cual desea intercambiar información.
  • Direccionalidad: Es unidireccional, ya que la información (direcciones) fluye únicamente desde el microprocesador hacia la memoria o los periféricos.
  • Capacidad: La cantidad de líneas que lo constituyen determina la cantidad máxima de direcciones de memoria que puede direccionar la CPU. Por ejemplo, si el bus tiene 16 líneas, podrá direccionar 216 (65.536) posiciones de memoria.

Bus de Control

  • Función: Por estas líneas circulan las señales de control y sincronización necesarias para el correcto funcionamiento del sistema.
  • Ejemplos de Señales:
    • Señal de Clock (reloj): Sincroniza todas las operaciones del sistema.
    • Señal de Reset: Reinicia el microprocesador y el sistema.
    • Señal de Lectura/Escritura de Memoria (R/W): Indica si la operación actual es de lectura o escritura en memoria.
    • Señales de interrupción, habilitación de periféricos, etc.

3. Saltos Condicionales y No Condicionales en Programación

Un salto es una instrucción que interrumpe el flujo secuencial normal de ejecución de un programa, haciendo que el procesador continúe en un punto diferente del código. Los saltos son esenciales para implementar estructuras de control como bucles, condicionales y llamadas a subrutinas.

Salto Condicional

El salto condicional es aquel que se ejecuta solo si se cumple una condición preestablecida. Estas condiciones suelen basarse en el estado de los indicadores (flags) del procesador, que reflejan el resultado de operaciones aritméticas o lógicas previas.

Ejemplos:

  • JZ (Jump if Zero): Salta si el resultado de la última operación fue cero.
  • JNZ (Jump if Not Zero): Salta si el resultado de la última operación no fue cero.
  • JC (Jump if Carry): Salta si se generó un acarreo.
  • JNC (Jump if No Carry): Salta si no se generó un acarreo.

Salto No Condicional

El salto no condicional es aquel que se realiza siempre, sin depender de ninguna condición. Se utiliza para transferir el control de forma incondicional a otra parte del programa.

Ejemplo:

  • JMP (Jump): Salta incondicionalmente a una dirección específica.
  • CALL (Call Subroutine): Llama a una subrutina, guardando la dirección de retorno en la pila.

4. Configuración y Funcionamiento de un Puerto de Entrada/Salida (E/S)

Un puerto de entrada/salida (E/S) es una interfaz que permite a un microcontrolador o microprocesador intercambiar información con el mundo exterior, es decir, con dispositivos periféricos como sensores, actuadores, pantallas, teclados, etc.

Funcionamiento

Los puertos de E/S suelen estar compuestos por registros internos en el microcontrolador que controlan el flujo de datos. Típicamente, incluyen:

  • Registro de Datos (Port Data Register - PDR): Contiene los datos que se leen del puerto (entrada) o se escriben en él (salida).
  • Registro de Dirección de Datos (Data Direction Register - DDR): Configura cada pin del puerto como entrada o como salida. Un bit en '0' lo configura como entrada, y un bit en '1' como salida.
  • Registro de Control (Port Control Register - PCR): Permite configurar características adicionales de los pines, como resistencias pull-up/pull-down, interrupciones, modos alternativos, etc.

Nota: La solicitud original pide un esquema en bloques, el cual no puede ser representado en formato de texto. Sin embargo, la explicación del funcionamiento describe los componentes clave de dicha configuración.

5. Modos de Comunicación Serie en Microcontroladores: SCI (UART) y SPI

La comunicación serie es un método para transferir datos bit a bit a través de un único canal. Los microcontroladores utilizan diversas interfaces serie para interactuar con otros dispositivos. Aquí se describen y comparan dos de los más comunes: SCI (UART) y SPI.

SCI (Serial Communications Interface) o UART

La interfaz de comunicación serie (SCI), a menudo conocida como UART (Universal Asynchronous Receiver/Transmitter), es una interfaz asíncrona que permite enviar y recibir datos en forma serie sobre una única línea de transmisión (Tx) y una única línea de recepción (Rx).

Características principales:

  • Asíncrona: No requiere una señal de reloj compartida entre el emisor y el receptor. La sincronización se logra mediante bits de inicio y parada.
  • Formato de Trama:
    • La línea se encuentra normalmente en estado alto (idle).
    • Un bit de inicio (un cero lógico) marca el comienzo de la transmisión.
    • Le siguen los bits de datos (generalmente 5 a 9 bits), que pueden ser ceros o unos.
    • Opcionalmente, puede haber un bit de paridad para detección de errores.
    • Finalmente, uno o dos bits de parada (un uno lógico) marcan el final de la transmisión.
  • Conexión: Típicamente punto a punto (un emisor, un receptor).
  • Velocidad: Generalmente más lenta que SPI, pero más sencilla de implementar para comunicaciones a distancias moderadas.

SPI (Serial Peripheral Interface)

La interfaz SPI (Serial Peripheral Interface) es un protocolo de comunicación serie síncrono desarrollado por Motorola, ampliamente utilizado para la comunicación de corta distancia entre microcontroladores y periféricos.

Características principales:

  • Síncrona: Requiere una señal de reloj compartida (SCK) entre el maestro y los esclavos para sincronizar la transferencia de datos.
  • Maestro/Esclavo: Opera en un modelo maestro-esclavo, donde un dispositivo (maestro) inicia y controla la comunicación, y uno o más dispositivos (esclavos) responden.
  • Líneas de Comunicación: Utiliza típicamente cuatro líneas:
    • SCK (Serial Clock): Señal de reloj generada por el maestro.
    • MOSI (Master Out, Slave In): Datos enviados del maestro al esclavo.
    • MISO (Master In, Slave Out): Datos enviados del esclavo al maestro.
    • SS o CS (Slave Select o Chip Select): Línea de selección de esclavo, activada por el maestro para comunicarse con un esclavo específico.
  • Velocidad: Generalmente más rápida que SCI/UART debido a su naturaleza síncrona y la capacidad de transmitir y recibir simultáneamente (full-duplex).
  • Conexión: Permite múltiples esclavos con líneas de selección de chip individuales.

Comparación SCI (UART) vs. SPI

CaracterísticaSCI (UART)SPI
SincronizaciónAsíncrona (bits de inicio/parada)Síncrona (reloj compartido SCK)
Líneas2 (Tx, Rx)3-4 (SCK, MOSI, MISO, SS/CS)
ModoGeneralmente Half-DuplexFull-Duplex (simultáneo)
ConexiónPunto a puntoMaestro-Esclavo (múltiples esclavos)
VelocidadMás lentaMás rápida
ComplejidadMás sencilla para distancias largasMás compleja en cableado para múltiples esclavos

Entradas relacionadas: