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