Цитата(VAI @ Aug 19 2007, 19:48)

У меня тикает прерывание каждую милисекунду и есть глобальная переменная
Код
volatile unsigned long tick_ms; // милисекундные тики, хватит на 49 дней непрерывной работы прибора
тогда милисекундная задержка выглядит так
Код
void delay( unsigned long del )
{
for ( del += tick_ms; del > tick_ms; )
;
}
получается от 1мс до 49 дней, с шагом 1 мс
+1. Только у меня в зависимости от задачи тикает с периодом от 1мс до 32мс. Но отсчет времени все равно в мс идет. Просто инкремент тиков на величину периода происходит.
Код
#define SYSTEM_TICK_MS 10UL //период системных тиков 10мс
tick_ms+=SYSTEM_TICK_MS; //инкремент счетчика системных тиков
Сформировать задержку очень просто
Код
unsigned long tmp=tick_ms;
while ((tick_ms-tmp)<5000); //задержка на 5 сек
При таком способе даже момент переполнения счетчика tick_ms не влияет на отсчет временного интервала, т.к. в цикле ожидания вычитание беззнаковых величин происходит.