PIC12F675 timer0 code and Proteus simulation

Summary of PIC12F675 timer0 code and Proteus simulation


This article provides C code (HI-TECH C) and a Proteus simulation for using Timer0 on a PIC12F675. It explains configuring OPTION_REG for a 1:2 prescaler so the 8-bit Timer0 increments every two clock cycles; at 4 MHz internal oscillator (1 MIPS) the timer overflows every 512 microseconds. Timer0 interrupts (T0IE and GIE) call an ISR that toggles GP0 on each overflow. The download link includes MPLAB-compiled code and Proteus v7.10 simulation files.

Parts used in the PIC12F675 Timer0 project:

  • PIC12F675 microcontroller
  • LED (connected to GP0)
  • Proteus simulation software (Proteus v7.10)
  • MPLAB IDE (MPLAB v8.85)
  • HI-TECH C compiler (v9.83)
  • Power supply / Vdd and Vss connections for PIC12F675

This post provides the timer0 code for PIC12F675 microcontroller. 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.

PIC12F675 timer0

It is assumed that you know how to blink an LED with PIC12F675 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, PIC12F675 is running on internal oscillator of 4MHz value. GP0 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 0.5msec, GP0 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 PIC12F675 is running at 1MIPS[2] speed, this means that timer0 will expire after every 256*2 = 512 usec[3]. T0IE bit enables timer0 interrupts and GIE bit enables global interrupts.

Timer0 interrupt service routine code is shown below.

PIC12F675 timer0 schematic

Downloads

Timer0 code for PIC12F675 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: PIC12F675 timer0 code and Proteus simulation

Quick Solutions to Questions related to PIC12F675 Timer0 project:

  • What does the provided code demonstrate?
    The code demonstrates initializing Timer0 with a 1:2 prescaler and using its interrupt to toggle GP0 on each overflow.
  • How often does Timer0 overflow with the given settings?
    With a 1:2 prescaler at 1 MIPS, Timer0 overflows every 512 microseconds (256*2).
  • How is the PIC12F675 clock configured in the simulation?
    The PIC12F675 is running on its internal oscillator at 4 MHz, resulting in 1 MIPS operation.
  • How do you enable Timer0 interrupts in the code?
    Set the T0IE bit to enable Timer0 interrupts and set the GIE bit to enable global interrupts.
  • What happens in the Timer0 ISR?
    The Timer0 ISR toggles the GP0 pin each time the Timer0 overflow interrupt occurs.
  • Can the toggle interval be changed in the code?
    Yes, the code notes that you can easily change the toggle interval by modifying the code.
  • Which 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.

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