Hablemos de puertos

Para que el microcontrolador pueda distribuir la información que se procesa y enviarse al exterior, se necesitan los puertos que comuniquen por medio de estados lógicos. La forma en que están arreglados los puertos de los microcontroladores son entradas/salidas paralelas, siendo estos sus periféricos más vitales.

Entradas/Salidas paralelas

Los datos manejados por un microcontrolador se pueden resumir en:

  • Información de medición: es la información recibida a través de sensores externos y estos pueden ser análogos o digitales.
  • Transferencia de datos por paquetes: es la información enviada o recibida de forma paralela o serial.
  • Interfaces de usuario: son todos los emisores o receptores que pueden interactuar con una persona (LED’s, keypads, Diplays de 7 segmentos, Displays LCD, etc.).
  • Información de salida: son datos para activar o conmutar algún componente electrónico.

Como primer concepto que debemos manejar que los puertos de un microcontrolador son identificados como PORT+LETRA (Ej: PORTA, PORTB, etc.), todo puerto está diseñado como un arreglo de 8 bits así que un PORTA tiene por decirlo: RA0, RA1, RA2, RA3, RA4, RA5, RA5 y RA7, pero debido al diseño en algunos micontroladores encontraremos “puertos incompletos”, donde por ejemplo un puerto específico solo tenga 4 pines dedicados, aunque internamente este el registro con los bits restantes que corresponderían a esos pines, no son utilizables, esto es debido al tamaño y la arquitectura del microcontrolador.

Para un ejemplo de esto veamos la configuración de pines del PIC 18f2550:



Observemos lo siguiente de los puertos:


  • PORTA: se tiene un rango desde RA0 hasta RA6, siendo el pin RA6 únicamente pin de salida.
  • PORTB: completo
  • PORTC: Se tiene desde RC0 al RC2, se obvia el RC3 y continúa el RC4 al RC7.

La hoja de datos nos indica los registros asociados al puerto:


Los puertos de los microcontroladores tienen tres tecnologías: entradas de tipo "Schmitt Trigger" y “open drain” (algunos les decimos colector abierto, así me lo enseñaron) y la tecnología Totem-Pole.

  • Schmitt Trigger: generalmente se utilizan compuertas tipo Buffer o AND, pero es más común el uso de Buffer en las entradas, la compuerta Schmitt Trigger se caracteriza porque define valores umbrales para 1 y 0 lógico, ya que estos valores binarios son rangos de voltajes, lo que la compuerta hace es que cuando entra un valor intermedio lo rectifica para que sea un 1 o 0 lógico y no exista problemas por malinterpretación de una compuerta al entrarle esos valores.
  • Open drain (colector abierto): primero quisiera aclarar que llamar colector abierto a esta circuiteria a mi forma de verlo es incorrecto, ya que colector abierto es una configuración para transistores BJT y los microcontroladores utilizan transistores MOSFET. Son transistores pero con una tecnología distinta aunque la conectividad es la misma, a mi forma de ver debe ser llamada Open drain.
La configuración open drain se basa en la conectividad de dos de las terminales del mosfet, el pin de source de aterriza a Gnd, gate es el pin polarizado y el drain se queda solo conectado al pin de salida, como al “aire”. Esto hace que cuando gate es polarizado, la salida en drain se vuelva 0 lógico, pero cuando no lo es se vuelve un estado desconocido, en estos casos se deben usar resistencias pull up, para colocar la salida de 1 lógico.
  • Totem-Pole: Es la configuración de dos mosfets uno de canal N y otro canal P, el mosfet de canal P da el valor de 1 lógico y el mosfet de canal N  da el 0 lógico. Esta configuración permite ambos estados lógicos sin necesidad de una resistencia pull up.


Para saber si algún pin de un puerto tiene configuración open drain, debemos ver el diseño de los puertos en las hojas de datos. Pero como recomendación personal a pesar de que tipo de tecnología pueda tener la salida del microcontrolador siempre es bueno colocarle una resistencia pull up para estabilizar el valor de salida.


Algunos pines de los puertos están diseñados para una tarea específica, como por ejemplo una Interrupción, el PIC 16f84A tiene una forma muy sencilla aunque ya muy antigua de una interrupción en PORTB (RB0) y aprovechando podemos ver la idea en diagrama de bloques de cómo hacer un pin de un puerto bidireccional, con la ayuda de latch tipo D, buffers y un mosfet (open drain).


En varias hojas de datos el fabricante compartirá como es que están diseñados algunos puertos, claro este diseño es de un 16f84a, lo cual hace que este diseño sea ya obsoleto, pero nos da la idea de como se pensó para poder hacer un pin I/O y se tiene una base para mejoras en los diseños.