i
i
МИКРОКОНТРОЛЛЕРЫ
f
Александр Черномырдин
E-mail:
Продолжение. Начало в №11/2005
Автоматное
программирование
для микроконтроллеров - 2
Д авайте в качестве примера
рассмотрим следующую задачу. На
рис. 1
приведена упрощенная схе-
ма устройства, состоящая из четы-
рех кнопок и восьми светодиодов
(на схеме не показаны цепи пита-
ния и сброса микроконтроллера). С
каждой кнопкой связана пара све-
тодиодов - красный и зеленый. В
начале работы все зеленые свето-
диоды горят, а красные потушены.
При нажатии на кнопку зеленый
светодиод соответствую щ ей ей
пары гаснет, а заж игается крас-
ный. По истечении определенного
времени:
• для кнопки 1 - 1 сек
• для кнопки 2 - 2 сек
• для кнопки 3-1,5 сек
• для кнопки 4 - 2,5 сек
красный светодиод должен вновь
погаснуть и загореться зеленый.
Пока горит красный светодиод, ни-
какие щ елчки соответствую щ ей
кнопки микроконтроллером во вни-
мание не принимаются. Все кноп-
ки должны работать одновременно
и независимо друг от друга. Необ-
ходимо также предусмотреть обра-
ботку дребезга контактов. Ф акти-
чески, мы сейчас попытаемся с по-
мощью одного микроконтроллера
управлять четырьмя “устройства-
ми" одновременно.
Прежде чем двигаться дальше,
автор настоятельно рекомендует
читателям попытаться реализовать
зту задачу самостоятельно.
Итак - скорее всего, ничего не
вышло. Проблема, с которой стол-
кнул ись читател и, не то л ь ко в
сложности задачи, но и том, что в
микроконтроллере всего один тай-
мер (пусть со сторожевым - два),
а их требуется, по крайней мере,
четыре - ведь наши “устройства”
работают независимо друг от дру-
га, и ничто не мешает нам нажать
сразу четыре кнопки одновремен-
но! Простейшим выходом в данной
ситуации было бы выбросить мик-
роконтроллер КР1878ВЕ1, и найти
вместо него другой - с более бога-
той периферией, - но подождите!
В операционной системе Windows,
например, с каждым окном (а ок-
ном в Windows является практичес-
ки все - кнопки, флажки, полосы
прокрутки и т.д.) может быть свя-
за н о до 16 тайм еров! В “ сред-
ненькой” программе для Windows
таких окон под сотню - что же, в
компьютере спрятано полторы ты-
сячи таймеров?! Н икак нет, он там
всего один! Просто в программиро-
вании сущ ествует специальная
техника програм м ирования т.н.
виртуальных таймеров,
о которой
мы сейчас и поговорим.
Виртуальные таймеры (словом
“виртуальный” в программировании
принято обозначать любую сущ -
ность , которая
не существует фи-
зически,
но ведет себя так,
как
будто бы она реально присутству-
ет
в системе) программирую тся
разными способами, но все их в той
или иной мере можно свести к од-
ному из двух вариантов. Оба они "
представлены на
рис. 2.
При первом варианте в систе-
ме заводится столько ячеек памя-
ти, сколько требуется виртуальных
таймеров. Единственный же реаль-
ный таймер настраивается на по-
стоянную выдачу периодических
прерываний (т.н.
тиков).
При полу-
чении тика от таймера обработчик
прерывания вычитает из всех яче-
ек виртуальных таймеров единицу.
Те ячейки, которые при вычитании
из них единицы стали равны нулю,
считаю тся отработавш ими свою
временную задержку. При втором
варианте все виртуальные тайме-
ры выстраиваются в программе в
очередь,
причем самым первым в
очереди будет таймер с наимень-
шей временной задержкой. Имен-
но ее значение и заносится в ре-
гистр интервала реального тайме-
ра, после чего тот запускается на
счет. После возникновения преры-
вания от таймера, из всех остав-
шихся элементов очереди вычита-
ется только что отработанная вре-
менная задержка. В самом деле,
если один виртуальный таймер от-
рабатывает задержку в 2 сек, а вто-
рой - в 5 сек, то после отработки
первого виртуал ьн ого тайм ера
можно утверждать, что и второй
виртуальный таймер уже успел от-
работать свои две секунды из пяти.
36 [
| Радиолюбитель - 1
2/2005
предыдущая страница 33 Радиолюбитель 2005-12 читать онлайн следующая страница 35 Радиолюбитель 2005-12 читать онлайн Домой Выключить/включить текст