Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 315 После окончания защитной задержки в строке 74 снова производится ввод кода состояния. В строках 75, 76 полученный код записывается в буфер. Для записи используются команды, увеличивающие значение ука зателя (Z). Поэтому после записи каждого очередного байта указатель передвигается в следующую позицию. Затем в строках 77, 78 увеличива ется значение счетчика принятых байтов. Так как мы записали два байта, то и значение счетчика увеличивается дважды. В строках 79, 80 производится оценка длины введенного кода. Если длина превысит размеры буфера, то цикл ввода кода досрочно прекраща ется. В строке 79 производится сравнение текущего значения счетчика с размером буфера. В строке 80 находится оператор условного перехода, который пере дает управление по метке т7 в случае, если длина кода превысит размер буфера. В строках 81,82 код состояния клавиатуры записывается в буфер codH — codL. Делается это для того, чтобы следующий введенный код состояния можно было сравнивать с текущим. Дальше программа должна ожидать очередное изменения кода состо яния. Но сначала нужно запустить таймер, чтобы он начал формирова ние защитного промежутка времени. Если в течение этого промежутка не будет нажата ни одна кнопка, то это должно послужить сигналом к выходу из цикла ввода ключевой комбинации. Запуск таймера произво дится при помощи подпрограммы wait в режиме номер два. В строке 83 в регистр data записывается номер режима, а в строке 84 вызывается сама подпрограмма. В строках 85 — 88 организован комбинированный цикл ожидания. В теле цикла происходит сразу несколько операций. Во-первых, вводится новое значение кода состояния клавиатуры (строка 85). В процессе ввода новый код сравнивается со старым, который хранится в буфере codH — codL. Если коды не равны, то оператор условного перехода в строке 86 передает управление по метке m3, где происходит формирование защитной задержки, затем повторное считывание и запись кода в буфер и так далее. Если новое значение кода равно старому, комбинированный цикл про должается. В строке 87 производится проверка флага задержки f lz. Если флаг равен нулю, это значит, что защитный промежуток времени еще не закончился. В этом случае оператор условного перехода в строке 88 пере дает управление по метке шб, и комбинированный цикл продолжается сначала. Если значение флага f 1 z равно единице, то цикл завершается, и управление переходит к строке 89. В строках 89,90 происходит проверка переключателя режимов работы (S11). В зависимости от состояния этого переключателя полученная только что кодовая комбинация либо записывается в EEPROM (режим «Запись»), либо поступает в процедуру проверки (режим «Работа»).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==