Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
310 Микроконтроллеры AVR от азов программирования... В данном случае разработан еще один вариант, который представ ляет собой нечто среднее между двумя предыдущими. В этом варианте будут использоваться и прерывание, и цикл ожидания. Новый алго ритм реализует подпрограмма wait, которая занимает строки 141 — 157. Подпрограмма имеет три режима работы. Номер режима передается в подпрограмму при ее вызове. Для этого он записывается в регистр data. В режиме номер 1 под программа формирует задержку 48 мс. В режиме номер 3 формируется задержка в 1 с. В режиме номер 2 задержка не формируется. Подпрограмма просто настраивает таймер точно так же, как в режиме номер 3, разре шает прерывания и заканчивает свою работу. Контрольный интервал времени длительностью 1 с формируется уже вне подпрограммы wait (в основном тексте программы). Основной принцип формирования задержки строится на использо вании флага задержки. В качестве флага задержки применяется регистр f lz. Описание этого регистра вы можете видеть в строке 7 программы. Перед началом цикла задержки в регистр f 1 z записывается ноль. Затем запускается таймер и разрешается работа одного из видов прерываний (прерывание по совпадению или прерывание по переполнению). В определенный момент времени будет вызвана процедура обработки прерывания. Эта процедура (строки 156,176) запишет в регистр флага (f lz) единицу. Единица в регистре flz послужит индикатором того факта, что заданный промежуток времени закончился. Для обнаружения момента окончания задержки используется цикл ожидания. В цикле ожидания программа постоянно проверяет содержимое реги стра flz. Пока flz равно нулю, цикл продолжается. Заканчивается цикл в тот момент, когда flz будет равен единице. Для формирования разных значений длительности задержки исполь зуются разные виды прерываний. Прерывание по совпадению использу ется для формирования задержки в 48 мс. Для этого значение регистра совпадения выбрано таким образом, чтобы содержимое счетного реги стра достигло этого значения именно через 48 мс. Прерывание по пере полнению таймера используется для формирования интервала времени, равного одной секунде. Благо, что при коэффициенте пересчета предва рительного делителя 1/64 и тактовой частоте в 4 МГц переполнение тай мера произойдет именно через 1 с. Рассмотрим текст подпрограммы wait подробнее. Начинается под программа с проверки значение регистра data (строка 141). Как уже говорилось ранее, при помощи этого регистра в подпрограмму переда ется код номера режима. В данном случае нужно определить длитель ность формируемой задержки.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==