Управление стержнями АЭС, страница 3

      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         ; записать в аккумулятор информацию о положении