Summary of PIC16F84A timer0 code and Proteus simulation
This article provides C code and a Proteus simulation for using Timer0 on the PIC16F84A (HI-TECH C, MPLAB). It explains configuring OPTION_REG for a 1:2 prescaler, enabling T0IE and GIE, and how Timer0 (8-bit) overflows every 256 ticks to trigger an ISR that toggles RA0. With a 20 MHz crystal (5 MIPS), the timer overflows approximately every 102 microseconds. Download links for code and the Proteus project are provided.Parts used in the PIC16F84A Timer0 Project:
- PIC16F84A microcontroller
- 20 MHz external crystal
- Resonator or crystal oscillator circuitry (capacitors as needed)
- LED connected to RA0 pin
- Current-limiting resistor for LED
- Power supply for PIC (Vdd and Vss)
- Proteus simulation software (for simulation)
- MPLAB IDE (v8.85 used for compilation)
- HI-TECH C compiler (v9.83)
It is assumed that you know how to blink an LED with PIC16F84A microcontroller. If you don't then please read this page first, before proceeding with this article.
The result of simulating the code in Proteus is shown below.
In this circuit, PIC16F84A is running on external crystal of 20MHz value. RA0 pin is toggled every time timer0 expires and executes it's ISR[1] code. In the above figure, it is clear that after approximately every 100usec, RA0 pin is toggled i-e timer0 expires. You can easily change this value in the code.
Code
The code used to initialize timer0 is shown below.
In this function, OPTION_REG is initialized to make timer0 prescalar to be 1:2. Timer0 is an 8bit timer, so it expires after reaching a value of 255. When timer0 prescalar is made 1:2 then it means that timer0 value will increment after every two clock cycles. Since PIC16F84A is running at 5MIPS[2] speed, this means that timer0 will expire after every 256*2/5 = 102 usec[3]. T0IE bit enables timer0 interrupts and GIE bit enables global interrupts.
Timer0 interrupt service routine code is shown below.
Downloads
Timer0 code for PIC16F84A was compiled in MPLAB v8.85 with HI-TECH C v9.83 compiler and simulation was made in Proteus v7.10. To download code and Proteus simulation click here.
For more detail: PIC16F84A timer0 code and Proteus simulation
Quick Solutions to Questions related to PIC16F84A Timer0 Project:
- What does the provided code demonstrate?
It demonstrates initializing Timer0 with a 1:2 prescaler and an ISR that toggles RA0 on each Timer0 overflow. - How often does Timer0 overflow with the given settings?
With an 8-bit timer, 1:2 prescaler, and 5 MIPS clock, Timer0 overflows approximately every 102 microseconds. - How is the Timer0 prescaler configured?
The prescaler is set via OPTION_REG to give a 1:2 prescaler. - Which bits enable Timer0 interrupts and global interrupts?
T0IE enables Timer0 interrupts and GIE enables global interrupts. - What toggles when Timer0 expires in the example?
The RA0 pin is toggled in the Timer0 ISR each time Timer0 overflows. - What tools were used to compile and simulate the code?
The code was compiled in MPLAB v8.85 with HI-TECH C v9.83 and simulated in Proteus v7.10. - Can the overflow interval be changed in the code?
Yes, the article states you can easily change the overflow value in the code. - Where can the code and simulation be obtained?
They are available from the Downloads section linked in the article.
Related projects
PIC Stepper Motor Controller using PIC16F84A with Proteus Simulation
Introduction Stepper motors are widely used in embedded systems and DIY electronics projects where precise position control is required. This PIC Stepper...
Programmers & ICSP · PIC16F84APIC Musical Doorbell using PIC16F84A with Proteus Simulation
IntroductionThis microcontroller project demonstrates a musical doorbell built around a PIC16F84A and a simple piezo sounder.Using two push buttons, the system allows...
Beginner Tutorials · PIC16C84Exploring the World of PIC Microcontrollers: An Architectural Overview
A Peripheral Interface Microcontroller (PIC), developed by General Instruments Microcontrollers in 1993, operates under software control and is programmed to execute various...
Clocks & TimersAdaptive Alarm Clock: Build a Smart, User-Centric wake-Up system
Project Overview The goal of this ambitious undergraduate project was to develop a novel alarm clock capable of analyzing a person's unique...
Clocks & TimersDesigning Your Ideal Alarm Clock: An Introduction to PIC18
Within this laboratory session, you'll employ the C language to create an alarm clock, delving into the implementation of "C" programs on...
Clocks & TimersBuilding your Dream Alarm Clock Using the PIC18
Objective: In this laboratory session, your objective is to create an alarm clock using the C programming language. You will gain proficiency...

