Скажем, простая ситуация. Следящая схема, в которой МК, например, раз в секунду по прерыванию таймера вырабатывает управляющий сигнал. А в перерывах МК выполняет какую-нибудь программу, где необходима задержка, скажем, на 10 мсек.ptr128 писал(а):Таймер не может быть "занят подпрограммой", особенно если МК при этом "ничего не делает".AQ29 писал(а):Таймер может быть занят другими подпрограммами.
Если МК во время задержки ничего не делает, лучше сделать задержку на цикле.
Программа управления следящей схемой «заняла» таймер, а во время задержки 10 мсек МК ничего не делает, только ждёт окончания задержки.
Для себя считаю выполнение сложных действий в прерывании нехорошим методом программирования. Порождает проблемы и сложности.ptr128 писал(а): А с точки зрения написания прерывания таймера, никто не запрещает в этом прерывании, например, считать время в какой-то переменной и в каких-то попугаях. А во всем остальном коде, использовать это время для длительных задержек.
По крайней мере, Вы сможете действительно тогда измерять промежутки времени относительно точно, а не как в цикле, плюс минус лапоть, не зная, сколько времени ушло на обработку прерываний во время выполнения Вашего цикла.
В большинстве случаев в программе обработки прерывания только устанавливаю программный флаг. Более сложные действия только при особой необходимости.
Для точной задержки прерывание можно запретить, тогда задержка с циклами будет выполняться с точностью до одного такта.
Для длительной задержки короткое прерывание с одной командой установки флага мало влияет на величину задержки.
Иногда при появлении прерывания задержка уже не нужна.
А если при этом в основном цикле требуется быстрая реакции на события, использование "тупых" задержек тоже вполне допустимо. Только надо использовать задержки с «флагом».COKPOWEHEU писал(а):Если при этом в основном цикле не требуется быстрой реакции на события, использование "тупых" задержек вполне допустимо.
В такой задержке в каждом цикле проверяется флаг, если он установлен — быстрый выход из задержки. На этот случай указал выше прерывание прерывает задержку.
В задержке с флагом время считается, конечно, по другой формуле.
Вообще задержки с циклами – одни из базовых элементов. Просты, удобны, широкий диапазон, простота применения, время легко рассчитывается по готовым формулам. На мой взгляд, должны быть у каждого работающего с МК.


