rrc
rrc
call tabcn ; вызов подпрограммы табличного преобразования
out porta ; вывод на индикацию старшей цифры числа
;
; подготовка к индикации младшей цифры числа
mov a,b ; восстанавливаем текущее время
ani 0fh ; стираем старшую цифру (ст. 4 разряда)
call tabcn ; вызов подпрограммы табличного преобразования
out portb ; вывод на индикацию младшей цифры числа
;
jmp pusk1 ; зацикливание программы (переход на начало)
;
; подпрограмма задержки на 1 сек. с опросом клавиатуры.
zader: lxi h,pov ; * 10 загрузка в пару h постоянной времени для ; ;
; реализации
; задержки на 1 сек.
zader1: in portc ; ** 10 опрос клавиатуры
ani kodkl1 ; ** 7 нажаты кл. “останов” (“1”) или кл. “смена режима”
;(“2”) (код маски 00000110)
jz zader2 ; ** 10 нет нажатия - продолжаем выполнять временную
; задержку
mvi c,povdr ; нажато что-то нужное переходим к защите от дребезга
; защита от дребезга на нажатие и на отпускание,
; аналогична описанным ранее
zader3: in portc
ani kodkl1
jz zader2 ; дребезг или помеха - продолжаем отработку
; временной задержки
dcr c
jnz zader3
push h ; сохранение кода наж. клавиши
in portc
lxi h,klav
mov m,a
pop h
zader4: mvi c,povdr ; защита от дребезга на отпускание
zader5: in portc
ana a
jnz zader4
dcr c
jnz zader5 ; конец защиты от дребезга
; так как нажато что-то нужное и это не помеха и не ; ;дребезг, то необходимо сменить режим счета, или остановиться, а значт необходимо ;срочно выйти из подпрограммы временной задержки. Это можно осуществить с помощью ;команды безусловного или условного перехода в любое место основной программы. Но в ;этом случае в стеке останется адрес возврата и стек приблизится к программе. Если ;так произойдет несколько раз, то стек может стереть программу, и она перестанет ;функционировать. Чтобы этого не произошло перед “аварийным” выходом из подпрограммы ;необходимо скорректировать указатель стека, - извлечь из него уже ненужный адрес ;возврата. Это можно сделать выполнив команду POP, которая берет из стека 2 байта и ;помещает их в указанную пару, изменяя при этом указатель стека.
pop h ; коррекция указ. стека перед “аврийным” выходом из ПП
lxi h,klav ; определение номера нажатой клавиши
mov a,m ; что нажато ?
ani 2
jnz ost ; нажат останов
jmp reg ; нажата “смена режима” переход на смену реж.
ost: lxi h,rab ; установка режима "останов"
mvi m,0
jmp circl ; переход на начало
;
zader2: dcx h ; ** 5 уменьшение на 1 постоянной времени
; постояная времени равна “0” ? (содержимое пары h)
mov a,h ; ** 5 проверка на равенство 0 содержимого регистровой пары
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.