-
Notifications
You must be signed in to change notification settings - Fork 8
inittimer0
Syntax:
InitTimer0 source, prescaler
Command Availability:
Available on all microcontrollers with a Timer 0 module.
See also see: InitTimer0 8bit/16bit for support for microcontrollers with a 8 bit/16 bit Timer 0 module.
Explanation:
InitTimer0
will set up timer 0.
Parameters are required as detailed in the table below:
Parameter | Description |
---|---|
|
The clock source for this specific timer. Can be either
|
|
The value of the prescaler for this specific timer. See the tables below for permitted values for Microchip PIC or the Atmel AVR microcontrollers. |
When the timer overflows from 255 to 0, a Timer0Overflow
interrupt
will be generated. This can be used in conjunction with On Interrupt
to run a section of code when the overflow occurs.
Microchip PIC microcontrollers:
On Microchip PIC microcontrollers where the prescaler
rate select bits
are in the range of 2 to 256 you should use one of the following
constants. If the prescaler
rate select bits are in the range of 1 to
32768 then see the subsequent table.
Prescaler Value | Primary GCB Constant | Constant Equates to value |
---|---|---|
1:2 |
|
0 |
1:4 |
|
1 |
1:8 |
|
2 |
1:16 |
|
3 |
1:32 |
|
4 |
1:64 |
|
5 |
1:128 |
|
6 |
1:256 |
|
7 |
These correspond to a prescaler of between 1:2 and 1:256 of the oscillator speed where the oscillator speed is (FOSC/4). The prescaler applies to both the internal oscillator or the external clock.
Atmel AVR microcontrollers:
On Atmel AVR microcontrollers prescaler
must be one of the following
constants:
The prescaler will only apply when the timer is driven from the Osc
the internal oscillator - the prescaler has no effect when the external
clock source is specified.
Prescaler Value | Primary GCB Constant | Secondary GCB Constant | Constant Equates to value |
---|---|---|---|
1:1 |
|
|
1 |
1:8 |
|
|
2 |
1:64 |
|
|
3 |
1:256 |
|
|
4 |
1:1024 |
|
|
5 |
Example 1 for 8-bit timer 0:
This code uses Timer 0 and On Interrupt to generate a Pulse Width Modulation signal, that will allow the speed of a motor to be easily controlled.
#chip 16F88, 8
#define MOTOR PORTB.0
'Call the initialisation routine
InitMotorControl
'Main routine
Do
'Increase speed to full over 2.5 seconds
For Speed = 0 to 100
MotorSpeed = Speed
Wait 25 ms
Next
'Hold speed
Wait 1 s
'Decrease speed to zero over 2.5 seconds
For Speed = 100 to 0
MotorSpeed = Speed
Wait 25 ms
Next
'Hold speed
Wait 1 s
Loop
'Setup routine
Sub InitMotorControl
'Clear variables
MotorSpeed = 0
PWMCounter = 0
'Add a handler for the interrupt
On Interrupt Timer0Overflow Call PWMHandler
'Set up the timer using the internal oscillator with a prescaler of 1/2 (Equates to 0)
'Timer 0 starts automatically on a Microchip PIC microcontroller, therefore, StartTimer is not required.
InitTimer0 Osc, PS0_2
End Sub
'PWM sub
'This will be called when Timer 0 overflows
Sub PWMHandler
If MotorSpeed > PWMCounter Then
Set MOTOR On
Else
Set MOTOR Off
End If
PWMCounter += 1
If PWMCounter = 100 Then PWMCounter = 0
End Sub
Example 1 for 18-bit timer 0 operating an 8-bit timer:
The same example for a 16-bit timer 0 operating as an 8-bit timer.
#chip 16f18855,32
#option Explicit
'timer test Program
dim speed, MotorSpeed, PWMCounter as byte
#define MOTOR PORTb.0
dir MOTOR out
'Call the initialisation routine
InitMotorControl
'Main routine
Do
'Increase speed to full over 2.5 seconds
For Speed = 0 to 100
MotorSpeed = Speed
Wait 25 ms
Next
'Hold speed
Wait 1 s
'Decrease speed to zero over 2.5 seconds
For Speed = 100 to 0
MotorSpeed = Speed
Wait 25 ms
Next
'Hold speed
Wait 1 s
Loop
'Setup routine
Sub InitMotorControl
'Clear variables
MotorSpeed = 0
PWMCounter = 0
'Add a handler for the interrupt
On Interrupt Timer0Overflow Call PWMHandler
InitTimer0(Osc, TMR0_FOSC4 + PRE0_1 , POST0_1)
StartTimer 0
End Sub
'PWM sub
'This will be called when Timer 0 overflows
Sub PWMHandler
If MotorSpeed > PWMCounter Then
Set MOTOR On
Else
Set MOTOR Off
End If
PWMCounter += 1
If PWMCounter = 100 Then PWMCounter = 0
End Sub
Supported in <TIMER.H>