MVI E,0 ; обнуление регистра Е
MVI D,0 ; обнуление регистра D
MVI H,0 ; обнуление регистра H
MVI L,0 ; обнуление регистра L
; инициализация
MVI A,6CH ; запись в А кода опущенных стержней
OUT PORTA ; вывод на индикатор №1 опущенных стержней
OUT PORTB ; вывод на индикатор №1 опущенных стержней
VOZVR:MVI C,POVDK ;загр. Кол. Повт. при анализе дребезга
PEPT: IN PORTC ; опрос клавиатуры; адрес клавиатуры
ANI KODKL ; нажато нужное или нет
JZ VOZVR ; нажато нужное тогда продолжать дальше если нет то
; перейти на метку VOZVR
DCR C ; С=С-1 уменьшить на 1 счётчик защиты от дребезга
JNZ PEPT ; если защита от дребезга закончена то продолжать
; дальше программу, если нет то перейти на метку
; PEPT и продолжать отрабатывать защиту
; сохранение кода нажатой клавиши в регистре В
IN PORTC ; опрос клавиатуры
MOV B,A ; сохранить код нажатой клавиши в регистре В
; зашита от дребезга при отпускании и ожидание
; отпускания клавиши
REZETL:MVI C,POVDK ; записать в счётчик времени дребезга контакта
REPTL:IN PORTC ; опрос клавиатуры
ANA A ; нажата ли ещё эта клавиша
JNZ REZETL ; если нажата ещё эта клавиша то вернутся на метку
; REPTL, если нет то продолжать программу дальше
DCR C ; уменьшить значение счётчика времени дребезга
; контакта на 1
JNZ REPTL ; дребезг не окончен тогда REPTL
MOV A,B ; записать код нажатой клавиши в аккумулятор
REJ: ANI 1H ; определение нажатой клавиши 0 или 3
JNZ USLO ; если нажата клавиша 0 то перейти на метку USLO, если
; нажата клавиша 3 то продолжить программу далее
; поднятие стержней с права на лево с интервалом 2 сек.
; проверка на повторяемость поднятия стержней
LXI D,BASE ; записать адрес BASE в пару D
MOV A,E ; записать в регистр значение регистра Е если действие
; уже выполнялась то в регистре Е остаётся значение
; адреса BASE
SUB L ; вычитание адреса BASE из значения сохранённого в Е
JZ VOZVR ; если значения совпадают то значит действие уже
; выполнялось и вернутся на метку VOZVR
; нахождение адреса информации для вывода поднятых
; стержней
LXI D,BASE ; записать адрес BASE в пару D
MVI B,7H ; в регистр В записать 7Н
MVI D,0 ; в регистр D записать 0Н
DAD D ; сложить и результат поместить в регистре D
MOV D,H ; сохранить регистр Н в регистре D
MOV E,L ; сохранить регистр L в регистре Е
; двух секундная задержка
VIVOD:LXI H,65535 ; записать в пару Н время двух секундной задержки
CALL ZADER ; * 17 перейти к подпрограмме задержки
LXI H,20738 ; записать в пару Н время двух секундной задержки
CALL ZADER ; * 17 перейти к подпрограмме задержки
; вывод на индикаторы поднятия стержней
MOV H,D ; записать обратно данные из регистра D в регистр H
MOV L,E ; записать обратно данные из регистра E в регистр L
MOV A,M ; записать в аккумулятор информацию о положении
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.