; стержней для первого индикатора по адресу H
OUT PORTA ; вывести информацию о положении стержней на 1 индикатор
DCR L ; найти адрес информации о положении стержней
; для второго индикатора
MOV A,M; ; записать в аккумулятор информацию о положении
; стержней для второго индикатора по адресу H
OUT PORTB ; вывести информацию о положении стержней на 1 индикатор
DCR L ; нахождение адреса для следующего положения стержней
; определение закончилось ли поднятие стержней
MOV E,L ; поместить полученный адрес в регистр Е для последующих
; операций с ним
LXI B,BASE ; загрузить в пару Н адрес BASE
MOV A,C ; загрузить в А последние значения адреса BASE
INR L ; увеличиваем регистр L на 1 для того чтобы
; нейтрализовать действие предыдущей команды DCR L
; теперь регистр L отображает значение последнего
; выведенного на индикатор адреса т.к. адреса данных
; BASE перебираются от большего к меньшему то при
; последнем действии значение L примет адрес BASE тогда
SUB L ; найдём разницу адреса начального значения данных
; BASE с получившимся значением регистра L
JNZ VIVOD ; если значение неравно 0 то продолжаем программу
; поднятия стержней если значение ≠0 то движемся к
; следующей команде
JNP VOZVR ; возвращаемся на отметку VOZVR и ожидаем ввода команды
USLO: LXI H,65535 ; загрузить значение времени 5сек.задержки в регистр Н
CALL ZADER ; * 17 перейти к подпрограмме отработки задержки
LXI H,65535 ; загрузить значение времени 5сек.задержки в регистр Н
CALL ZADER ; * 17 перейти к подпрограмме отработки задержки
LXI H,65535 ; загрузить значение времени 5сек.задержки в регистр Н
CALL ZADER ; * 17 перейти к подпрограмме отработки задержки
LXI H,18778 ; загрузить значение времени 5сек.задержки в регистр Н
CALL ZADER ; * 17 перейти к подпрограмме отработки задержки
MVI A,6CH ; записать в А информацию о опущенных стержнях
OUT PORTA ; вывести информацию на 1 индикатор о опущенных стержнях
OUT PORTB ; вывести информацию на 2 индикатор о опущенных стержнях
JMP VOZVR ; возвращаемся на отметку VOZVR и ожидаем ввода команды
ZADER:NOP ; * 4 начало подпрограммы задержки
ZADER1:IN PORTC ; ** 10 опрос клавиатуры
ANI KODKL ; ** 7 нажато нужное или нет
JZ ZADER2 ; ** 10 ненужное - продолжать по метке ZADER2
MVI C,POVDK ; иначе в С загрузить постоянную времени дребезга
; контакта
; анализ нажатия помеха или нет
ZADER3:IN PORTC ; опрос клавиатуры
ANI KODKL ; была помеха или нет
JZ ZADER2 ; если была помеха продолжать задержку
PUSH H ; загрузить пару регистров в стек
IN PORTC ; опрос клавиатуры
LXI H,KLAV ; сохранение кода нажатой клав. По адр.
MOV M,A ; пересылка из регистра в память
POP H ; извлечение пары регистров из стека
; защита от дребезга на отпускание
ZADER4:MVI C,POVDK ; ; иначе в С загрузить постоянную времени дребезга
; контакта
ZADER5:IN PORTC ; опрос клавиатуры
ANA A ; что либо нажато
JNZ ZADER4 ; идёт дребезг и вернутся на ZADER4
DCR C ; С=С-1
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.