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

Шаг 5. Переходим непосредственно к разработке устройств и программ 203 ние переходит к строке 18. В строке 18 находится оператор безусловного перехода, который передает управление по метке main, то есть на начало цикла. Таким образом, пока кнопка не нажата, будет выполняться корот ­ кий цикл программы (строки 16,17 и 18). Если кнопка нажата, младший разряд числа в регистре temp окажется равным нулю. В этом случае оператор sbrc в строке 17 передаст управ ­ ление к строке 19, где начинается модуль переключения светодиода. И начинается он с чтения состояния порта РВ. В строке 20 производится проверка младшего бита считанного числа. Если этот бит равен нулю, то строка 21 пропускается, и выполняется строка 22. Если младший бит равен единице, то выполняется строка 21. В строке 22 оператор sbi устанавливает младший бит регистра PORTB в единицу. А в строке 21 находится оператор безусловного перехода, который передает управление по метке ml на строку 24. Там оператор cbi сбра ­ сывает младший бит регистра PORTB в ноль. Таким образом, происходит переключение в младшем разряде порта РВ. Ноль меняется на единицу, а единица на ноль. После переключения светодиода управление передается на строку 25. Это происходит либо при помощи команды безусловного перехода (строка 23), либо естественным путем после строки 24. Строки 25 — 27 содержат цикл ожидания момента отпускания кнопки. Цикл ожидания начинается с чтения содержимого порта PORTD (строка 25). Прочитанное значение записывается в регистр temp. Затем производится проверка младшего разряда прочитанного числа (строка 26). Если этот разряд равен нулю (кнопка еще не отпущена), выполняется строка 27 (безусловный переход на метку m2), и цикл ожи ­ дания повторяется снова. Когда при очередной проверке кнопка окажется отпущенной, повину ­ ясь команде sbrc (в строке 26), микроконтроллер пропустит строку Т7 и перейдет к строке 28. Расположенный там безусловный переход передаст управление на начало основного цикла (по метке main). Программа на языке СИ Та же задача на языке СИ решается следующим образом. При помощи построителя создаем точно такую же заготовку программы с теми же пара ­ метрами, как и в предыдущем случае. Доработка программы также будет сводиться к вписыванию необходимых команд в основной цикл программы. Однако это будут другие команды, реализующие новый алгоритм. Возможный вариант программы смотри в листинге 5.4. Прежде чем мы перейдем к изучению этой программы, необходимо остановиться на новом элементе языка СИ, который в ней применяется.

RkJQdWJsaXNoZXIy MTExODQxMg==