Вот так делаю. Удобно //В файле timers.c
...
#define MAX_TIMERS 6
#define TMR_TIMER 0
#define TMR_EEPROM_ESCAPE 1
#define TMR_LOAD_DATA_BUF 2
#define TMR_TIME_OUT_ADC 3
#define TMR_ADC_TECH 4
#define TMR_UKRAINE 5
INT16U Timers[MAX_TIMERS];
#pragma vector = TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void) {
TCNT0 = 0x83; // 1мс
for (INT08U i = 0; i < MAX_TIMERS; i++)
Timers[i]++;
}
void TmrInitVirtualTimers(void) {
for (INT08U i = 0; i < MAX_TIMERS; i++)
Timers[i] = 0;
}
void TmrResTimer(INT08U timer) {
Timers[timer] = 0;
}
INT16U TmrGetTimer(INT08U timer) {
return Timers[timer];
}
void TmrSetTimer(INT08U timer, INT16U value) {
Timers[timer] = value;
}
...
//в основной программе:
...
if (TmrGetTimer(TMR_TIMER ) > 200) {
TmrResTimer(TMR_TIMER );
...