This article will discuss the PIC16F886 microcontroller, including its pinout, program memory organization, working circuit example, applications, technical specifications, key features, and comparison with other microcontrollers.

The PIC16F886 is an 8-bit microcontroller developed by Microchip Technology and part of the popular PIC16 family. It integrates a CPU, Flash program memory, RAM, EEPROM, and multiple peripheral modules into a single compact chip. The device is designed for embedded control systems that require reliable processing, flexible input/output control, and low power consumption.
This microcontroller provides 14 KB of Flash program memory, 368 bytes of RAM, and 256 bytes of EEPROM for storing data. It operates with a clock speed of up to 20 MHz and supports an operating voltage range of 2.0 V to 5.5 V, making it suitable for a wide range of digital designs. The chip also includes several communication interfaces such as USART, SPI, and I²C, along with timers and other integrated modules. The PIC16F886 also features 24 programmable I/O pins and an 11-channel 10-bit ADC, allowing it to process both digital and analog signals efficiently.
If you are interested in purchasing the PIC16F886, feel free to contact us for pricing and availability.
PIC16F886-I/SS symbol, footprint and 3d model.


| Pin No. | Pin Name | Description |
| 1 | RE3 / MCLR / VPP | Master Clear (reset) input and programming voltage pin |
| 2 | RA0 / AN0 / ULPWU / C12IN0− | Analog input channel 0 / ultra-low power wake-up |
| 3 | RA1 / AN1 / C12IN1− | Analog input channel 1 |
| 4 | RA2 / AN2 / VREF− / CVREF / C2IN+ | Analog input / voltage reference |
| 5 | RA3 / AN3 / VREF+ / C1IN+ | Analog input / positive voltage reference |
| 6 | RA4 / T0CKI / C1OUT | Timer0 clock input / comparator output |
| 7 | RA5 / AN4 / SS / C2OUT | Analog input / SPI slave select |
| 8 | VSS | Ground |
| 9 | RA7 / OSC1 / CLKIN | Oscillator input / external clock input |
| 10 | RA6 / OSC2 / CLKOUT | Oscillator output / clock output |
| 11 | RC0 / T1OSO / T1CKI | Timer1 oscillator output / clock input |
| 12 | RC1 / T1OSI / CCP2 | Timer1 oscillator input / Capture-Compare-PWM |
| 13 | RC2 / P1A / CCP1 | PWM output / Capture-Compare module |
| 14 | RC3 / SCK / SCL | SPI clock / I²C clock |
| 15 | RC4 / SDI / SDA | SPI data input / I²C data |
| 16 | RC5 / SDO | SPI data output |
| 17 | RC6 / TX / CK | USART transmit / synchronous clock |
| 18 | RC7 / RX / DT | USART receive / data |
| 19 | VSS | Ground |
| 20 | VDD | Positive power supply |
| 21 | RB0 / AN12 / INT | External interrupt input |
| 22 | RB1 / AN10 / P1C / C12IN3− | Analog input / PWM output |
| 23 | RB2 / AN8 / P1B | Analog input / PWM output |
| 24 | RB3 / AN9 / PGM / C12IN2− | Analog input / low-voltage programming |
| 25 | RB4 / AN11 / P1D | Analog input / PWM output |
| 26 | RB5 / AN13 / T1G | Analog input / Timer1 gate control |
| 27 | RB6 / ICSPCLK | In-Circuit Serial Programming clock |
| 28 | RB7 / ICSPDAT | In-Circuit Serial Programming data |
• PIC16F882
• PIC16F883
• PIC16F884
• PIC16F887
• PIC16F873A
• PIC16F876A
• PIC18F883

The PIC16F886 program memory is organized into an 8K × 14-bit Flash memory space, addressed by a 13-bit Program Counter (PC<12:0>). This means the microcontroller can access addresses from 0000h to 1FFFh. The program memory is divided into four pages, each containing 2K words. Page 0 ranges from 0000h to 07FFh, Page 1 from 0800h to 0FFFh, Page 2 from 1000h to 17FFh, and Page 3 from 1800h to 1FFFh. The Reset vector is located at address 0000h, which is where the program starts executing after a reset. The Interrupt vector is located at 0004h, where the microcontroller jumps when an interrupt occurs.
The diagram also shows the hardware return stack, which is used to store return addresses when the program executes instructions such as CALL, RETURN, RETLW, or RETFIE. The PIC16F886 has an 8-level deep stack, meaning it can store up to eight return addresses. Each time a subroutine or interrupt occurs, the current program counter value is pushed onto the stack. When the routine finishes, the stored address is popped from the stack so the program can continue from the correct location. This stack operates automatically and does not use general RAM.

PIC16F886-I/SS specifications.
| Category | Specification |
| Manufacturer | Microchip Technology |
| Series | PIC® 16F |
| Part Status | Active |
| Core Processor | PIC |
| Core Size | 8-bit |
| Maximum Speed | 20 MHz |
| Program Memory Size | 14 KB (8K × 14) |
| Program Memory Type | Flash |
| EEPROM Size | 256 × 8 |
| RAM Size | 368 × 8 |
| Number of I/O Pins | 24 |
| Connectivity Interfaces | I²C, SPI, UART/USART |
| Peripherals | Brown-out Detect/Reset, POR, PWM, WDT |
| Data Converters | 11-channel, 10-bit ADC |
| Operating Voltage (Vcc/Vdd) | 2.0 V – 5.5 V |
| Oscillator Type | Internal |
| Operating Temperature | −40°C to +85°C |
| Mounting Type | Surface Mount |
| Package / Case | 28-SSOP (0.209", 5.30 mm width) |
| Supplier Device Package | 28-SSOP |
| Packaging | Tube |
| DigiKey Programmable | Verified |
| Base Product Number | PIC16F886 |
The PIC16F886 uses a high-performance RISC CPU with only 35 simple instructions, making programming easier and efficient. Most instructions execute in a single cycle, allowing fast processing with an operating speed up to 20 MHz. The architecture also includes an 8-level deep hardware stack and supports direct, indirect, and relative addressing modes.
The microcontroller includes a precision internal oscillator that is factory calibrated to ±1% accuracy. Users can select different operating frequencies ranging from 8 MHz down to 31 kHz through software. It also supports clock switching, crystal fail detection, and two-speed start-up for improved reliability.
PIC16F886 integrates multiple peripherals such as analog comparators, timers, PWM modules, and communication interfaces. It also includes a 10-bit A/D converter with up to 11 input channels, making it suitable for analog signal monitoring and control tasks.
The device features several timers including 8-bit and 16-bit timer/counters with programmable prescalers. Enhanced Capture, Compare, and PWM modules support precise signal measurement and generation, with PWM resolution up to 10 bits and frequencies up to 20 kHz.
PIC16F886 supports multiple communication protocols such as USART, SPI, and I²C through its MSSP module. These interfaces allow the microcontroller to communicate easily with sensors, memory devices, and other microcontrollers.
The device includes safety features such as Power-on Reset (POR), Brown-out Reset (BOR), Watchdog Timer (WDT), and Power-up Timer (PWRT). These features help ensure stable operation and protect the system from voltage fluctuations and software faults.
PIC16F886 is designed for energy-efficient applications. It provides low standby current, ultra-low-power wake-up, and multiple sleep modes. These capabilities make it suitable for battery-powered and energy-sensitive devices.
The microcontroller includes high-endurance Flash and EEPROM memory with long data retention. It supports in-circuit serial programming (ICSP) and in-circuit debugging, which simplifies development, testing, and firmware updates.

PIC16F886 microcontroller controlling a 20×4 LCD display and reading temperature from a sensor. The microcontroller is powered by a +5V supply, while a 0.1 µF capacitor helps stabilize the power. An 8 MHz crystal oscillator with two 22 pF capacitors provides the clock signal needed for the PIC16F886 to run.
The LCD module is connected to several I/O pins of the PIC16F886 to display information. A 10 kΩ potentiometer adjusts the LCD contrast so the characters appear clearly on the screen.
An LM34DZ temperature sensor is connected to the RA0/AN0 analog input. The sensor outputs a voltage based on temperature, which the PIC16F886 reads using its 10-bit ADC. The microcontroller converts the signal into digital data and displays the temperature on the LCD.
The circuit also includes an ICSP header for programming and a reset button connected to the MCLR pin to restart the system when needed.