Рис.1. Алгоритм решения поставленной задачи.
;программа для устройства управления двухтактным двигателем внутреннего сгорания
; функции : 0 –пуск (установлен по умолчанию), 1 –стоп
; регистры: b,de–сч. применяемые соотв. при защите от дребезга и врем. задержке
; h-содержит код текущего режима (01h- стоп, 02h- пуск)
; стек - хранит коды символов выводимых на индикаторы
; (3ah- нижнее положение поршня,c7h-верхнее положение поршня)
d1 equ 80h ; адрес первого индикатора
d2 equ 81h ; адрес второго индикатора
kb equ 82h ; адрес клавиатуры
rl equ 83h ; адрес порта управления внешними устройствами
l1 equ 44848 ; постоянная времени задержки программы
l2 equ 00h ; постоянная времени защиты от дребезга (256 повторов)
org 800h ; стартовый адрес программы в ОЗУ стенда
mvi a,89h ; загрузка управляющего байта внешних устройств
out rl ; вывод управляющего байта в порт управления
lxi sp,900h ; инициализация указателя стека
mvi h,01h ;установка режима «стоп» по умолчанию
lxi d,3ac7h ;загрузка кодов выводимых на индикаторы символов
push d ;коды выводимых символов будут храниться на стеке
r2: pop d ;10\загружаем в пару d коды символов
mov a,e ;5\*регистры d и e обмениваются содержимым (наступает новая фаза)
mov e,d ;5\*
mov d,a ;5\*
push d ;11\сохранение на стеке новой фазы работы двигателя
out d1 ;10\вывод на индикацию положения первого поршня
mov a,e ;5\загрузка кода символа второго поршня
out d2 ;10\ вывод на индикацию положения второго поршня
lxi d,l1 ;10\ загрузка в пару d постоянной времени задержки
r1: call tm ;17\вызов программы задержки и опроса клавиатуры
mvi a,02h ;(7)\загр. в регистр a кода режима «пуск» для сравнения с тек. режимом
cmp h ;(7)\текущий режим это «пуск»?
jnz r1 ;(10)\если нет то переход (пара d не изменяется- задержка бесконечна)
dcx d ;(5)\уменьшение счетчика цикла задержки
mov a,d ;(5)\*проверка содержимого счетчика цикла задержки на 0
ora e ;(4)\*
jnz r1 ;(10)\если не 0 то цикл временной задержки продолжается
jmp r2 ;10\цикл задержки окончен, приступаем к выводу на инд. новой фазы
tm: mvi b,l2 ;(7)загрузка количества повторов при защите от дребезга на нажатие
r3: in kb ;(10)опрос клавиатуры
mov c,a ;(5)сохранение текущего состояния клавиатуры
ana h ;(4)маскируем ненужные биты
rz ;(11)выход, если не нажата клавиша не соответствующая текущему режиму
dcr b ;уменьшение счетчика повторов при защите от дребезга
jnz r3 ;переход если цикл защиты дребезга на нажатие еще не окончен
mov a,c ;найдем код нового режима по сохраненному состоянию клавиатуры
cma ;*нахождение кода нового режима
ani 03h ;*
mov h,a ;сохранение кода нового режима
r4: mvi b,l2 ;загрузка количества повторов при защите от дребезга на отпускание
r5: in kb ;опрос клавиатуры
ana a ;проверка на то что все клавиши отжаты
jnz r4 ;если какая то клавиша нажата то переход
dcr b ;ничего не нажато, уменьшение сч. повторов при защите от дребезга
jnz r5 ;переход если дребезг еще не окончен
ret ;обработка нажатий клавиш окончена, выход в основную программу
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.