Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
262 Микроконтроллеры AVR от азов программирования... Каждому из семи датчиков будет соответствовать один из семи млад ших разрядов кода в регистре temp: ♦ если в момент считывания контакты датчика были разомкнуты, то соответствующий разряд будет равен единице; ♦ если контакты датчика были замкнуты, соответствующий разряд будет равен нулю. Сканирование датчиков сводится к проверке семи младших разрядов кода в регистре temp. Цикл сканирования составляют строки 43 — 48. В процессе сканирования программа просто сдвигает содержимое реги стра temp вправо. В результате каждого сдвига содержимое очередного разряда попадает в флаг признака переноса. По значению этого флага и определяется состояние датчика. Как только очередной разряд окажется равным нулю, это значит, что контакты соот ветствующего датчика были замкнуты. Поэтому цикл сканирования пре кращается, и программа приступает к процедуре формирования звука. Цикл сканирования повторяется семь раз (по количеству датчиков). Если после семи сдвигов нулевой бит не обнаружен, значит, контакты всех семи датчиков были незамкнуты. В этом случае управление переда ется по метке ml, где происходит выключение звука. Затем снова считы вается состояние порта, и весь цикл сканирования повторяется сначала. Логический сдвиг вправо разрядов регистра temp выполняется в строке 43. В строке 44 производится проверка признака переноса. Если он равен нулю (контакты датчика замкнуты), то происходит переход к строке 49 по метке m3. Там начинается вычисление параметров для формирования звука. Если признак переноса равен единице (контакты датчика не замкнуты), цикл сканирования продолжается. Следующая команда (строка 45) уве личивает содержимое регистра count, осуществляя подсчет датчиков. В строке 46 содержимое count сравнивается с числом 7. Таким образом ограничивается количество проходов цикла сканирования. Если содержимое count еще не достигло семи, то выполняется пере ход по метке m2 , и цикл сканирования продолжается. Если же содержи мое count окажется равным семи, то это означает, что все семь датчиков мы уже перебрали. В этом случае выполняется оператор безусловного перехода в строке 48, который передает управление по метке ml. Теперь посмотрим, что же происходит, когда процедура сканирова ния обнаружит сработавший датчик. В этом случае управление пере дается к строке 49 (метка m3). Регистр count к этому моменту содержит номер сработавшего датчика. Для датчика, подключенного к входу PD.0, этот код будет равен нулю. Для PD.1 код будет равен единице. И так далее. Теперь нам нужно сгенерировать звук, соответствующий коду дат чика. Для этого мы должны извлечь соответствующий коэффициент
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==