Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 299 Контакты реле должны быть рассчитаны на управление исполнительным механизмом (соленоидом). Обратите внимание, что в данной схеме одни линии порта РВ будут рабо ­ тать как входы, а другие (в частности линия РВ.4) — как выходы. При распре ­ делении выводов порта между периферийными устройствами учитывалась возможность объединения замка с музыкальной шкатулкой. В этом случае шкатулка может управляться одной кнопкой и служить дверным звонком. Программа на Ассемблере Один из возможных вариантов программы на Ассемблере приведен в листинге 5.19. Прежде чем переходить к подробному описанию ее работы, разберемся в некоторых общих вопросах. Начнем с кода состоя ­ ния клавиатуры. Как уже говорилось ранее, код состояния должен иметь отдельный бит для каждой кнопки клавиатуры. Итого, получается десять битов. Одного байта явно мало. Значит, мы должны использовать двухбай ­ товый код состояния. Самый простой способ получить двухбайтовый код состояния — это прочитать сначала содержимое порта PD, а затем — содержимое порта РВ. Затем нужно наложить на каждый из полученных байтов маску. Маска должна обнулить все ненужные нам разряды и оставить раз ­ ряды, к которым подключены наши кнопки. Для числа, прочитанного из порта PD, маска должна обнулить самый старший разряд и оставить все остальные. Для числа, прочитанного из порта РВ, нужно, напротив, оставить три младших разряда и обнулить все остальные. Полученные таким образом два байта мы и будем считать кодом состояния клавиа ­ туры. В том случае, если все десять кнопок (S1 — S10) отпущены, код состоя ­ ния клавиатуры равен 0х7Ғ, 0x07 (ObOl 111111, ObOOOOOl 11). В таком коде значащие биты, отражающие состояние той или иной кнопки, равны единице, а все остальные биты равны нулю. Если нажать любую кнопку, то код состояния изменится. Соответствующий этой кнопке бит примет нулевое значение. Таким образом, любое изменение состояния клавиа ­ туры вызовет соответствующее изменение кода. Теперь вернемся к тексту программы. В программе применяются сле ­ дующие новые для нас операторы. сП _______________________________________________ Общий запрет прерываний. Действие данной команды обратно дей ­ ствию уже знакомой нам команды sei. Команда не имеет параметров и служит для сброса флага I в регистре SREG.

RkJQdWJsaXNoZXIy MTExODQxMg==