introduction to pic16f877, pic16f877 features, pic16f877 pinout, pic16f877 functions, applications
Hey Guys! Hope you are doing well. I am back to give you valuable information as per your technical needs and requirements. Today, I’ll unlock the detailed Introduction to PIC16F877. It is an 8-bit PIC microcontroller that comes with 40-pin interface (PDIP). It is based on Flash type memory. The High-Performance RISC CPU is incorporated inside the device that comes with only 35 single-word instructions, targeting mainly two types of instructions: single cycle and double-cycle. In this post, I'll cover each and everything related to PIC16F877: its features, pinout and pin description, main functions, memory interface, compiler and burner used and applications. Let's dive right in and get down to the nitty-gritty of this tiny device.

Introduction to PIC16F877

  • PIC16F877 is an 8-bit PIC microcontroller that is introduced by Microchip and is mainly used in automation and embedded systems.
It comes in three packages known as PDIP, PLCC, and QFN where the first one is 40-pin while other two come with a 44-pin interface.
  • It features 256 bytes of EEPROM data memory, 368 bytes of RAM, and program memory of 14K.
This microcontroller version incorporates CPU, timers, 10-Bit ADC and other peripherals that are mainly used to develop a connection with external devices.
  • The decent memory endurance around 1,000,000 for EEPROM and 100,000 for program memory, makes this device an ideal choice for many real-time applications.
introduction to pic16f877, pic16f877 features, pic16f877 pinout, pic16f877 functions, applications
The Universal Synchronous Asynchronous Receiver Transmitter (USART) is very helpful for developing serial communication with other devices.
  • Some internal and external reset features are added in the device that prevents the device from going stale, giving you a full authority to modify the controller as per your needs and requirements.
If automation is anything to go by, you cannot write off the importance of this little toy.

1. PIC16F877 Features

You have got a brief overview of the device. In this section, I have arranged the main features in a single table, making it easy for you to grab the main idea about the device. Let's have a look at the table.
CPU Size 8-Bit
Total Number of Pins 40
I/O Pins 33
Analog Input 6
Flash Memory (Program Memory) 14 KB
SRAM 368 Bytes
EEPROM 256 Bytes
Timers (3) Timer0 Timer1 Timer2
Operating Voltage 4 to 5.5 V
Oscillator (Speed) up to 20 MHz
Manufacturer Microchip
Instruction Set 35 instructions
Capture/Compare/PWM Modules 2
Interrupts 14
A/D Converter 10-bit, 8 Channel
BOD (Brown Out Detection) Yes
Watch Dog Timer Yes
UART (Serial Communication) Yes
SPI Protocol Yes
I2C Protocol Yes
ICSP (In Circuit Serial Programming) Yes
DC Current for 3.3V Pin 50 mA
  • These features will help you understand the main characteristics of the controller and guide you in making a final decision before you intend to incorporate this chip into a certain project.

2. PIC16F877 Pinout and Description

In this section, we cover the pinout of the controller and a detailed description of each pin.
PIC16F877 Pinout
Following figure shows the pinout of PIC16F877.
introduction to pic16f877, pic16f877 features, pic16f877 pinout, pic16f877 functions, applications
  • This module comes in three packages known as  PDIP, PLCC, and QFP. The first one is mainly used for developing individual projects while other two are widely used in industrial applications.
PIC16F877 Pin Description
Following table shows the pin description of each pin. Some pins are capable to perform more than one function.
Pin# Pin Name Pin Description
1 MCLR' VPP Master Clear Active Low Reset Pin ICSP Programming Enable Pin
2 RA0 AN0 Digital I/O Pin Analog Input 0 Pin
3 RA1 AN1 Digital I/O Pin Analog Input 1 Pin
4 RA2 AN2 VREF- Digital I/O Pin Analog Input 2 Pin ADC Reference Input Voltage (low)
5 RA3 AN3 VREF+ Digital I/O Pin Analog Input 3 Pin ADC Reference Input Voltage (high)
6 RA4 T0CKI Digital I/O Pin External clock input for Timer0
7 RA5 AN4 SS' Digital I/O Pin Analog Input 4 Pin Slave Select input for SPI
8 RE0 AN5 RD' Digital I/O Pin Analog Input 5 Pin Read control for the parallel slave
9 RE1 AN6 WR' Digital I/O Pin Analog Input 6 Pin Write control for the parallel slave
10 RE2 AN7 CS' Digital I/O Pin Analog Input 7 Pin Select control for the parallel slave
11 VDD Voltage Supply Pin
12 VSS Ground Pin
13 OSC1 CLKIN Crystal Oscillator Input Pin
14 OSC2 CLKOUT Crystal Oscillator Output Pin
15 RC0 T1OSO T1CKI Digital I/O Pin Oscillator output for Timer1 External clock input for Timer1
16 RC1 T1OSI CCP2 Digital I/O Pin Oscillator input for Timer1 Output for Compare2 and PWM2, Input for Capture2
17 RC2 CCP1 Digital I/O Pin Output for Compare1 and PWM1, Input for Capture1
18 RC3 SCK SCL Digital I/O Pin SPI Module Synchronous serial clock input/output I2C Module Synchronous serial clock input/output
19 RD0 PSP0 Digital I/O Pin Parallel Slave Port for D0 with TTL input buffers
20 RD1 PSP1 Digital I/O Pin Parallel Slave Port for D1 with TTL input buffers
21 RD2 PSP2 Digital I/O Pin Parallel Slave Port for D2 with TTL input buffers
22 RD3 PSP3 Digital I/O Pin Parallel Slave Port for D3 with TTL input buffers
23 RC4 SDI SDA Digital I/O Pin SPI Data-In Pin I2C Data I/O Pin
24 RC5 SDO Digital I/O Pin SPI Data-Out Pin
25 RC6 TX CK Digital I/O Pin Asynchronous Transmit (USART) Synchronous Clock (USART)
26 RC7 RX DT Digital I/O Pin Asynchronous Receive (USART) Synchronous Data (USART)
27 RD4 PSP4 Digital I/O Pin Parallel Slave Port for D4 with TTL input buffers
28 RD5 PSP5 Digital I/O Pin Parallel Slave Port for D5 with TTL input buffers
29 RD6 PSP6 Digital I/O Pin Parallel Slave Port for D6 with TTL input buffers
30 RD7 PSP7 Digital I/O Pin Parallel Slave Port for D7 with TTL input buffers
31 VSS Ground Pin
32 VDD Voltage Supply Pin
33 RB0 INT Digital I/O Pin External Interrupt 0
34 RB1 Digital I/O
35 RB2 Digital I/O
36 RB3 PGM Digital I/O ICSP programming enable pin (Low voltage)
37 RB4 Digital I/O
38 RB5 Digital I/O
39 RB6 PGC Digital I/O ICSP programming clock, In-circuit debugger
40 RB7 PGD Digital I/O ICSP programming data, In-circuit debugger

3. PIC16F877 Main Functions

This PIC model is capable to perform many functions similar to other controllers in the PIC family. Following are the main functions of PIC16F877.
PIC16F877 comes with three timers known as Timer0 (8-bit), Timer1(16-bit) and Timer2 (8-bit). These timers can be used as a timer as well as a counter.
  • The timer mode is mainly used to increment the instruction cycle while the counter mode plays a vital role to increment the rising and falling edge of the pin.
All three timers contain internal and external clock select capability.
PIC16F877 incorporates a USART (Universal Synchronous and Asynchronous Receiver and Transmitter) module that is mainly used to establish the serial communication with external devices.
Watchdog Timer
PIC16F877 comes with a built-in watchdog timer that takes the controller back to reset position if the program hangs up during compilation or gets stuck in the infinite loop.
  • It is nothing but a hardware timer that produces a system reset if the main program fails to periodically service it.
It is advised to reset this timer to the initial value after every 3 instructions in order to avoid it going to zero value in normal conditions.
  • The Watchdog Timer can be controlled only through configuration bits. It comes with its own RC oscillator for maximum reliability.
Brown Out Reset (BOR)
The BOR function is a very remarkable addition that puts the device in reset condition once the Vdd (voltage supply) drops below a brownout threshold voltage.
  • If the Power Up Timer is kept enabled, it will create the delay for returning the device from a BOR function. The BOR mode can be configured both ways: BOREN settings in a register or using programming.
The multiple voltage ranges are provided to secure the chip if the power drops at the voltage supply line.
In-Circuit Serial Programming
In-circuit serial programming (ICSP), also called In-system programming (ISP), is a function that allows the chip to be programmed in the required project after installation, setting you free from plugging and unplugging the device in the project over and over again.
Master Clear Reset (MCLR)
The MCLR pin serves as an external reset for the chip. This pin is independent of the internal resets and is activated by keeping this pin at a LOW value.
  • The MCLRE configuration bit is mainly used to disable MCLR input and the noise filter is included in the MCLR executing process that allows to detect and remove the small pulses.
Power On Reset
Power On Reset function is a very useful function that resets the controller and prevents it from malfunctioning. When the module is powered on, the power-on reset will start the module from scratch once the Vdd raises above a certain threshold value.
  • The Power Control (PCON) Register comes with flag bits that help to differentiate between a Power-on Reset (POR), a Watchdog Reset(WDT) and external MCLR Reset.
SPI Communication

Serial Peripheral Interface (SPI) is a remarkable function of the chip that is commonly used to send data between microcontrollers and small peripherals such as sensors, shift registers, and SD cards.

  • It comes with separate clock and data lines, layered with a select line to choose the device for communication.
I2C Communication
The I2C is a two-wire interface communication that comes with two main lines known as SDA and SCL where former is s serial data line that carries the data and later is serial clock line that is used to synchronize all data transfers over the I2C bus.

4. PIC Compiler

  • PIC compilers and burners are used for different purpose. The former is a software used to write the desired code for the module while later is used to transfer and burn the code on the module.
There are various compilers used for the PIC controller and MPLAB C18 Compiler is an official compiler main developed for the PIC modules. You can get this compiler online from the Official Microchip Site.
  •  MikroC Pro For PIC is a third party software and is a good replacement for PIC standard compiler.
  • These Top 3 PIC C Compilers give you the flexibility to choose from and pick any compiler as per your needs and demands.
The code written in the compiler generates a hex file which is then transferred to the microcontroller using a burner.
  • The PICKit3 is a standard PIC burner for PIC controllers. Other burners are also available in the market but PICKit3 is mostly preferred for the PIC controllers.

5. PIC16F877 Memory Layout and Working

Memory, as the word suggests, is used to store a number of instructions inside the controller. It is mainly divided into three major types: Program Memory (Flash Memory) Data EEPROM Data RAM Let’s get down to the main features of each memory.
Program Memory
The Program memory, also known as ROM memory or Flash memory, stores the number of instructions permanently.
  • It comes with a memory space around 14K and is independent of the power supply i.e. have the ability to store information in the absence of main power supply.
The EEPROM Data Memory is similar to ROM memory with one exception i.e. the instructions in EEPROM can be controlled and modified during the controller operation.
  • The EEPROM incorporates memory space around 256 bytes and is mainly addressed by multiple control registers.
Data RAM
RAM memory, also known as volatile memory, stores the program temporarily and is dependent on the power supply. It comes with a memory space around 368 bytes  and is mainly classified into two main parts called General-purpose registers (GPR) Special-function registers (SFR)
  • These registers are spread across the multiple banks and are the data holding places that can hold instruction, storage address, and any kind of data ranging from an individual character to bit sequence.
General purpose registers are implemented as a static RAM and can be easily accessed by File Select Register. They store any modified or random value in the processor and are located on the upper side of banks.
  • On the other hand, Special function registers are located on the lower side of the banks and are used to control the peripheral functions, covering the first 32 locations of each bank.
When reduction and decent code execution is required, some Special Function Registers from one bank are mirrored and placed in another bank.

6. PIC16F877 Block Diagram

The following figure shows the block diagram of PIC16F877.
introduction to pic16f877, pic16f877 features, pic16f877 pinout, pic16f877 functions, applications
  • PIC16F877 comes with five ports where each port contains 8 pins except the E port that comes with 3 pins.
  • It is important to note that higher order bits are related to the STATUS register

7. PIC16F877 Projects and Applications

PIC16F877 comes with a variety of applications with the main aim to drive automation in the relevant project. Following are some major applications it can be used for.
  • Student projects for motor controlling and sensor interfacing
  • Health and security systems
  • Central heating projects
  • Embedded system
  • Gas sensor projects
  • GPS projects
  • Serial Communication
  • It is widely used in home and industrial automation
  • Production of temperature data logger

8. Why Use PIC MicroControllers

  • Earlier, if you were aiming to design the automation project, you'd need a bunch of wires and a plethora of electrical components, that would not only cost you more but making your project heavy with more space requirement. These PIC controllers prove to be a lifesaver for your technical needs requiring minimum circuitry.
  • These controllers come with a user-friendly interface and easy onboard architecture that requires little or no prior skills before getting familiar with the chip.
  • PIC controllers have a leg over other Atmel controller like 8051 due to their higher processing speed and efficiency.
  • They are very handy in terms of consuming minimum power consumption that makes this controller an ideal choice for the projects where power limitation is a major concern.
That’s all for now. I hope I have given you everything you needed to know about PIC16F877. If you are unsure about anything you consider I have left unsaid about this chip, you can ask me in the comment section below. I’d love to assist you in any way I can. You are most welcome to keep us updated with your valuable suggestions, we plan our content strategy based on them, so keep them coming. Thanks for reading the article.