ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1046489 Топик полностью
Tpoeшник (25.10.2020 08:45 - 10:37, просмотров: 926) ответил Peter_M на Подскажите как сейчас правильно организовать в микроконтроллере программные таймеры?
Вот так делаю. Удобно 
//В файле 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 );
...