Примеры с сайта AVR+ Electronics - Прерывания по переполнению таймера…
Зміст статті
Прерывания по переполнению таймера…
Бывает когда надо выполнять, не зависимо от основной программы код, например та же динамическая индикация и тогда приходит в помощь прерывания по переполнению таймера. Когда происходит прерывание по переполнению таймера, то основная программа останавливается и начинает выполняться код, записанный в самом прерывание, после завершения исполнения прерывания, МК возвращается к исполнению основной программы в том месте, где остановился. Но если у нас кусков программы, требующих прерывания больше одного, а таймер всего один, тогда можно воспользоваться простенькой конструкцией с использованием оператора switch. То есть каждый раз, попадая в прерывания будет выполняться следующий кусок программы и так по кругу. Сначала первый кусок кода, в следующий раз - второй и т.д. главное чтобы куски кода не занимали много времени, так как мы всё же в прерываниях. Оператор switch имеет такой вид:
|
Работать это будет так: сравнивается значение переменной i с case, то есть если i=2, тогда будет выполняться код который записан в case 2. То есть зашли в прерывание сравнили переменную i с case и выполнили код, добавили 1 к переменной i и вышли, в следующий раз при входе в прерывание будет выполняться следующий код, так как переменная i стала больше на 1 и следовательно будет выполняться следующий case. Для начала настраиваем таймер на прерывание по переполнению, это всё делаем по даташиту, главное, что бы прерывания происходили по чаще. Код будет иметь приблизительно такой вид:
|
Главное правило кода, который набит в switch помнить, о том, что код не должен занимать много времени на выполнение, так как нормальная работа прерывания нарушится, а именно в case не должен тупить в цикле и использовать delay. Не советую использовать в switch’е код, который требует большой точности по таймингу. И чем меньше будет нагружен таймер, а именно чем меньше будет case’ов в операторе switch и чем быстрее будем выходить из прерываний, тем быстрее будут выполняться остальные case. Вот собственно и закончим на этом, так как рассказывать вроде больше нечего. Удачи в опытах и программных извратах.....