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

; стержней для первого индикатора по адресу 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