Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 309 В строке 123 в регистр count записывается начальное значение kandr. В строках 124,125 содержимое регистровой пары X сохраняется в буфере drebH — drebL. Таким образом запоминается старое значение кода состояния перед тем, как будет получено новое. В строках 126 — 129 происходит считывание кодов из портов PD и РВ и наложение масок. Полученный в результате этих операций код состояния клавиатуры ока жется в регистровой паре X. В строках 130 — 133 производится сравнения старого и нового зна чений кодов. Сравнение происходит побайтно. Сначала сравниваются младшие байты (строки 130, 131), затем старшие (строки 132, 133). Оператор Ьгпе выполняет переход по условию «не равно». Поэтому, если хотя бы одна из операций сравнения даст положительный результат (коды окажутся неодинаковыми), то управление перейдет по метке id. То есть к тому месту программы, где счетчику count снова присваива ется значение kandr. Если же обе операции сравнения дадут отрицательные результаты, и коды окажутся равными, управление перейдет к строке 134. В строке 134 происходит уменьшение содержимого регистра count на единицу. После этого производится проверка на ноль (строка 135). Если после умень шения содержимого count оно еще не равно нулю, то оператор Ьгпе в строке 135 передает управление по метке ic2, и цикл антидребезга про должается. В противном случае цикл завершится, и управление перехо дит к строке 136. В строках 136 — 138 находится процедура сравнения только что полу ченного значения кода состояния клавиатуры с числом в буфере codH — codL. Сравнение проходит побайтно. Сначала в строке 136 сравниваются младшие байты. Если они не равны, то дальнейшее сравнение не имеет смысла. Поэтому управление передается по метке ic5, и подпрограмма завершается. Если младшие байты сравниваемых величин оказались равны, то окон чательный результат сравнения теперь можно получить, просто сравнив между собой старшие байты. Это сравнение производится в строке 138. В результате, при выходе из подпрограммы incod: ♦ флаг Z будет установлен, если сравниваемые коды равны между со бой; ♦ флаг Z будет сброшен, если коды не равны. Следующая дополнительная процедура, обеспечивающая работу основной части программы, — это подпрограмма формирования задержки. Для формирования временных интервалов эта процедура использует таймер. Мы уже рассматривали два варианта подобных про цедур. Одна из них использовала прямое чтение содержимого таймера и цикл ожидания, а вторая использовала прерывания.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==