Цитата(smk @ Jan 11 2008, 22:48)

while(TIFR1 & (1<<TOV1))
я бы это заменил на if, так как при первом же проходе устанавливается регистр так, чтобы след. раз условие не выполнялось... и наглядней.
Хотя не понятно зачем считывать флаг прерываний вместо того, чтобы использовать само прерывание.
Можно либо разрешить прерывание по переполнению и в нем выполнять
TCNT1H = 0xF8;
TCNT1L = 0x5F;
i++;
PORTA^=0b00000100;
где i должна быть глобальной
либо запустить режим сброса таймера по сравнению (CTC mode), чтобы он считал от 0 до сравнения (например до OCR1A=0xFFFF - 0xF85F=0x7A0), затем в прерывании по сравнению делать тоже кроме обновления счетчика.
Сообщение отредактировал Gogan - Jan 12 2008, 06:07