Программа вычитающего счетчика на микроконтроллере
Программа вычитающего счетчика на PIC16F628A
При написании программ, связанных с временными интервалами, в частности для разнообразных таймеров, порой требуется использование вычитающего счетчика. Такую программу я и хочу предложить для начинающих.
Скриншот программы показан ниже.
Особенностью этой программы является то, что все действия производятся над числами, представленными в двоично-десятичном виде. Это дает возможность вводить и выводить данные без применения программы преобразования чисел, представленных в двоичной системе счисления, в двоично-десятичные. Максимальное число, записываемое в счетчик – 999. Но используя данный алгоритм работы программы, можно построить счетчик и на большее число разрядов. Программа начинается с записи этого числа в рабочие регистры. При этом в reg_0 записываются единицы, в reg_1 – десятки, в reg_2 – сотни. Действия по декрементации числа, записанного в рабочие регистры, начинается с метки – z. Сразу проверяем содержимое регистра единиц, если в нем ноль, то сразу попадаем на метку – D, и проверяем на ноль содержимое регистра десятков, если и здесь – 0, то идем проверять на ноль регистр сотен, в случае ноля в регистре сотен, попадаем на метку – out. (Goto $ — команда зацикливания программы, Она в основном используется в процессе работы над программами, их отладке, поиске ошибок, корректировке и т.д.) Это говорит о том, что число, ранее записанное в регистры, полностью продекрементировано и во всех регистрах — 0. Начнем опять сначала, когда в каждом из регистров находятся числа.
Для простоты будем декрементировать число 11. И так, определили, что в регистр единиц не пустой, декрементируем, оставляя результат в этом же регистре, (в регистрах уже число — 10)и по команде goto z, возвращаемся. Теперь в этом регистре – ноль, поэтому сразу переходим на метку D. Так как регистр десятков не пустой, то производим декрементацию уже регистра десятков и тоже результат оставляем в этом же регистре. В данный момент в регистрах после двух декрементаций находятся нули, а нам нужна 10-1=9 — девятка. Поэтому мы ее и записываем в регистр единиц. После этой записи опять возвращаемся в начало программы. Точно так же произойдет, когда декрементируется последняя единица и в разряде сотен, только девятки запишутся уже в два регистра – регистр единиц и регистр десятков. Вот в принципе и все. Успехов.