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

220 Микроконтроллеры AVR от азов программирования... Как видно из рис. 5.11, схема представляет собой доработанный вари ­ ант схемы управления светодиодом (см. рис. 5.2). К предыдущей схеме просто добавлены еще семь дополнительных светодиодов, включенных таким же образом, как и светодиод VD1. Алгоритм Для создания эффекта «бегущих огней» удобнее всего воспользо ­ ваться операторами сдвига, которые имеются в системе команд любого микроконтроллера. Такие операторы сдвигают содержимое одного из регистров микроконтроллера на один разряд влево или вправо. Если сдвигать содержимое регистра и после каждого сдвига выводить новое содержимое в порт РВ, подключенные к нему светодиоды будут заго ­ раться поочередно, имитируя бегущий огонь. Алгоритм работы бегу ­ щих огней может быть разный. Один из возможных алгоритмов в самых общих чертах будет выглядеть следующим образом. 1. Считать состояние переключателя управления. 2. Если контакты переключателя разомкнуты, перейти к процедуре сдвига вправо. 3. Если контакты замкнуты, перейти к процедуре сдвига влево. 4. После окончания полного цикла сдвига (восемь последовательных сдвигов) перейти к началу алгоритма, то есть к пункту 1. Таким образом, все время, пока контакты переключателя разомкнуты, программа будет выполнять сдвиг вправо. Если состояние переключа ­ теля не изменилось, сдвиг в прежнем направлении продолжается. Если замкнуть контакты переключателя, то все время, пока они замкнуты, будет выполняться сдвиг влево. Как при сдвиге вправо, так и при сдвиге влево после каждого полного цикла сдвига (8 шагов) происходит про ­ верка переключателя. Если его состояние не такое же, как и прежде, то направление сдвига не изменяется. В противном случае программа меняет направление сдвига. Выполнение алгоритма сдвига Посмотрим теперь, как выполняется сам алгоритм сдвига. Сдвиг влево и сдвиг вправо выполняются аналогично. Ниже приводится обобщен ­ ный алгоритм для сдвига влево и сдвига вправо, снабженный коммента ­ риями. 1. Записать в рабочий регистр начальное значение. В качестве началь ­ ного значения используется двоичное число, у которого один из раз ­ рядов равен единице, а остальные разряды равны нулю. Для сдвига вправо нам нужно число с единицей в самом старшем разряде

RkJQdWJsaXNoZXIy MTExODQxMg==