Не, ты уж разберись сам, заодно опыт приобретешь

Ничего мистического в таймерах нету. Ща объясню. Предыдущий пример был для толстого таймера, типа 16-битного таймера 1 меги8, который можно настроить на срабатывание раз в секунду. Но меня одолела жадность и я буду использовать таймер 0.
Смотри, вот есть в даташите страница 70 с описанием регистров таймера 0. Начиная с нее надо читать.
А собственно нужных регистров там всего два - TCCR0 и TCNT0. Это самый простой таймер в меге8, он вообще нифига не умеет, токо считать.
Считает он до 256, если хочется чтобы он считал до другого числа - надо начинать не с нуля.
Пускай у нас кварц 8 МГц. У таймера есть предделитель (prescaler), умеет делить на разные числа, на какие - см. даташит, стр. 70. Нам подойдет число 256 (из 1024 уже не получаются целые секунды). 8000000 / 256 = 31250. Это значит, что 31250 раз в секунду счетчик таймера будет увеличиваться на 1. Но 31250 = 250*125. Запрограммируем таймер так, чтобы его период был 250 тиков, тогда он будет переполняться 125 раз в секунду.
Чтобы таймер переполнялся каждые 250 тиков - ему надо после переполнения вписать число 256 - 250 = 6. Тогда в TCNT0 будут такие числа: 6,7,8,...,254,255,6,7,8...
Получаем такую программу:
Код:
Инициализация:
записать число 4 в TCCR0. Почему 4 - см. стр. 70 даташита.
установить бит 0 в TIMSK (это бит TOIE0, разрешение прерываний переполнения таймера 0)
Обработчик прерывания Timer0 overflow:
записать 6 в TCNT0
прочитать глобальную переменную SubSecondCount
прибавить 1
записать полученное значение в SubSecondCount
если получили >=125:
обнулить SubSecondCount
прочитать Time
+1
записать Time
Вот как-то так. Time увеличивается на 1 раз в секунду.
SubSecondCount - однобайтовая переменная, с ней никаких проблем, а вот Time- минимум 3 байта, чтобы сутки (86400) поместились. В С мне с этим проще - объявил переменную long и компилятор сам всю арифметику сгенерит. А ты уж как-то ручками, младший байт add, остальные adc, или как там оно делается чтобы переносы учитывались. И еще, в основном коде когда будешь эту 3-4-байтовую фигню читать в регистры для сравнения или копирования - запрети на это время прерывания, иначе возможны глюки (ты прочел 1 байт, счетчик тикнул и следующие байты ты прочел от нового значения).
Ну а в основной программе вообще делается ровно то что я написал, копирование и сравнение.