PIC16F877a

El PIC16F877a es un microcontrolador de 8 bits desarrollado por Microchip Technology, lanzado a finales de los años 90 como parte de la familia PIC16. Tiene un bajo consumo de energía y alta capacidad para aplicaciones incrustadas, de acuerdo con su datasheet, cuenta con un procesador RISC de 20MHZ de velocidad de la CPU y 200ns de tiempos de ejecución de instrucción.

Características

  • Cuenta con 3 temporizadores (Timer0, Timer1 y Timer2), que permiten gestionar eventos y medir el paso del tiempo.

  • Módulo Capture: Permite capturar el temporizador ante algún evento con una resolución de 12,5 ns.

  • Módulo Compare: Permite comparar 2 valores de un máximo de 16 bits con una resolución de 200 ns.

  • PWM (Modulación de Ancho de Pulso): Se encarga de enviar una señal de salida de ciclo variable, con una resolución de máximo 10 bits.

  • SSP (Puerto serie síncrono) permite comunicación entre dispositvos con los siguientes protocolos:

    • SSI (Serial Peripheral Interface) permiote la comunicación entre sensores, memorias y pantallas.

    • I2C™ (Inter-Integrated Circuit) permite la comunicación maestro-esclavo, como al querer conectar multiples dispositivos a un bus de datos.

  • USART/SCI (Receptor/Transmisor Asíncrono y Síncrono Universal) permite la comunicación serial de forma asincronica con otros dispositivos.

  • PSP (Puerto esclavo paralelo) permite la comunicaicón en paralelo de instrucciones lectura, escritura y selección de chip.

  • BOR (Brown-out reset) protege al dispositivo en caso de caídas de tensión.

  • RISC CPU: procesadores que están diseñados para ejecutar un número reducido de tipos de instrucciones que les permite operar a una velocidad más elevada (Solé, R. 2021).

_PIC16F877a_ 44 Pinout
Figure 1. Diagrama del microcontrolador 44 pins PIC16F877a

Fuente: Microchip Technology

PIC16F18855
Figure 2. Diagrama del microcontrolador 40 pins PIC16F877a

Fuente: Microchip Technology

A continuación, se describen las características básicas de acuerdo con Microchip Technology (Microchip, s.f.) del microcontrolador PIC16F877a

Característica Valor

Tamaño de memoria de programa (KB)

14

RAM (byte)

368

Data EEPROM (bytes)

256

Canitdad pines

40 o 44

Voltage Max. de operación (V)

5.5

Voltage Min. de operación (V)

2

Diferencias entre un Microcontrolador y un Microprocesador

A diferencia de los microprocesadores, el PIC16F877a (el cual es un microcontrolador) no consta de un sistema operativo para su funcionamiento. En lugar de eso, está diseñado para ejecutar directamente código incrustado escrito en lenguajes como C o ensamblador, sin necesidad de capas intermedias de software.

Característica Microcontrolador (ej: PIC16F877a) Microprocesador

Integración

Incluye CPU, memoria, I/O y periféricos

Solo contiene la unidad central de proceso (CPU)

Propósito

Aplicaciones incrustadas específicas

Computadoras generales o sistemas complejos

Programación

Fácil de programar con lenguajes simples

Requiere sistema operativo y software complejo

Costo

Bajo

Alto

Consumo de energía

Bajo

Generalmente más alto

Los microcontroladores como el PIC16F877a están optimizados para tareas específicas, mientras que los microprocesadores son más potentes pero requieren más componentes externos y recursos.

Usos del PIC16F877a

El PIC16F877a tiene usos en sistemas incrustados donde se requiere bajo consumo energético, una programación simplificada en C++ o assembly. Entre sus usos más comunes se encuentran:

  • Automatización industrial (control de motores, monitoreo de sensores)

  • Domótica (control de luces, cerraduras, temperatura)

  • Equipos médicos portátiles

  • Electrónica de consumo (juguetes inteligentes, electrodomésticos)

  • Sistemas educativos para enseñanza de programación y electrónica básica

  • Prototipos de IoT cuando se combinan con módulos de comunicación externa

Entorno de programación

Para poder programar al PIC16F877a se utiliza el IDE MPLAB ® Xpress IDE ofrecido por Microship Technology (Microchip, s.f.) , siendo una herramienta que aporta flexibilidad, permitiendo programar, depurar y cargar el código al PIC16F877a.

MPLAB
Figure 3. Logo de MPLAB

Fuente: Microchip Technology

Ejemplos de Aplicación

Los ejemplos a demostrar son obtenidos del texto de bibliografía (Ruiz, 2021).

Control de un LED por pulsador

Dentro de MCC se crea el nombre del proyecto (menú File → media de microcontroladores) con el nombre LED PULSADOR, luego en la ventasna Project Resources se asigna los terminales RA0 y RA5 como salida y entrada digital respectivamente, tal como muestra la figura 4.

MPLAB
Figure 4. Asignación de terminales

Fuente: MPLAB Xpress

Cambio_nombre_terminales
Figure 5. Cambio de nombre terminales

Fuente: MPLAB Xpress

clock_control
Figure 6. Figure 6: Ajuste de reloj interno

Fuente: MPLAB Xpress

#include "mcc_generated_files/system/system.h"

/*
    Main application
*/

int main(void)
{
    SYSTEM_Initialize();
      while(1)
    {
        if(PULSADOR_GetValue()==0) LED0_Toggle();
    }
}
Codigo en assembly para una funcionalidad similar (Agkopian, 2016):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Copyright (c) 2013 Manolis Agkopian		    ;
;See the file LICENCE for copying permission.	    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	PROCESSOR '16F876A'
	INCLUDE <P16F876A.INC>

	__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF

DL_CNT EQU 0x20 ;DELAY COUNTER: COUNTS THE INTERUPS FROM TMR0

	ORG 0x0000
	GOTO INIT
	ORG 0x0004
	GOTO TMR_CNT

INIT:
	BSF STATUS, RP0 ;SELECT BANK 01
	MOVLW B'11000111' ; PSA = 1/256 (THE TIMER WILL COUNT ONCE EVERY 256 CYCLES)
	MOVWF OPTION_REG ;AND USE INTERNAL INSTRUCTION CYCLE CLOCK

	BCF TRISB, 0 ;SET PB0 AS OUTPUT
	BCF STATUS, RP0 ;SELECT BANK 00

	BCF PORTB, 0

	MOVLW B'11100000' ;ENABLE TIMER 0 INTERUPT
	CLRF TMR0
	MOVWF INTCON

	MOVLW 0x0F ;256 * 256 * 15 = ABOUT 1S
	MOVWF DL_CNT ;SO WE SET THE DELAY COUNTER TO COUNT 15 INTERUPTS

MAIN:
	GOTO $ ;DO NOTHING, JUST WAIT FOR AN INTERUPT

TMR_CNT:
	BCF INTCON, GIE ;DISABLE ALL INTERUPTS
	BCF INTCON, TMR0IF ;CLEAR TMR0 OVERFLOW FLAG

	DECFSZ DL_CNT ;WHEN THE DELAY COUNTER BECOMES ZERO
	GOTO CONTINUE

	BTFSC PORTB, 0 ;THEN IF PB0 IS SET
	GOTO CLR_PB0 ;CLEAR IT

	BSF PORTB, 0 ;ELSE IF IS CLEARED, THEN SET IT
	GOTO CONTINUE_0

CLR_PB0:
	BCF PORTB, 0

CONTINUE_0:
	MOVLW 0x0F ;RESET THE DELAY COUNTER
	MOVWF DL_CNT

CONTINUE:
	BSF INTCON, GIE ;RENABLE THE INTERUPTS
	RETFIE

	END
clc
Figure 7. Ajuste CLC

Fuente: MPLAB Xpress

Comparación entre PIC16F877a y PIC18F4550

También hay opciones más modernas como el PIC18F4550 que tiene mayor capacidad de procesamiento y memoria interna.

Se puede realizar una comparación entre las opciones en el sitio web de Microchip.

Ambos son microcontroladores de 8 bits de Microchip, pero pertenecen a diferentes familias y niveles de capacidad.

Table 1. Características
Característica PIC16F877a PIC18F4550

Arquitectura

PIC16 (Mid-range)

PIC18 (High-end 8-bit)

Velocidad de reloj

Hasta 20 MHz

Hasta 48 MHz (con PLL)

Instrucciones por ciclo

1 cada 4 ciclos

1 por ciclo (en la mayoría)

Número de instrucciones

35

75+

Table 2. Memoria
Tipo de Memoria PIC16F877a PIC18F4550

Flash (programa)

14 KB

32 KB

RAM

368 bytes

2 KB

EEPROM

256 bytes

256 bytes

Table 3. Periféricos y Funcionalidades
Funcionalidad PIC16F877a PIC18F4550

Puertos I/O

33

35

Timers

3 (8 y 16 bits)

4 (8 y 16 bits)

ADC

10-bit, 8 canales

10-bit, 13 canales

PWM

2 canales

2 canales

USART / UART

1

1

SPI / I2C

Sí (mejorado)

USB

No

Sí (USB 2.0 Full-Speed)

Interrupciones

Básico

Avanzado (prioridades)

Table 4. Ventajas de Cada Uno
Comparación PIC16F877a PIC18F4550

Facilidad de uso

Muy fácil para principiantes

Más complejo, más potente

Costo

Más barato

Un poco más caro

Capacidad de procesamiento

Limitada

Superior

USB integrado

❌ No

✅ Sí

Tamaño de programa

14 KB

32 KB

Usa el PIC16F877a si:

  • Estás empezando con microcontroladores.

  • Tu proyecto es simple (sensores, control básico).

  • No necesitas USB ni mucha memoria.

Usa el PIC18F4550 si:

  • Necesitas mayor velocidad y complejidad.

  • Requieres comunicación USB integrada.

  • Trabajas con interfaces humanas, data logging, etc.

Conclusión

El microcontrolador PIC16F877a es una excelente opción para desarrolladores en busqueda de soluciones económicas y versátiles para sistemas incrustados. Sus periféricos integrados, bajo consumo de energía y facilidad de programación lo hacen ideal tanto para aplicaciones industriales como educativas.

La principal ventaja frente a otras soluciones es que existe una garantía de que el programa se puede almacenar en la memoria flash o eeprom por 40 años o más.