Цитата(defunct @ Dec 2 2006, 02:29)

Почему бы просто не использовать тактовую частоту процессора?
Ведь у таймера T0 есть режим OC CTC.
установите прескейлер 1024, запишите в OCR0 число 125, и по прерыванию T0 декрементируйте некоторую статическую переменную от 125 до 0. При достижении 0 - увеличивайте счетчик секунд, и обновляйте статическую переменную числом 125.
Код
...
TIMSK |= (1 << OCIE0);
OCR0 = 125;
TCCR0 = (1 << WGM01) | 7;
...
#define RELOAD_VALUE (125)
#pragma vector=TIMER0_COMP_vect
__interrupt void t0compHandler(void)
{
static U8 cnt = RELOAD_VALUE;
cnt--;
if (!cnt)
{
cnt = RELOAD_VALUE;
seconds += 1;
}
}
Спасибо за помощь!
Можно и так, но не хотелось бы иметь прерывание с частотой 125Гц. В проекте и так их достаточно. Другое дело, когда оно медленное 1с, меньше вероятность пересечения событий. К тому же в контроллере это время еще считает наработку устройства до 100000 часов. По этому чем точнее измерение и меньше погрешность тем лучше.
Может есть еще какие идеи и предложения?