Белов, А.В. Микроконтроллеры 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 код будет равен единице. И так далее. Теперь нам нужно сгенерировать звук, соответствующий коду дат ­ чика. Для этого мы должны извлечь соответствующий коэффициент

RkJQdWJsaXNoZXIy MTExODQxMg==