Долго очень, просто прикидываю различные возможности. Одно дело вот такой код внутрипрерывания провернуть и совсем другое например флаг выставить а в основной программе поиметь значения счетчиков. Кстати у меня ОЗУ 32 байта и лишние переменные то же не к добру.
unsigned int TIM16_ReadTCNT1( void )
{
unsigned char sreg;
unsigned int i;
/* Save Global Interrupt Flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Read TCNT1 into i */
i = TCNT1;
/* Restore Global Interrupt Flag */
SREG = sreg;
return i;
}