Если необходимые времена, например, имеют порядок от единиц до sizeof(int) миллисекунд, а тактовая достаточно высокая, но не переполняет таймер за 1 миллисекунду, то можно применить следующий механизм: 1. Таймер запускаем на автоперезагрузку с периодом 1 мс 2. Заводим переменную типа unsigned (например, int или long), назовем её unsigned long Tms = 0; 3. В обработчике прерывания инкрементируем Tms без всяких проверок 4. В нужном месте программы выполняем функцию delay(N), где N - число миллисекунд void delay(unsigned int N){ unsigned int StartTime; unsigned int CurrentTime; StartTime = (unsigned int)Tms; // начинаем считать от этого времени do{ CurrentTime = (unsigned int)Tms; } while( (CurrentTime-StartTime) < N) }
Может Вам такое и подойдёт
--------------------
aka Vit
|