Курс лекций - Микропроцессоры


Написание программы для разрабатываемого микропроцессорного устройства - часть 5


И предделитель и счётчик секунд представляют собой двоичные вычитающие счетчики, реализованные при помощи команды DJNZ. Счётчик минут необходимо будет в дальнейшем отображать на светодиодных индикаторах, поэтому этот счётчик желательно реализовать как двоично-десятичный счётчик.

Готовой команды, способной реализовать суммирующий двоично-десятичный счётчик на любой ячейке памяти, в системе команд микроконтроллера нет. Поэтому придётся реализовывать двоично-десятичный счётчик на аккумуляторе. Исходный текст подпрограммы, реализующей счётчик минут, приведен на рисунке 9.22.

;-------------ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ---------------------------------- Delit equ 8 ;Номер ячейки памяти делителя SEC equ 9 ;Номер ячейки памяти счётчика секунд MIN equ 10 ;Номер ячейки памяти счётчика минут NachStek equ 10 ;Номер начальной ячейки памяти стека ... ;-------------ИНИЦИАЛИЗАЦИЯ МИКРОКОНТРОЛЛЕРА------------------------- init: mov SP,#NachStek ;Изменить размер стека call Timer0_Init ;Настроить таймер T0 на прерывания с периодом 50мс mov Delit,#20 ;Настроить делитель на коэффициент деления 20 mov SEC,#60 ;Настроить счётчик секунд на коэффициент деления 60 mov MIN,#0 ;Обнулить счётчик минут ... ;******************************************************************** ;Подпрограмма реализации часов ;******************************************************************** Clock: DJNZ SEC,ExitClock;Если прошла одна минута, то mov SEC,#60 ;настроить счётчик секунд на коэффициент деления 60 mov A,MIN ; add A,#1 ;Переключить счётчик минут DA A ; mov MIN,A ; CJNE A,#60h,ExitClock ;Если прошло 60 минут, mov MIN,#0 ;то обнулить счётчик минут ExitClock: ret

Рисунок 9.22. Исходный текст участков программы, отвечающих за организацию счётчика минут.

В приведённом исходном тексте подпрограммы для увеличения показания минут использована команда суммирования ADD, так как команда INC не устанавливает флаги переносов, а соответственно не может быть выполнена команда десятичной коррекции результата.

Команды ADD и INC могут быть выполнены только над аккумулятором, поэтому в аккумулятор сначала копируется содержимое переменной счётчика минут, а затем, после выполнения операции двоично-десятичного суммирования, снова сохраняется в переменной счётчика минут.


- Начало -  - Назад -  - Вперед -