В задании поставлена задача: «Разработать устройство управления одним светодиодом при помощи одной кнопки. При каждом нажатии кнопки светодиод должен поочерёдно включаться и отключаться. При первом нажатии кнопки светодиод должен включиться, при следующем – отключиться и т. д.».
Последовательность действий в словесной форме отображается так:
1. Прочитать состояние младшего разряда порта РД.0.
2. Если значение этого разряда равно единице, перейти к началу цикла (то есть продолжать читать состояние младшего разряда порта
3. Если значение разряда РД0 равно нулю, изменить состояние выхода РВ.0 на противоположное.
4. Перейти к началу цикла (то есть читать состояние РД0).
Последовательность действий (алгоритм) удобнее отображать графически.
Различные действия, выполняемые программой, отображаются прямоугольником (блоком). Их суть вписывается в прямоугольник. Допускается в одном блоке объеди-нять несколько операций. Последовательность действий показывается стрелками. Ромбик реализует разветвление программы по условию, которое записано внутр. Если условие истинно, то надо идти по пути, обозначенному словом «Да». Если нет, - то по пути «Нет». Прямоугольник со скруглёнными боками – начало и конец алгоритма.
Алгоритм поставленной задачи – на рисунке.
Первые два блока – установка вершины стека и программирование портов ввода – вывода. Основной цикл обведён штриховой линией.
Первая операция – чтение состояния младшего разряда порта Д.
Вторая операция – сравнение значения содержимого разряда с единицей. Если РД0 =1, то программа возвращается к началу цикла.
Если РД0 = 1, то программа идёт по стрелке «Нет», где выполняется третья операция.
Третья операция - сравнение, при котором проверяется состояние светодиода (горит или не горит) и по результату которого светодиод должен переключиться в другое сос-тояние. Если светодиод не горит (РВ0 = 1), то разряд сбрасывается на ноль (0=>РВ0), то
есть разряду РВ0 присваивается значение «0», и программа возвращается к началу цикла. Если светодиод горит (РВ0 = 0), то разряду присваивается значение 1 (1=>РВ0), после чего программа возвращается к началу цикла.
Очевидно, основной цикл является бесконечным.
Алгоритм простой, но программа по нему работать не будет, так как скорость работы МК такова, что за время нажатия кнопки основной цикл будет выполнен сотни раз. При каждом проходе программа будет обнаруживать нажатие кнопки и переключать свето-диод. Так быстро, что это будет восприниматься, как свечение в полнакала. В каком именно состоянии программа остановится, зависит от момента отпускания кнопки. А этот момент – величина случайная.
Для того, чтобы программа работала, алгоритм дополняется операцией ожидания.