Hi,
Every 500mS interrupt you read the count from TMR0 and add it to an accumulator. You also keep track of how many interrupt have passed and when 10 interrupts have gone by you divide the accumulator count by 9. You now have the number of metres traveled in the last 5 seconds.
(Untested)
Code:
Acc var WORD 'Accumulator
ISRCount var BYTE 'Keeps track number of interrupts
Km var WORD 'Kilometres
m var WORD 'Metres
'//Place this in your ISR to be executed every 500mS
ISRCount = ISRCount + 1 'Increment ISRCount
Acc=Acc + TMR0 'Add TMR0 value to accumulator, TMR0 gets reset elsewhere.
If ISRCount = 10 then 'If 10 interrupts have passed....
m = m + (Acc / 9) '...calculate how many metres...
If m > 1000 then 'If more than 1km have passed..
Km = Km + (m / 1000) '...add to the Km count...
m = m // 1000 '...and keep reminder.
EndIf
ISRCount = 0 'reset ISR counter
EndIf
You can now use...
Code:
LCDOut $FE, 1, #Km, ".", #m
or whatever in your main routine to display the distance traveled.
/Henrik Olsson.
Bookmarks