PIC16F877A timer0 code + Proteus simulation

Summary of PIC16F877A timer0 code + Proteus simulation


This tutorial explains how to use Timer0 of the PIC16F877A microcontroller and handle its interrupts. The microcontroller runs on a 20MHz external crystal, with the RB0 pin toggled each time Timer0 overflows, approximately every 100µs using a prescaler of 1:2. The example code, written in C for MPLAB with the HI-TECH C compiler, initializes Timer0, enables interrupts, and toggles RB0 in the Timer0 interrupt service routine. Simulation via Proteus is used to verify the functionality, making it adaptable for different applications.

Parts used in the PIC16F877A Timer0 Interrupt Example:

  • PIC16F877A Microcontroller
  • 20MHz External Crystal Oscillator
  • Capacitors for Crystal Oscillator (not explicitly listed but typically used)
  • LED connected to RB0 pin (for indication)
  • Resistor for LED (assumed standard)
  • Power Supply (not explicitly mentioned)
  • Proteus Simulation Software (for testing)
  • MPLAB IDE
  • HI-TECH C Compiler

This PIC16F877A microcontroller tutorial answers the question,
” How to use timer0 of PIC16F877A and how to handle its interrupts? ”

Using PIC16 simulator (Proteus) you can verify this PIC timer0 code and change it according to your needs. This code is written in C language using MPLAB with HI-TECH C compiler. You can download this code from the ‘Downloads‘ section at the bottom of this page.

It is assumed that you know how to blink an LED with PIC16F877A microcontroller. If you don’t then please read this page first, before proceeding with this article.

The following diagram (made in Proteus) shows the PIC microcontroller circuit diagram.

PIC16F877A timer0 code + Proteus simulation

In this circuit, PIC16F877A is running on external crystal of 20MHz value. RB0 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, RB0 pin is toggled i-e timer0 expires. You can easily change this value in the code.

Code

The main function code is shown below.

Main function for timer0 of PIC16F877A

In the main function, firstly TRISB0 is made zero to make RB0 pin an output pin, also RB0 pin is made zero. After that, InitTimer0() function is called which initializes timer0. Rest of the work is done in timer0 interrupt service routine. Every time timer0 expires RB0 pin is toggled.

The code used to initialize timer0 is shown below.

InitTimer0 function code for PIC16F877A
  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 PIC16F877 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.

PIC16F877A timer0 code + Proteus simulation schematicTimer0 interrupt service routine code is shown below.

Timer0 interrupt service routine
  Whenever timer0 expires, then an interrupt is generated which executes the function shown above in the Figure 4. In this function, RB0 pin is toggled every time and timer0 interrupt flag is cleared. This means that in Figure 1 when ever RB0 pin toggles than timer0 interrupt has occurred.

This is just an example code for timer0 of PIC16F877A microcontroller. You can modify it to fulfill your circuit requirements.

 

For more detail: PIC16F877A timer0 code + Proteus simulation


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.