Los PIC16F87X forman una subfamilia de microcontroladores PIC (Peripheral Interface Controller) de gama media de 8 bits, fabricados por Microchip Technology Inc..

Cuentan con memoria de programa de tipo EEPROM Flash mejorada, lo que permite programarlos fácilmente usando un dispositivo programador de PIC. Esta característica facilita sustancialmente el diseño de proyectos, minimizando el tiempo empleado en programar los microcontroladores (µC).

Esta subfamilia consta de los siguientes modelos que varían de acuerdo a prestaciones, cantidad de terminales y encapsulados:

PIC16F870 PIC16F871 PIC16F872 PIC16F873A PIC16F874A PIC16F876A PIC16F877A

La "A" final de los modelos PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A indica que estos modelos cuentan con módulos de comparación analógicos.Microcontroladores PIC. Diseño práctico de aplicaciones, página 34

El hecho de que se clasifiquen como microcontroladores (MCU) de 8 bits hace referencia a la longitud de los datos que manejan las instrucciones, y que se corresponde con el tamaño del bus de datos y el de los registros de la CPU.

Se trata de versiones mejoradas del caballo de batalla PIC16F84, muy empleado en proyectos sencillos, de educación y de entrenamiento.

Características principales

Las características principales de estos dispositivos son:

CPU de arquitectura RISC (Reduced Instruction Set Computer). Set de 35 instrucciones. Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns). Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto. Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuación). Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuación). Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuación). Hasta 15 fuentes de Interrupción posibles. 8 niveles de profundidad en la Pila hardware. Modo de bajo consumo (Sleep). Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).Microcontrolador PIC16F84. Desarrollo de proyectos. 2ª edición, página 4 Rango de voltaje de operación desde 2,0V a 5,5V.PIC16F87XA DatasheetPIC16F870/871 DatasheetPIC16F872 Datasheet Conversor Analógico/Digital de 10 bits multicanal. 3 Temporizadores. Watchdog Timer o Perro Guardián. 2 módulos de captura/comparación/PWM. Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter). Puerto Paralelo Esclavo de 8 bits (PSP). Puerto Serie Síncrono (SSP) con SPI e I²C.

Detalles según modelo

Modelo Memoria de programa Flash (palabras de 14 bits) Memoria de datos SRAM (bytes) Memoria de datos EEPROM (bytes) Líneas de E/S Canales A/D PWM MSSP USART Comparadores SPI I²C Maestro PIC16F870 2048 128 64 22 5 1 No No Sí No PIC16F871 2048 128 64 33 8 1 No No Sí No PIC16F872 2048 128 64 22 5 1 Sí Sí No No PIC16F873A 4096 192 128 22 5 2 Sí Sí Sí Sí (2) PIC16F874A 4096 192 128 33 8 2 Sí Sí Sí Sí (2) PIC16F876A 8192 368 256 22 5 2 Sí Sí Sí Sí (2) PIC16F877A 8192 368 256 33 8 2 Sí Sí Sí Sí (2)

Tipos de encapsulado y número de terminales

Microchip Technology Inc. fabrica estos microcontroladores en encapsulados PDIP y SPDIP, SOIC, SSOP, PLCC, QFP y QFN.

Los dispositivos PIC16F870, PIC16F872, PIC16F873A y PIC16F876A se fabrican en encapsulados de 28 pines en formatos PDIP, SOIC, SSOP y QFN, mientras que los dispositivos PIC16F871, PIC16F874A y PIC16F877A se fabrican en encapsulados de 40 pines para formato PDIP, y en encapsulados de 44 pines para formatos PLCC, QFP y QFN.

En los encapsulados de 28 pines no está implementado el Puerto Paralelo Esclavo (PSP).

Muchas de los pines o terminales de estos dispositivos, como suele ocurrir en la mayoría de microcontroladores, tienen más de una función (multiplexación), dependiendo de cómo se configuren internamente por software.

Los terminales VDD (tensión) y VSS (masa) sirven únicamente para alimentar al dispositivo.

Estructura interna

Estos microcontroladores tienen la memoria de programa y la memoria de datos separadas, lo que se conoce como arquitectura Harvard. Esta configuración interna permite entre otras cosas acceder a las instrucciones de programa y a los datos simultáneamente a través de buses diferentes, lo que mejora notablemente la velocidad de proceso de estos dispositivos.

Circuitería externa auxiliar

Para que el microcontrolador sea capaz de funcionar en cualquier proyecto, se necesita al menos la siguiente circuitería externa:

La alimentación. El reloj (oscilador).

También, y de manera opcional:

El circuito de reinicio.

La alimentación

Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentación, que va de 2,0 V a 5,5 V. La tensión a la cual se alimenten determinará la frecuencia máxima de trabajo.

La potencia máxima disipada es de 1 W y se calcula mediante la siguiente fórmula:

donde: es la tensión suministrada por la fuente de alimentación. es la corriente suministrada por las salidas del PIC en estado alto. es la corriente absorbida por las salidas del PIC en estado bajo. es la tensión entregada por los terminales en estado alto. es la tensión presente en los terminales en estado bajo.

El reloj

El reloj u oscilador se utiliza para generar la base de tiempo del microcontrolador. Para la conexión del oscilador se emplean los terminales OSC1 y OSC2 del dispositivo.

Los microcontroladores PIC16F87X emplean por cada ciclo de instrucción cuatro ciclos de reloj. Esto significa que por ejemplo, si el microcontrolador debe ejecutar un programa de 1000 instrucciones con un reloj de 10 MHz (periodo de reloj de 100 ns), el tiempo total que empleará para ejecutar todo el programa (asumiendo que todas las instrucciones fueran de un ciclo de instrucción) será de:

La serie PIC16F87X puede trabajar a una frecuencia de reloj máxima de 20 MHz. Esto quiere decir que, a esta frecuencia, el tiempo necesario para ejecutar las instrucciones de un ciclo de instrucción es de 200 ns, y de 400 ns para las de dos ciclos de instrucción (instrucciones de salto).

La señal de reloj puede generarse mediante una red resistencia-condensador, un cristal de cuarzo piezoeléctrico o un resonador cerámico, aunque empleando cristales de cuarzo se consiguen frecuencias de oscilación muy exactas, lo cual es útil para calcular tiempos de ejecución, temporizaciones precisas, etc.

Estos microcontroladores permiten escoger entre cinco tipos distintos de osciladores:

LP (Low Power): reloj de bajo consumo, estable, con frecuencia de oscilación de hasta 200 kHz. XT (Xtal, Crystal): estable, frecuencia de oscilación de hasta 4 MHz. HS (High Speed): estable, frecuencia de oscilación de hasta 20 MHz. RC (Resistor/Condensador): frecuencia de oscilación dependiente de resistencia, condensador, voltaje de alimentación y temperatura de trabajo. Es el tipo más económico, pero también el más inestable. Externo: cuando la señal de reloj es externa, generada por otro circuito.

Los modos LP, XT y HS suponen la conexión de un cristal de cuarzo o resonador cerámico entre las patitas OSC1/CLKIN y OSC2/CLKOUT del dispositivo, mientras que el modo RC y Externo solo ocupan la patita OSC1/CLKIN.

El circuito de reinicio

El terminal MCLR (Master Clear) debe estar a valor lógico alto para que el dispositivo funcione normalmente, esto es, sin irse a reinicio. Con un valor lógico bajo el dispositivo se reinicia, comenzando la ejecución desde el principio del programa que tenga cargado en memoria.

Lo más práctico, para facilitar el hecho de poder realizar un reinicio manual, es utilizar un pulsador (pulsador de reinicio), similar al que se puede encontrar en la mayoría de ordenadores. El fabricante recomienda que se intercale una resistencia de 50 a 100 ohmios entre el pulsador y la patita MCLR, para evitar posibles corrientes inducidas de más de 80 mA que podrían bloquear el dispositivo cuando este se lleva a masa (reinicio).

Debido a que el pulsador no produce una respuesta instantánea, producto de los rebotes de éste (transitorio), se generan una serie de pulsos hasta quedar estabilizado en su estado permanente. Para evitar esto se puede usar un condensador instalado en paralelo con la entrada MCLR (filtro pasa bajo).

También resulta muy efectivo el uso de un filtro pasa alto para hacer la señal de reinicio independiente del tiempo en que se presiona el pulsador. Inmediatamente después de pulsar el pulsador el μC se reinicia, sin tener en cuenta cuánto tiempo se mantiene presionado dicho pulsador.

Estas técnicas de reinicio son muy efectivas, pero no son las únicas. Existe infinidad de circuitos y posibilidades para provocar el reinicio externo en los microcontroladores, adecuándose cada solución a la necesidad o al criterio de diseño del circuito y su función específica.

Memoria interna

Existen tres bloques bien diferenciados de memoria. Estos son:

Memoria de programa EEPROM Flash: es el lugar físico donde se guarda el programa de usuario. Es de tipo no volátil. Memoria de datos SRAM: es el lugar físico donde se guardan datos. Es de tipo volátil. Memoria de datos EEPROM: es el lugar físico donde se guardan datos. Es de tipo no volátil.

Memoria de datos SRAM

Esta memoria es de tipo volátil, lo que significa que no conserva su contenido después de un apagado de alimentación.

En esta memoria se encuentran los registros de funciones especiales (SFR) y los registros de propósito general (GPR), y está particionada en cuatro bancos (0, 1, 2 y 3), seleccionables independientemente. El banco 0 es el banco seleccionado por defecto cuando se alimenta al microcontrolador.

Registros de funciones especiales (SFR)

Todos los microcontroladores cuentan con registros internos que permiten controlar y supervisar las funciones y recursos disponibles del dispositivo.

Los registros de los microcontroladores PIC se encuentran en un espacio especial de la memoria de datos, el SFR (Special Function Registers). En los dispositivos PIC16F87X estos registros son de 8 bits, la mayoría de lectura y escritura. Se puede acceder a dichos bits de manera individual, o bien a todo el registro a la vez.

Determinados pares de registros tienen funciones especiales para las cuales se pueden considerar unidos en un único registro de 16 bits, aunque físicamente siguen estando separados.

El registro STATUS

El registro de estado (STATUS) es uno de los más importantes y empleados en el microcontrolador.

Proporciona información acerca del resultado de operaciones aritméticas, operaciones lógicas y causa de reinicios, además de permitir la selección del banco de memoria de datos.

El registro W

El registro de trabajo W (Working Register) es un registro relevante especial de 8 bits que participa en la mayoría de instrucciones. A diferencia de los SFR, se encuentra dentro de la misma CPU, y puede ser accedido tanto para lectura como para escritura..

Set de instrucciones y sintaxis

Los PIC16F87X son microcontroladores RISC. Esto se refleja en que tienen un repertorio reducido de 35 instrucciones ortogonales (prácticamente todas las instrucciones pueden utilizar cualquier operando), éstas son rápidas y todas tienen una longitud fija de 14 bits.

Las instrucciones se pueden clasificar en:

Instrucciones de carga. Instrucciones de bits. Instrucciones aritméticas. Instrucciones lógicas. Instrucciones de salto. Instrucciones de manejo de subrutinas. Instrucciones especiales.

Tabla resumen de instrucciones