Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 261 разряды порта PD настраиваются на ввод. В регистр PORTB записыва ется нулевое значение. При этом на выходе РВ.З появляется низкий логи ческий уровень, закрывающий ключ VT1. В регистр PORTD записыва ется код 0х7Ғ, который включает внутренние резисторы нагрузки. Код 0х7Ғ в двоичном виде выглядит как 0x01 111111, поэтому он вклю чает нагрузки для семи младших разрядов порта. Для старшего, восьмого разряда нагрузку включить невозможно, так как этот разряд просто отсутствует. В строках 35,36 производится инициализация компаратора. И, нако нец, в строках 37 — 40 производится инициализация таймера Т1. Сначала настраиваются его режимы работы. Для этого в регистр TCCR1B записы вается код 0x09 (строки 37,38). Этот код переводит таймер в режим СТС и выбирает коэффициент предварительного деления равным единице. Затем в регистр TCCR1A записывается ноль (строки 39, 40). Как видите, в комментариях к этому действию написано: «выключение звука». В данном случае подобное утверждение справедливо. Одна из функций регистра TCCR1A — управление подключением сигнала от таймера на внешний выход ОС1А, который нашем случае служит выходом звука. Включением и отключением выхода ОС1А управляет разряд номер 6 регистра TCCR1A. Единица в шестом разряде подключает таймер к выходу ОС1А (включает звук). При нулевом значении шестого разряда выход ОС1А отключается, а соответствующему контакту микросхемы возвращается его основная функция. Он становится просто выводом порта РВ, в который, как вы помните, записан логический ноль. Этот ноль появляется на выходе, закрывая ключ. Таким образом, при выключенном звуке на выходе всегда будет ноль. Из всего вышеизложенного вы уже поняли, что запись в регистр TCCR1A кода 0x00 равносильна отключению звука. В строке 41 начинается основной цикл нашей программы. В первой части цикла (строки 41 — 48) расположена процедура опроса датчиков. Для работы этой процедуры используется вспомогательный регистр count. Программа сканирует датчики один за другим, а регистр count используется для подсчета уже отсканированных датчиков. Сканирование заканчивается тогда, когда обнаружится первый же датчик с замкнутыми контактами. При этом в регистре count останется номер этого датчика. Рассмотрим работу процедуры сканирования подробнее. Перед нача лом сканирования содержимое регистра count обнуляется (строка 41). Затем производится чтение сигнала с контактов порта PD (строка 42). Считанный код помещается в регистр temp. Теперь код, находящийся в регистре temp , содержит полную информацию о состоянии всех семи датчиков.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==