PIC16F84: Everything You Should Know

PIC16F84: Everything You Should Know

Are you looking for a microcontroller with the perfect balance of power and performance? Look no further than the PIC16F84. This versatile microcontroller has remained popular among engineers and hobbyists alike since its introduction in 1996, due to the ample features it offers. This blog post will uncover all that the PIC16F84 has to offer and provide an overview of what makes it such a great device. So, buckle up and explore the features of this revolutionary microcontroller!

What is PIC16F84?

The PIC16F84 is a mid-range 8-bit microcontroller from Microchip Technology, Inc. It was introduced in 2001 and is now widely used for a variety of electronic projects. This chip features 6 I/O ports, 128 bytes RAM, 14 timers, 25 instructions, and an 8-level hardware stack. The PIC16F84 can be programmed using Assembly or a C language compiler. It has become popular due to its low cost and small size as well as its ability to control simple devices without the need for external memory or components. This makes it ideal for use on projects that require minimal complexity such as home automation systems, remote-controlled toys, and embedded systems. The PIC16F84 also includes some analog features such as an analog-to-digital converter, comparator, and voltage reference. This makes it useful for applications such as signal conditioning and measurement.

What is PIC16F84?

The PIC16F84 is a popular part because of its small size, relatively low cost, and ease of use. It has been used in many different projects from hobbyists to professional engineers. The chip’s low power usage also makes it suitable for battery-operated devices. Furthermore, the wide range of available instructions makes it ideal for customizing programs to fit specific applications. Its modular architecture also allows users to easily add external memory or components if needed.

With these features combined with its unique instruction set, the PIC16F84 is perfect for microcontroller-based projects that require simple yet reliable control. Its low cost and small size make it an ideal choice for hobbyists looking to create their own projects or add features to existing systems. Even more experienced users can benefit from the PIC16F84’s wide range of instructions, which makes customizing programs easy and efficient. Whether you need a basic controller or an advanced one with plenty of features, the PIC16F84 is sure to have something that meets your needs.

Overall, the PIC16F84 is a great microcontroller for those looking for simple yet reliable control in their projects. It is versatile enough to be used in many different applications while being easy enough to use even for beginners. With its wide range of available instructions, users are able to customize programs to fit their exact needs. This makes it perfect for hobbyists and professional users alike. If you’re looking for an inexpensive controller that is both reliable and easy to use, then the PIC16F84 is a great choice [1].

PIC16F84 Features


The PIC16F84 has an onboard programming module, allowing you to program it without any external hardware. It is programmed using a low-voltage serial protocol called ISP (In System Programming). The programmer connects directly to the chip and programs it via SPI (Serial Peripheral Interface) or HVP (High Voltage Programming).

PIC16F84 Features


The PIC16F84 has 1 kilobyte of Flash memory for storing instructions and data. This can be used for program storage, as well as for storing variables. In addition, the chip also includes 64 bytes of RAM (Random Access Memory), which can be used for fast data access and manipulation.


The PIC16F84 has two 8-bit timers/counters that can be used to count events and generate interrupts. The chip also includes an on-chip watchdog timer (WDT) for monitoring system operation. This ensures that the system is functioning correctly and allows the program to reset itself if a program error occurs.

I/O Ports

The PIC16F84 has four I/O ports, each consisting of 8 pins. These ports can be used for controlling external devices and reading in data from sensors. Each port has its own independent configuration settings allowing you to set up different pin functions (such as input or output) on each port.


The PIC16F84 supports three interrupt sources: the timer/counters, a data input capture event, and an external interrupt. Interrupts are used to respond to events quickly without having to constantly poll the peripheral registers for changes.


The PIC16F84 supports several types of communication protocols, including I2C (Inter-Integrated Circuits) and SPI (Serial Peripheral Interface). This allows it to communicate with other devices such as sensors or LCDs. It also includes built-in support for UART (Universal Asynchronous Receiver Transmitter) which can be used for communicating with a PC or other serial device.

PIC16F84 Features

Power Management

The PIC16F84 has several power management features, including the ability to turn off unused peripherals, reduce clock speed when not in use, and manage power consumption. This allows it to be used for low-power applications such as sensor nodes or wearables.

ICSP connections

The PIC16F84 has two ICSP (In-Circuit Serial Programming) connections, allowing you to program and debug the chip without having to remove it from the circuit. This allows for faster development times and helps reduce debugging costs.

Oscillator modes

The PIC16F84 can be used with several different oscillator modes, including the internal RC oscillator, an external crystal or resonator, and a software-controlled clock. This allows you to choose the most suitable mode for your application and maximize system performance.

Flashing an LED

The PIC16F84 can be easily used to control an output device such as an LED. The program is written in assembly language and stored in the chip’s flash memory. Once programmed, the chip can be connected to an LED and a power supply, allowing it to turn the LED on or off according to the program instructions. This is a simple example of how powerful this microcontroller can be when combined with programming knowledge [2].

PIC16F84 Features

PIC16F84a Functions


The PIC16F84a contains an 8-bit timer/counter (Timer0) which can be used for timing and counting operations. It is also used to generate time delays, measure events, pulse width modulation (PWM), and act as an oscillator. The Timer 0 module has an 8-bit period register PR0 which defines the maximum value of a timer/counter cycle. It also includes two operating modes: one with a prescaler and one without.


Universal Synchronous Asynchronous Receiver Transmitter (USART) module transmits and receives serial data on asynchronous and synchronous communication lines. Its main components are transmit buffer, receive buffer, address detection logic, baud rate generator, and status and control registers. USART can be used in conjunction with the Timer0 module to provide a clock for data transmission.

Analog-to-Digital Converter (ADC)

The Analog-to-Digital Converter (ADC) module is used to convert analog signals into digital signals. It has an 8-bit resolution, 7 programmable input channels, an input multiplexer, and an output port register that stores the converted data. The ADC also features two operating modes: single conversion mode which performs one conversion cycle per instruction cycle, and continuous conversion mode which performs consecutive conversions until it is disabled.

Interrupt Controller

The Interrupt Controller handles all the interrupts generated by the PIC16F84a. It has four interrupt sources: Timer0 overflow, external interrupts (INT0 and INT1), USART receive register full, and ADC conversion complete. The Interrupt Controller also contains a priority mask register which can be used to enable or disable specific interrupts. Finally, it includes an interrupt flag register that stores the status of each enabled interrupt.

PIC16F84a Functions

In-Circuit Serial Programming (ICSP)

The PIC16F84a features an In-Circuit Serial Programming (ICSP) port which can be used to program the device without having to remove it from the circuit. It allows for programming and debugging of code while the device is connected to a power source, making it ideal for prototyping. It supports both low-voltage and high-voltage programming modes, as well as self-programming.

General Purpose Input/Output Ports (GPIOs)

The PIC16F84a has three General Purpose Input/Output Ports that can be used to control external devices such as LEDs or switches. Each GPIO port has four I/O pins with selectable pull-up resistors which can be used to read digital input signals or drive digital output signals. The GPIO ports are also configurable, allowing them to be used as either inputs or outputs.

Watchdog Timer (WDT)

The Watchdog Timer (WDT) is used to reset the device in case of a system malfunction. It has an 8-bit period register PR0 which can be programmed to any value between 128 and 255. The WDT also includes two operating modes: one with a prescaler and one without. When enabled, it will continuously monitor the program execution and reset the device if it detects an error. This is useful for preventing system crashes caused by unexpected events such as power surges or incorrect programming.


The PIC16F84a features 256 bytes of EEPROM memory which can be used to store data that needs to be retained even after a power cycle or reset. This memory is non-volatile, meaning that it will not be erased when the device is powered down or reset. It can also be used for storing user settings such as baud rate and configuration bits.


The PIC16F84a contains a comparator module that can be used to compare two analog voltages and generate an output signal based on the result of the comparison. This module has a single input channel with selectable pull-up resistors and an 8-bit digital output register which can store the result of the comparison in binary format. The Comparator is often used in conjunction with the ADC module to provide more accurate readings of analog inputs.

Sleep Mode

The PIC16F84a features a Sleep Mode which can be used to reduce power consumption when the device is not being actively used. In Sleep Mode, the oscillator will stop running and all other modules (except for the watchdog timer) will be disabled. When in Sleep Mode, only an external interrupt or reset signal can wake up the device. This makes it ideal for applications where battery life is important.

PIC16F84a Functions

Power-on Reset

The PIC16F84a also includes a power-on reset (POR) circuit which ensures that all registers are initialized to their default values after a sudden loss of power. The POR circuit monitors the VDD pin and generates a reset signal whenever it detects a voltage drop below a certain level. This enables the device to restart from a known state and prevents data corruption.

Brown-out Reset

The PIC16F84a also includes a Brown-out Reset (BOR) circuit which monitors the VDD pin and generates a reset signal whenever it detects a voltage drop below a certain level. This is useful for applications where sudden power outages are common, as it ensures that all registers are initialized to their default values before the power is restored. The BOR circuit also has selectable thresholds, allowing users to adjust its sensitivity depending on their application’s requirements [3].

How to use PIC16F84?

The PIC16F84 features a basic architecture that allows for easy programming, making it an ideal microcontroller for beginners. The user can write simple programs and quickly see the results on the included LEDs or LCD.

To use the PIC16F84 effectively, you need to understand how to program it. Fortunately, there are plenty of resources available online that teach the basics of programming the microcontroller. A good starting point is Microchip’s “Getting Started with PICmicro® MCUs” tutorial which covers all the fundamentals for using this particular model.

Once you have a handle on how to program the microcontroller, you can begin developing more complex applications with its included peripherals such as timers, interrupts, and serial communications. With this microcontroller’s versatile design, the end user is only limited by their imagination in terms of what they can accomplish.

The PIC16F84 is a great way to get started with embedded systems programming and is an excellent choice for any beginning programmer. With its low cost and ease of use, it offers plenty of potential for experimentation. So if you’re looking for an introduction to the world of embedded systems programming, then this microcontroller may be just right for you!


What is PIC16F84A used for?

PIC16F84A is a microcontroller used in embedded systems. It is widely used for its cost-effectiveness, low power consumption, and high-performance capabilities. PIC16F84A can be used to create custom applications such as motor control, data acquisition, communications interfaces, automotive applications, and more. It can also be used for developing device drivers and low-level system software. Its various features make it an ideal choice for development projects that require a powerful but efficient processor.

With the help of this microcontroller, engineers can develop small to medium-scale applications with ease. It also offers good flexibility when it comes to programming languages like Assembly language and C/C++. Finally, PIC16F84A provides an extensive collection of on-chip peripherals for handling analog and digital I/O operations. This makes it a great choice for applications that require advanced features like serial communication, PWM (pulse width modulation), and EEPROM support.

Are PIC microcontrollers good?

Yes, PIC microcontrollers are good for many applications. They have low power consumption and offer a wide range of features such as high-resolution analog-to-digital conversion and advanced timer/counter modules. They also offer an extensive collection of on-chip peripherals to support various operations like serial communication, PWM (pulse width modulation), I2C (inter-integrated circuit), SPI (serial peripheral interface), etc. Additionally, the small size of these microcontrollers makes them perfect for creating mobile-embedded solutions.

What are the advantages of using a PIC microcontroller?

The advantages of using a PIC microcontroller include its low cost, low power consumption, and efficient performance. It can be easily programmed using a variety of languages like assembly language and C/C++. Its wide range of features make it easy to create custom applications for many different purposes. Additionally, its small size makes it ideal for creating mobile solutions. Finally, PIC microcontrollers offer an extensive collection of on-chip peripherals that can be used to handle various operations like analog-to-digital conversion, serial communication, pulse width modulation (PWM), etc.

What are the disadvantages of using a PIC microcontroller?

Some of the disadvantages of using a PIC microcontroller include its limited memory size and lack of support for floating point operations. It also lacks hardware debugging capabilities compared to other types of microcontrollers. Additionally, it may require a high degree of expertise to program and debug. Finally, its limited clock speed can limit the performance of some applications.

Overall, PIC microcontrollers are great for creating custom applications with low cost and efficient performance but they do have some limitations that must be taken into consideration.

Why is PIC16F84A good for embedded systems?

PIC16F84A is a great choice for embedded systems due to its low cost, low power consumption, and efficient performance. It offers a wide range of features such as high-resolution analog-to-digital conversion, on-chip peripherals like serial communication, pulse width modulation (PWM), I2C (inter-integrated circuit), SPI (serial peripheral interface), etc. Additionally, it has a small size which makes it ideal for mobile solutions and other applications where space is limited. Finally, the device can be easily programmed using assembly language or C/C++, making it easier for developers to create custom applications quickly and reliably.

What programming language should I use with PIC16F84A?

The most commonly used languages for programming a PIC microcontroller are assembly language and C/C++. Assembly language allows developers to create powerful applications quickly while C/C++ provides an easier way to program more complex operations. Additionally, some developers also use other languages like Forth or Basic to program their PIC microcontroller. Ultimately, the best language to use with a PIC16F84A will depend on the application and the level of experience of the developer.

Useful Video: pic16f84a microcontroller introduction

Conclusion Paragraph

PIC16F84 PIC microcontroller is an important tool for embedded system engineers as it allows them to create highly efficient and reliable designs cost-effectively. The wide range of peripherals available on the PIC16F84 enables the designer to build complex systems with minimum effort. It also supports several development tools that make designing, coding, and debugging easier. All in all, the PIC16F84 microcontroller provides an excellent choice for any embedded application.

It is suitable for both beginner and advanced users due to its simple architecture and powerful features. Additionally, the ability to quickly prototype applications makes this controller a great choice for rapid prototyping projects. Its small size makes it ideal for use in space-constrained designs that require low power consumption and high performance.


  1. https://www.teachmemicro.com/pic16f84a-beginner-microcontroller
  2. https://www.best-microcontroller-projects.com/pic16f84.html
  3. https://resources.pcb.cadence.com/blog/2020-what-is-a-pic-microcontroller-the-harvard-architecture