MrDEB
Well-Known Member
Built a BAT Repellent that I want to output every 20 minutes for 10 miniutes then shut off output for 20 minutes then back on.
I understand that using DELAYMS for really long delays is not the best method.
I have this code but is there a better method?
I understand that using DELAYMS for really long delays is not the best method.
I have this code but is there a better method?
Code:
Device = 18F1320
Clock = 8
Include "ISRTimer.bas"
// constant ID to 4 * 16 bit timers...
Const
Timer1 = 0,
Timer2 = 1,
Timer3 = 2,
Timer4 = 3
// OnTimer1 event...
Event OnTimer1()
Toggle(PORTB.0)//pin 8
End Event
// OnTimer2 event...
Event OnTimer2()
Toggle(PORTB.1)//pin9
End Event
// OnTimer3 event...
Event OnTimer3()
Toggle(PORTB.2)//pin 17
End Event
// activate the timer module...
Timer.Initialize
// initialise the timers - refresh every 1000Hz (1ms)...
Timer.Items(Timer1).Interval = 50 // 50ms
Timer.Items(Timer1).OnTimer = OnTimer1 // timer event handler
Timer.Items(Timer2).Interval = 250 // 250ms
Timer.Items(Timer2).OnTimer = OnTimer2 // timer event handler
Timer.Items(Timer3).Interval = 500 // 500ms
Timer.Items(Timer3).OnTimer = OnTimer3 // timer event handler
Timer.Items(Timer4).Interval =2000 // 2000ms, no event handler
// enable the timers...
Timer.Items(Timer1).Enabled = true
Timer.Items(Timer2).Enabled = true
Timer.Items(Timer3).Enabled = true
Timer.Items(Timer4).Enabled = true
// start processing all timers...
Timer.Start
// main program loop...
While true
// this is a polled timer, not event driven - check to see
// if it has timeout...
If Not Timer.Items(Timer4).Enabled Then
Toggle(PORTB.3)
Timer.Items(Timer4).Enabled = true
EndIf
// background flash LED...
High(PORTB.7)//pin 13
DelayMS(5)
Low(PORTB.7)//pin 13
DelayMS(5)
Wend