1. Описание алгоритма
Рассмотрим структуру и принцип действия программы, основываясь на листинге и графическом алгоритме, приведённых ниже. Первый шаг детализации алгоритма стандартен для микропроцессорных систем (рис.1.1).
Рис.1.1
Итак, первая и относительно стандартная часть программы – инициализация (рис.1.2), в ней присваиваются имена адресам определённых портов МПС и некоторым постоянным.
Рис.1.2
Дальше идёт непосредственно начало программы (рис.1.3) в виде загрузки в регистр Е и вывода на индикацию в порт А кода правого положения щёток очистки (блоки 2.1-2.3). Это положение по умолчанию. Сюда же (на метку vstart) переходит Program Counter при нажатии во время выполнения программы на клавишу *0*- выключено, очевидно, возвращая состояние щеток в исходное положение. Дальше происходит ожидание нажатия клавиши и защита от дребезга. Защита от дребезга стандартна: происходит загрузка постоянной дребезга в регистр (блок 2.4), на результат опроса клавиатуры накладывается маска клавиш включения одного из режимов (00001100) (блок 2.6). Затем, если нажата нужная клавиша – уменьшение счетчика повторов (блок 2.7). При окончании защиты от дребезга нажатия полученный код нажатой клавиши сохраняется в памяти (в ячейке klav) и далее программа производит защиту от дребезга отпускания, аналогичную защите от дребезга нажатия.
|
Основная часть программы (рис.1.4) начинается с чтения сохраненного кода клавиши (блок 3.3). На этом этапе происходит разветвление: при нажатии на клавишу *2*( включение со скоростью 30 движений в минуту) – прыжок на метку twosec, при нажатии на клавишу *3*(включение со скоростью 1 движение в минуту) – прыжок на метку minute. На каждом этапе происходит сначала запись кода соответствующего режима в ячейку памяти rejim (блоки 3.5 и 3.8) (код 1(00000001) – соответствует режиму 30 движений в минуту, 2(00000010) - 1 движение в минуту). А потом запись в регистр эталона времени до следующего перемещения (блоки 3.6 и 3.9) (1 для режима 30 движений в минуту и 59 - 1 движение в минуту (единица каждый раз декрементируется в начале цикла задержки)).
Затем переход на осуществление перемещения щёток с установленной скоростью: эталон загружается в счетчик времени оставшегося до следующего перемещения (блок 3.10), дальше вызов подпрограммы zader (блок 3.11), т.е. выполнение задержки на 1 сек, после – само движение щёток. Движение это состоит из двух фаз: движение справа – налево и слева – направо, одна фаза полностью повторяет другую. После каждой из фаз происходит задержка на 1 сек. Особенность программы состоит в том, что текущее положение щёток хранится в регистре Е в виде двух кодов: 01100000 – щётки справа и 00001100 - щётки слева. Коды эти выводятся прямо на индикацию: в первом случае горят сегменты В и С, во втором – F и E. Смена одного кода на другой осуществляется исключающим ИЛИ маски wetka (01101100) и одного из этих кодов (блоки 3.13 и 3.18).
Таким образом, после движения щёток справа – налево длительностью 1 сек и слева – направо тоже длительностью 1 сек программа заходит в цикл cikl, где происходит декремент времени до следующего перемещения (блок 3.21), причём если установлена скорость 30 движений в минуту, то этот счётчик сразу же обнуляется и программа переходит снова на осуществление перемещения щёток, занимающее 2 сек. Если установлена скорость 1 движение в минуту, то цикл выполняется 58 раз, каждый раз производя задержку на 1 сек.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.