volatile int tenMillSecCounter=0; // incremented every 10mSec
static volatile int tenMillSecCounter2=0; // incremented every 10mSec - used for delays
static volatile int revolutionTimer=0; // used for counting revs/min or motor
volatile int tenthsSecond=0; // incremented every tenth of a second
volatile int second=0; // incremeneted every second
// Timer 0 is programmed to interrupt every 10mSeconds
// T0 clock is FOSC/4 = 200000
// with 256 prescaler decrements 2000000/256 times / second
// to get an interrupt every T mSec the calculation for TMR0 overflow from 0xFF to 0 is
// count = 255 - T * 2000/256
// i.e. for 10mSec counter is
#define tenMillSec 177
static void interrupt isr(void)
{
if (T0IF) // A TMR0 interupt occurred
{
TMR0=tenMillSec; // increment counters every 10 mSec
tenMillSecCounter2++;
revolutionTimer++;
if((++tenMillSecCounter % 10)==0) tenthsSecond++;
if((tenMillSecCounter % 100)==0) { second++; tenMillSecCounter=0; }
}
T0IF=0; // clear TMR0 interrupt flag
}
// delay for count tenths of a second
void tenthsSecondDelay(int count)
{
tenMillSecCounter2=0; // zero counter
while( tenMillSecCounter2 < (count*10)) ; // wait
}
// delay for count seconds
void secondDelay(int count)
{
tenMillSecCounter2=0; // zero counter
while( tenMillSecCounter2 < (count*100)) ; // wait
}
// initalise clock, set port A for digital input, set up timer 0, etc
void systemInitialise(void)
{
OSCCON=0x70; // Fosc use oscillator 8MHz
ANSEL=0; // set digital inputs
// PORTB PULL-UP DISABLED, TMR0 Timer mode Clock Source Select bit FOSC/4,
// Prescaler is assigned to the Timer0 module & TMR0 RATE 1:256
OPTION=0x87;
TMR0=tenMillSec; // initialise timer 0 counter
T0IE = 1; // enable interrupt on TMR0 overflow from 0xFF to 0
GIE = 1; // Global interrupt enable
}