Недавно писал, все работает, как часы! Вернее часы и работают, с погрешностью 2сек. за 24 часа (кварц хороший попался

):
// IRQ TIMER1_COMPA
#pragma vector = TIMER1_COMPA_vect
__interrupt void timer1_compA_Processing(void)
{
char pd;
tick++;
***
***
***
__enable_interrupt();
}
void InitTimers(void)
{
/* Initialization Timer1 */
OCR1A = EIGHTH_sec; // Set compare value on one second.
TIMSK = (1 << OCIE1A); // Set mask to enable Timer1A compare interrupt.
TIFR = (1 << OCF1A); // Clear pending interrupts Timer1A.
TCCR1B = ((1 << WGM12) | (1 << CS11) | (1 << CS10)); // Set CTC and prescaller on 64.
}
Рекомендую Вам использовать форму записи битовой инициализазии такую: 1 << WGM12. Это просто наглядней и дает меньше шансов запутаться, хотя каждый делает на свой 'цвет'.