Timer0
Timer0 Module Available for SwordFish.
This module was designed and tested using the EasyPIC3 (18F452). It can be used via interrupts or polling methods. The make calculating the appropriate preload/prescaler values, I suggest the fabulous PicMultiCalc tool from MisterE.
For interrupts, see the example code for calling inside a master interrupt service handler.
Example Code
// device and clock... Device = 18F452 Clock = 32 Config OSC=HSPLL Include "DL_Timer0.bas" Include "utils.bas" Dim LED As PORTD.0 Event LEDFlash() Toggle(LED) End Event Interrupt ISR() INTCON.7=0 If Timer0.InterruptFlag =1 Then Timer0.SInterrupt() EndIf INTCON.7=1 End Interrupt // main Utils.SetAllDigital() Output(LED) Timer0.Initialize(LEDFlash) Timer0.SetPrescaler(Timer0.PS256) Timer0.EightBit = 0 Timer0.Preload=49911 Timer0.EnableInterrupt() Timer0.Enabled() Enable(ISR) While true Wend
Module Code
{ ***************************************************************************** * Name : Timer0.BAS * * Author : Darryl Quinn * * Notice : Copyright (c) 2008 Darryl Quinn * * : All Rights Reserved * * Date : 4/11/2008 * * Version : 1.0 * * Notes : * * : * ***************************************************************************** } Module Timer0 Type TEvent = Event() Public Const SRCInternal = 0, SRCPIn = 1, EDGEFalling = 1, EDGERising = 0, PSDisabled = 1, PSEnabled = 0, PS256=7, PS128=6, PS64=5, PS32=4, PS16=3, PS8=2, PS4=1, PS2=0 Dim FPreload As Word, FPrescaler As Byte, FEnabled As T0CON.7, FInterrupt As INTCON.5, OnISR As TEvent Public Dim Preload As FPreload, EightBit As T0CON.6, Source As T0CON.5, Edge As T0CON.4, PrescalerEnabled As T0CON.3, InterruptFlag As INTCON.2 Public Sub Enabled() TMR0L = FPreload FEnabled=1 End Sub Public Sub Disabled() FEnabled=0 End Sub Public Sub EnableInterrupt() FInterrupt=1 End Sub Public Sub DisableInterrupt() FInterrupt=0 End Sub Public Sub ClearInterrupt() InterruptFlag=0 End Sub Public Sub SInterrupt() OnISR() TMR0L = FPreload.Byte0 TMR0H = FPreload.Byte1 ClearInterrupt() End Sub Public Sub SetPrescaler(ByVal pPrescaler As Byte) Select pPrescaler Case PS2 FPrescaler = PS2 PrescalerEnabled=PSEnabled Case PS4 FPrescaler = PS4 PrescalerEnabled=PSEnabled Case PS8 FPrescaler = PS8 PrescalerEnabled=PSEnabled Case PS16 FPrescaler = PS16 PrescalerEnabled=PSEnabled Case PS32 FPrescaler = PS32 PrescalerEnabled=PSEnabled Case PS64 FPrescaler = PS64 PrescalerEnabled=PSEnabled Case PS128 FPrescaler = PS128 PrescalerEnabled=PSEnabled Case PS256 FPrescaler = PS256 PrescalerEnabled=PSEnabled Else PrescalerEnabled=PSDisabled End Select T0CON.0=FPrescaler.0 T0CON.1=FPrescaler.1 T0CON.2=FPrescaler.2 End Sub Public Sub Initialize(pEvent As TEvent = 0) Disabled() EightBit = 1 Source = SRCInternal PrescalerEnabled = PSDisabled DisableInterrupt() OnISR = pEvent End Sub