Разработка микропроцессорной системы. Разработка интерфейсных устройств ввода - вывода. Расчёт электрического сопряжения адресных цепей., страница 17

812C  04 2B                     add AL,00101011B ;получим Q4=A0+A1*N7

;Выдача Q4 на ЦАП для преобразования в Y4

812E  E7 07                     out 07H,AX

8130  5A                          pop DX

8131  5B                          pop BX

8132  58                           pop AX

8133  C3                          ret

8134                         Input_X7    endp

;Подпрограммы обработки прерываний

;Реакция на IRQ0

8134                         Avar    proc     far

8134  E4 02                    in AL,02H  ;включение аварийного сигнала

8136  0C 01                    or AL,00000001B

8138  E6 02                    out 02H,AL

;вывод текущего состояния на индикаторы

813A  E8 00F0              call Output_Ind

813D  FA                      cli        ;запрет прерываний

813E  F4                        hlt

813F  CF                       iret       ;возврат

8140                         Avar    endp

;Реакция на IRQ1

8140                         Power   proc     far

8140  50                         push AX

8141  B8 0000                mov AX,0   ;настройка сегмента данных

8144  8E D8                   mov DS,AX

8146  58                          pop AX

;сохранение регистров в энергонезависимом ОЗУ

8147  A3 0480                mov DS:[0480H],AX

814A  89 1E 0482          mov DS:[0482H],BX

814E  89 0E 0484           mov DS:[0484H],CX

8152  89 16 0486            mov DS:[0486H],DX

8156  50                          push AX

8157  8C C8                   mov AX,CS

8159  A3 0488                mov DS:[0488H],AX

815C  8C D8                  mov AX,DS

815E  A3 048A              mov DS:[048AH],AX

8161  8C D0                  mov AX,SS

8163  A3 048C              mov DS:[048CH],AX

8166  8C C0                  mov AX,ES

8168  A3 048E               mov DS:[048EH],AX

816B  8B C5                  mov AX,BP

816D  A3 0490              mov DS:[0490H],AX

8170  8B C4                   mov AX,SP

8172  A3 0492               mov DS:[0492H],AX

8175  8B C7                   mov AX,DI

8177  A3 0494               mov DS:[0494H],AX

817A  8B C6                  mov AX,SI

817C  A3 0496              mov DS:[0496H],AX

;обычный конец прерывания

;на контроллер прерываний - команда СКО2

817F  B0 20                    mov AL,00100000B

8181  E6 60                    out 60H,AL ;отсылка команды СКО2

8183  58                           pop AX

8184  CF                          iret       ;конец подпрограммы обслуживания прерывания

8185                         Power   endp

;Модуль ввода с клавиатуры

;Реакция на IRQ2

8185                         Input_Keyb       proc    far

8185  32 C9                    xor CL,CL  ;обнуление счетчика строк

8187  B4 FE                    mov AH,11111110B

8189                         Next:

8189  8A C4                   mov AL,AH  ;сканирование строки

818B  E6 30                    out 30H,AL

;прием кода столбцов

818D  E4 31                   in AL,31H

818F  F6 D0                  not AL     ;проверка текущей строки

8191  74 0F                     jz Find

8193  FE C1                   inc CL     ;увеличение счетчика строк

8195  D0 E4                   shl AH,1   ;сдвиг кода в АН

8197  80 CC 01              or AH,00000001B ;поправка младшего разряда

819A  80 F9 04              cmp CL,4   ;проверка на полноту тестирования

819D  75 EA                   jne Next

819F  E9 0080                 jmp Exit1  ;на выход из программы:

;в АН-код для строк, в AL-столбцов,

;в CL-номер текущей строки

81A2                         Find:

;сканирование прошло успешно

81A2  32 ED                  xor CH,CH  ;обнуление счетчика столбцов

81A4                         Next1:

81A4  D0 E8                  shr AL,1   ;сдвиг регистра столбцов

81A6  72 04                    jc Find1