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

228 Микроконтроллеры AVR от азов программирования... означает: присвоить переменной гаЬ значение этой же переменной, сдви ­ нутое на один разряд вправо. Язык СИ допускает другую, сокращенную форму записи того же самого выражения: rab >>= 1; Новое выражение полностью эквивалентно предыдущему. Подобные изящные сокращения являются фирменной особенностью языка СИ. Благодаря ним программа на языке СИ получается короче и проще. В строке 16 вызывается функция задержки. Время задержки составляет 200 мс. Для того, чтобы цикл сдвига повторялся только восемь раз, использу ­ ется оператор цикла (строка 13). В качестве условия, при котором цикл выполняется, используется выражение гаЬ ' =0. В языке СИ выражение «!=» означает «Не равно». Таким образом, наш цикл сдвига (строки 14 — 16) будет выпол ­ няться до тех пор, пока rab не равен нулю. Это и будут наши восемь шагов сдвига. Чтобы убедиться в этом, еще раз посмотрите на табл. 5.2. Значение одного из разрядов Ь0 — Ь7, а, значит, и всей переменной rab , во время первых восьми шагов не равно нулю. И только на девятом шаге все восемь рабочих разрядов обнулятся. Но так как при этом заложенное нами условие не выполняется, последнего девятого цикла не будет. Процедура сдвига влево находится в строках 18 — 22 программы и работает точно так же, как процедура сдвига вправо. Имеются лишь два отличия: ♦ другое начальное значение переменной rab (см. строку 18); ♦ применен другой оператор сдвига. Для сдвига влево применяется оператор «<<» (см. строку 21). При желании выражение в строке 21 тоже можно сократить. Вместо rab = rab « 1; можно записать rab <<= 1 ; 5.7. Использование таймера Постановка задачи В предыдущих примерах для формирования задержки мы исполь ­ зовали один или несколько вложенных программных циклов. Однако такой способ приемлем далеко не всегда. Главный недостаток подобного метода состоит в том, что он полностью загружает центральный про ­ цессор. Пока микроконтроллер занят формированием задержки, он не может выполнять никаких других задач. Еще один недостаток — невозможно с достаточной точностью выбрать время задержки. Гораздо лучшие результаты дает другой спо ­ соб — формирование интервалов времени при помощи одного из встроенных таймеров/счетчиков микроконтроллера. Любой из тайме ­

RkJQdWJsaXNoZXIy MTExODQxMg==