Este documento aborda los fundamentos de los sistemas de comunicación en microprocesadores, desde los conceptos básicos de comunicación serial y paralela hasta la implementación práctica con el microcontrolador
Los sistemas digitales intercambian información entre dispositivos mediante dos grandes paradigmas de comunicación. La elección entre uno y otro depende del ancho de banda requerido, la distancia de transmisión y el coste del cableado.
Envía múltiples bits de forma simultánea a través de varios canales (hilos) en paralelo. Ofrece mayor velocidad de transferencia a cortas distancias, pero requiere más líneas físicas y es más susceptible a problemas de sincronización entre canales.
Transmite los bits uno detrás del otro por un único hilo. También conocida como RS-232, simplifica el cableado y permite distancias de transmisión mayores. Es el estándar dominante en sistemas embebidos y automatización industrial.

Conexión paralela entre Equipo A y Equipo B

Conexión en serie entre Equipo A y Equipo B
Cuando la distancia entre dispositivos es considerable, la señal digital no puede transmitirse directamente: requiere un proceso de modulación en el transmisor y demodulación en el receptor. Para distancias cortas, la señal digital viaja sin modificar. Las técnicas de modulación digital más utilizadas son ASK, FSK y PSK.
No requieren modulación. La señal digital se transmite directamente entre dispositivos con niveles de tensión lógicos estándar (TTL, CMOS). Adecuado para comunicaciones en la misma placa o entre dispositivos próximos.
Requieren modulación y demodulación. La señal digital modifica una portadora analógica para resistir la atenuación y el ruido del canal de transmisión.
En la modulación ASK (Amplitude-Shift Keying), los datos digitales se representan como variaciones de amplitud de la onda portadora. El bit '1' se corresponde con una amplitud alta y el bit '0' con amplitud nula o reducida. Es simple pero sensible al ruido.

La modulación FSK (Frequency Shift Keying) es una técnica de modulación digital en la que la información se codifica mediante variaciones de frecuencia de la señal portadora. Se utilizan dos o más frecuencias distintas para representar cada símbolo: una frecuencia corresponde al bit '1' (marca) y otra al bit '0' (espacio).
FSK presenta una mayor inmunidad al ruido en comparación con ASK, ya que las variaciones de amplitud no afectan a la detección de la frecuencia. Por esta razón es ampliamente utilizada en módems de baja y media velocidad, en comunicaciones por radio y en redes de datos industriales como HART.

Representación de la señal FSK: frecuencia alta para '1' y frecuencia baja para '0'
La dirección en que fluyen los datos entre transmisor y receptor define el modo de transmisión. Existen tres modalidades fundamentales, cada una con sus propias aplicaciones en sistemas embebidos y de telecomunicaciones.
Comunicación unidireccional: los datos fluyen únicamente en un sentido, del transmisor al receptor. El receptor no puede responder por el mismo canal. Ejemplo: emisoras de radio, sistemas de telemetría de un solo sentido.
Comunicación bidireccional no simultánea: los datos pueden fluir en ambos sentidos, pero no al mismo tiempo. Se opera bajo un esquema maestro-esclavo donde solo un dispositivo transmite a la vez. Ejemplo: walkie-talkies, RS-485 en modo bus.
Comunicación bidireccional simultánea: transmisor y receptor pueden enviar y recibir datos al mismo tiempo. Es el modo estándar en la mayoría de sistemas de telecomunicación modernos. Ejemplo: llamadas telefónicas, USART en modo full duplex.

La comunicación serial puede organizarse de dos maneras según la forma en que transmisor y receptor sincronizan el flujo de bits. La elección entre ambos métodos condiciona la complejidad del hardware, la velocidad de transferencia y la robustez ante el ruido.
Los datos se envían de forma continua desde TXD a RXD. Tanto el transmisor como el receptor se sincronizan mediante una línea de reloj adicional (CLK). Esto permite velocidades más altas y mayor eficiencia. Protocolos representativos: I²C y SPI.

No se emplea señal de reloj compartida. Para que los dispositivos se entiendan, los datos se encapsulan con un bit de inicio y uno o dos bits de parada, y ambos extremos deben acordar previamente la velocidad de transmisión (baud rate). Protocolo representativo: UART / RS-232.

El estándar RS-232 fue diseñado en los años 60 para permitir la comunicación entre un equipo terminal de datos (DTE — Data Terminal Equipment, p. ej. un PC) y un equipo de comunicación de datos (DCE — Data Communication Equipment, p. ej. un módem). A pesar de su antigüedad, sigue siendo ampliamente utilizado en entornos industriales y de automatización.
Bits de inicio, paridad, número de bits de datos, bits de parada y velocidad (baud rate).
El voltaje más utilizado es ±12 V. Emplea lógica invertida: tensión negativa representa '1' lógico y positiva representa '0' lógico.
A diferencia de la lógica TTL, en RS-232 el estado lógico '1' (marca) corresponde a tensiones entre -3 V y -15 V, y el '0' (espacio) entre +3 V y +15 V.

Uno de los aspectos más críticos en el diseño de sistemas de comunicación serial es garantizar la compatibilidad de niveles de tensión entre los distintos dispositivos. Los estándares definen bandas de tensión para los estados lógicos '0' y '1', con zonas de transición o histéresis para mejorar la inmunidad al ruido.
Es fundamental distinguir entre los niveles lógicos TTL (0 V / 5 V), CMOS (0 V / 3,3 V) y los niveles RS-232 (±12 V) antes de interconectar dispositivos, ya que una incompatibilidad puede dañar el hardware irreversiblemente. Se requieren circuitos adaptadores de nivel cuando los estándares difieren.

El puerto serial es la interfaz física a través de la cual un ordenador o microcontrolador envía y recibe datos de forma serial. El conector más reconocido es el DB-9 (9 pines), sucesor del DB-25, que implementa el estándar RS-232 y agrupa las señales de datos, control de flujo y tierra en un único conector compacto.
Cada pin del conector tiene una función específica: TXD (transmisión de datos), RXD (recepción de datos), RTS/CTS (control de flujo por hardware), DTR/DSR (control de estado del terminal y del módem) y GND (tierra de señal). Conocer la asignación de pines es esencial para realizar correctamente el cableado entre dispositivos.


El módulo USART es el periférico de comunicación serial más versátil presente en los microcontroladores modernos. Permite operar tanto en modo síncrono como asíncrono, adaptándose a una amplia variedad de protocolos y velocidades de transmisión.
Operación simultánea de transmisión y recepción de datos.
Generador de alta resolución para velocidades estándar de transmisión.
Soporta 5, 6, 7, 8 o 9 bits de datos y 1 o 2 bits de parada.
Generación y comprobación de paridad par o impar implementada en hardware.
TX completa, registro de datos TX vacío y RX completa.
En la comunicación serial asíncrona, cada byte de información se envuelve en una trama o frame que permite al receptor identificar el inicio y el fin de los datos, así como detectar posibles errores. La trama es la unidad fundamental de transferencia y su estructura debe ser acordada previamente por ambos extremos de la comunicación.
A continuación se muestra la estructura en tensión de una trama RS-232 estándar, donde se aprecian claramente los niveles lógicos correspondientes a cada campo de la trama:

La trama incluye: bit de inicio, bits de datos (LSB primero), bit de paridad opcional y uno o dos bits de parada. La línea permanece en estado alto (reposo) cuando no hay transmisión activa.
Cada campo dentro de la trama de comunicación serial cumple una función específica e indispensable para garantizar la integridad y sincronización de la transferencia de datos. Es fundamental comprender el propósito de cada campo para configurar correctamente el módulo USART.
Es la transición de 1 a 0 que indica al receptor que comienza una nueva transferencia. Al detectar este flanco descendente, el receptor activa su reloj interno y comienza a muestrear los bits de datos.
Constituyen la información útil a transmitir. Pueden ser 5, 6, 7 u 8 bits. El primer bit en salir es el menos significativo (LSB). El receptor los captura en orden inverso para recomponer el byte original.
Campo opcional de detección de errores. Permite identificar si se ha producido un error en la transmisión, aunque no puede corregirlo. Puede ser paridad par (even) o impar (odd).
Son estados de '1' lógico al final de la trama. El estándar permite 1 o 2 bits de parada. Garantizan un tiempo mínimo de reposo antes de la siguiente transmisión.
El Baud Rate define el número de bits que se transmiten por segundo (bps). En la transmisión asíncrona no existe una señal de reloj compartida, por lo que es imprescindible que transmisor y receptor operen exactamente a la misma velocidad para interpretar correctamente los datos recibidos.
El estándar RS-232 define los siguientes valores normalizados de baud rate:
bps
bps
bps
bps
bps
La elección del baud rate adecuado depende de la longitud del cable y las interferencias electromagnéticas del entorno. A mayor distancia o nivel de ruido, se recomienda usar velocidades menores. Los valores completos del estándar incluyen también: 2400, 4800, 38400, 56000, 128000 y 256000 bps.
Uno de los principales desafíos al conectar distintos dispositivos en un sistema de comunicación serial es la incompatibilidad de niveles de tensión. Los microcontroladores modernos trabajan con lógica de 3,3 V o 5 V (TTL/CMOS), mientras que el estándar RS-232 opera con ±12 V. Esta diferencia hace necesario el uso de circuitos adaptadores de nivel para garantizar una comunicación fiable y evitar daños en los dispositivos.
La imagen siguiente ilustra la comparación entre los diferentes niveles de voltaje que coexisten en los sistemas de comunicación serial, ayudando a visualizar las zonas de compatibilidad y los márgenes de ruido de cada estándar:

El circuito integrado MAX232 es la solución estándar para adaptar los niveles de tensión TTL/CMOS (0–5 V) del microcontrolador a los niveles RS-232 (±12 V) requeridos por el puerto serie del ordenador. Internamente, incorpora una bomba de carga (charge pump) que genera las tensiones ±12 V a partir de una única alimentación de 5 V, eliminando la necesidad de fuentes de alimentación adicionales.
El MAX232 contiene dos conversores TTL→RS-232 (drivers) y dos conversores RS-232→TTL (receivers) en un único encapsulado DIP-16, junto con los condensadores de la bomba de carga. Solo se requieren cinco condensadores externos de 1 µF para su funcionamiento. Es el chip de adaptación de nivel más utilizado en proyectos con microcontroladores AVR, PIC y similares.

Para establecer comunicación serial entre un microcontrolador AVR y un ordenador, es necesario interponer el circuito adaptador MAX232 entre los pines USART del microcontrolador (niveles TTL) y el puerto DB-9 del PC (niveles RS-232). La conexión cruzada de las líneas TXD y RXD entre ambos extremos asegura que la transmisión de uno llegue a la recepción del otro.
El esquema de conexión muestra cómo las señales TXD y RXD del microcontrolador se conectan a las entradas del MAX232, cuyas salidas se conectan al conector DB-9. La línea de tierra (GND) debe ser compartida entre todos los dispositivos para establecer una referencia de tensión común.
MAX 232

FTDI 232

CH340

El microcontrolador ATmega328p de Atmel dispone de una tabla de vectores de interrupción que mapea cada fuente de interrupción a una dirección de memoria específica del programa. Cuando se produce un evento de interrupción (como la recepción de un dato por USART), el procesador suspende temporalmente la ejecución del programa principal y salta a la dirección definida en el vector correspondiente.
El módulo USART del ATmega164p genera tres vectores de interrupción independientes: uno para recepción completa (RX Complete), otro para transmisión completa (TX Complete) y un tercero para el registro de datos de transmisión vacío (UDRE). Esta granularidad permite gestionar el flujo de datos de forma eficiente mediante rutinas de servicio de interrupción (ISR).

El módulo USART del ATmega328p es un periférico de comunicación serial de alto rendimiento que ofrece una amplia flexibilidad de configuración. Es compatible tanto con la comunicación asíncrona estándar (UART) como con la síncrona con reloj externo, y puede actuar como maestro o esclavo en configuraciones multiprocesador.
Transmisión y recepción simultánea de datos en registros independientes.
Seleccionable por software. En modo síncrono puede actuar como maestro o esclavo.
Soporta 5, 6, 7, 8 o 9 bits de datos con 1 o 2 bits de parada. Paridad configurable por hardware.
Incluye detección de bit de inicio falso y filtro digital de paso bajo para mayor robustez.
Permite la comunicación eficiente entre múltiples microcontroladores en un mismo bus serial.
Modo de velocidad doble (U2X) para maximizar el baud rate en comunicaciones asíncronas.
Una aplicación práctica fundamental en sistemas embebidos es la comunicación serial entre dos microcontroladores. Para lograrlo, se conecta el pin TXD del primer microcontrolador al pin RXD del segundo y viceversa, compartiendo una tierra común. Ambos dispositivos deben estar configurados con el mismo baud rate, número de bits de datos, paridad y bits de parada para que la comunicación sea exitosa.
En este tipo de esquemas, uno de los microcontroladores actúa habitualmente como maestro (inicia la comunicación y envía peticiones) y el otro como esclavo (responde a las peticiones del maestro). Este patrón es la base de multitud de sistemas de adquisición de datos y control distribuido en automatización industrial.

Para integrar la comunicación serial con un ordenador en una aplicación de escritorio, Visual Basic 6 ofrece el control Microsoft Comm Control 6.0 (MSComm1). Este componente ActiveX encapsula toda la complejidad del puerto serie y proporciona una interfaz de alto nivel para enviar y recibir datos fácilmente desde una aplicación Windows.
Settings: Configura el baud rate, paridad, bits de datos y stop. Ejemplo: "9600,N,8,1"
CommPort: Número del puerto COM a utilizar (COM1, COM2, etc.).
PortOpen: Abre (True) o cierra (False) el puerto serial.
Output: Propiedad de escritura para enviar datos por el puerto.
Input: Propiedad de lectura para recibir datos del puerto.
MSComm1.Settings = "2400,N,8,1"
MSComm1.CommPort = Nº_Puerto
MSComm1.PortOpen = True
MSComm1.Output = "UTM"
UTM = MSComm1.InputEste fragmento configura el puerto a 2400 bps, lo abre y realiza un ciclo de envío y recepción de la cadena "UTM".
