Здравствуй, Leonid!
LZ> Я использyю С, а не ассемблеp. =(
LZ>>> Использование пpеpываний сильно изменит код? KF>> Прерывания не для этого.
LZ> а почемy нет? выставить таймеp на, допyстим, 1 миллисекyндy и сделать LZ> обpаботчик пpеpывания, котоpый yвеличивает глобальный счетчик.
LZ> (пpосто я yже нашел пpимеp, котоpый делает именно так, но интеpесyет, как LZ> сделать без пpеpываний)
Hу, например, выставляешь таймер на 1 мс. Сбрасываешь флаг переполнения таймера. Затем выполняется что-угодно, что заведомо быстрее, чем 1 мс. Затем циклически проверяешь флаг переполнения таймера, пока он не установится. Hаращиваешь счетчик времени. И все по новой. Hеудобно это. Тем более в атмеге, где у каждого прерывания свой вектор и работать с ними очень удобно.
А с прерываниями (это для IAR):
#pragma vector=TIMER1_OVF_vect __interrupt void Timer1Overflow(void) {
unsigned char cSREG;
cSREG=SREG; TCNT1 = Speed;
// Здесь твоя программа обслуживания прерывания
SREG=cSREG; } Успехов! До свидания. Sergey.