Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
200 Микроконтроллеры AVR от азов программирования... Приведенный выше алгоритм хорош лишь для теоретического изучения приемов программирования. На практике же он работать не будет. Дело в том, что микроконтроллер работает с такой скоростью, что за время, пока человек будет удерживать кнопку в нажатом состоянии, глав ный цикл программы успеет выполниться многократно (до сотни раз). Это произойдет даже в том случае, если человек постарается нажать и отпустить кнопку очень быстро. При каждом проходе главного цикла программа обнаружит факт нажатия кнопки и переключит светодиод. В результате работа нашего устройства будет выглядеть следующим образом. Как только кнопка будет нажата, светодиод начнет быстро пере ключаться. Настолько быстро, что вы даже не увидите, как он мерцает. Это будет выглядеть как свечение в полнакала. В момент отпускания кнопки процесс переключения остановится, и светодиод окажется в одном из своих состояний (засветится или потух Рис. 5.9. Усовершенствованный алгоритм программы с переключающимся светодиодом нет). В каком именно состоянии он останется, зависит от момента отпу скания кнопки. А это случайная величина. Как видите, описанный выше алгоритм не позволяет создать устройство, соответствующее нашему техническому заданию. Для того, чтобы решить данную проблему, нам необходимо усовер шенствовать наш алгоритм. Для этого в программу достаточно ввести процедуру ожидания. Процедура ожидания приостанавливает основ ной цикл программы сразу после того, как произойдет переключе ние светодиода. Теперь программа должна ожидать момента отпускания кнопки. Как только кнопка окажется отпущенной, выполнение главного цикла возобновляется. Новый, доработанный алгоритм приведен на рис. 5.9. Как видно из рисунка, новый алгоритм дополнен всего двумя новыми операциями, которые и реализуют цикл ожидания. Цикл ожидания добавлен после про цедуры переключения светодиода. Выполняя цикл ожидания, программа
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==