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

Шаг 5. Переходим непосредственно к разработке устройств и программ 183 все разряды регистра PORTD. И, наконец, в момент старта программы желательно погасить светодиод. Для этого мы запишем единицы в раз ­ ряды порта РВ. Все описанные выше действия по настройке порта также выполня ­ ются с использованием промежуточного регистра temp. Сначала в него помещается ноль (строка 8). Ноль записывается только в регистр DDRD (строка 9). Затем в регистр temp помещается число OxFF (строка 10). Это число по очереди записывается в регистры DDRB, PORTB, PORTD (строки 11,12,13). Строки 14 и 15 включены в программу для перестраховки. Дело в том, что встроенный компаратор микроконтроллера после системного сброса остается включен. И хотя прерывания при этом отключены и срабатыва ­ ние компаратора не может повлиять на работу нашей программы, мы все же отключим компаратор. Именно это и делается в строках 14 и 15. Здесь уже знакомым нам способом с использованием регистра temp производится запись константы 0x80 в регистр ACSR. Регистр ACSR предназначен для управления режимами работы компаратора, а кон ­ станта 0x80, записанная в этот регистр, отключает компаратор. Настройкой компаратора заканчивается подготовительная часть про ­ граммы. Подготовительная часть занимает строки 1 — 15 и выполняется всего один раз после включения питания или после системного сброса. Строки 16 — 18 составляет основной цикл программы. Это полезно запомнить. Основной цикл — это часть программы, которая повторяется мно ­ гократно и выполняет все основные действия. В нашем случае, согласно алгоритму, действия программы состоят в том, чтобы прочитать состояние кнопки и перенести его на светодиод. Есть много способов перенести содержимое младшего разряда порта PD в младший разряд порта РВ. В нашем случае реализован самый простой вариант. Мы просто переносим одновременно все разряды. Для этого достаточно двух операторов. Первый из них читает содержимое порта PD и запоминает это содер ­ жимое в регистре temp (строка 16). Следующий оператор записывает это число в порт РВ (строка 17). Завершает основной цикл программы оператор безусловного перехода (строка 18). Он передает управление по метке main. В результате три оператора, составляющие тело цикла, повторяются бесконечно. Благодаря этому бесконечному циклу все изменения порта PD тут же попадают в порт РВ. По этой причине, если кнопка S1 не нажата, логическая единица со входа PD0 за один проход цикла пере ­ дается на выход РВО. И светодиод не светится. При нажатии кнопки S1

RkJQdWJsaXNoZXIy MTExODQxMg==