8-Bit PIC® MCU Timers

Timers and counters are a very useful, and some may say required, feature of the PIC® MCU. As the name implies, timers indicate when an amount of time has elapsed. Timers can also count using the same internal registers. The difference between a timer and a counter is the source of the pulse that increments the counting register. If the source is time-based, such as the oscillator clock that runs the microcontroller, then it is a timer. If the source is a pulse from a sensor or switch then it is a counter. Through most documentation, the timer/counter peripheral is typically referred to as a timer peripheral (even though it can also count).

Counting and timing become the basis for many other features in the PIC MCU. Controlling the brightness of LEDs can be completed with a Pulse Width Modulation (PWM) signal. That PWM signal is based on a timer. Creating a people counter at an amusement park or subway entrance can be based on a digital display and a counter.

At the heart of the timer/counter is a binary counter register that increments by one on every input signal. The size of that counter determines the number of pulses it will accept until it overflows and resets back to zero. The 8-Bit PIC MCU devices have both 8-bit (256 pulses to overflow) and 16-bit (65535 pulses pulse to overflow) timers. When counting a pulsed input these may be large enough but when the internal instruction clock can run in the megahertz (million pulses per second) range, then those overflow values become quite small.

Below is a simplified block diagram of the Timer0 module:


A timer can be expanded by adding a prescaler. Prescaling is simply a second counter placed in front of the main counter to skip a number of clock pulses. The prescaler is essentially a counter with an adjustable overflow value. The prescaler can be set to overflow at values of 2, 4, 8 … up to 256 pulses. For example, if the prescaler is set to eight then the timer counter will receive one pulse after every eight clock pulses. This allows the designer to extend the time before getting the overflow pulse from the timer/counter.

It is the overflow pulse that is the key to the operation. That overflow pulse feeds other peripherals, such as the interrupt structure, within the PIC MCU. When the overflow occurs, the interrupt vector address is triggered and a separate software routine called the Interrupt Service Routine (ISR), is implemented separately from the main program loop. Timer overflows can also trigger Analog-to-Digital Conversions (ADC). The overflow can also simply indicate that a correct number of pulses have been received or a specified amount of time has elapsed.

PIC MCUs have several different timers available each with unique features, as described in the links below:

© 2024 Microchip Technology, Inc.
Notice: ARM and Cortex are the registered trademarks of ARM Limited in the EU and other countries.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.