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

804B  B0 F4                          mov AL,11110100B

804D  E6 50                          out 50H,AL

;инициализация программируемого контроллера прерываний

804F  B0 13                          mov AL,00010011B ;СКИ1

8051  E6 60                          out 60H,AL

8053  B0 00                          mov AL,0   ;СКИ2

8055  E6 61                          out 61H,AL

8057  B0 03                          mov AL,00000011B ;СКИ4

8059  E6 61                          out 61H,AL

;загрузка векторов прерывания в таблицу

805B  8C C8                          mov AX,CS  ;получение текущего сегмента

805D  26: A3 0000                mov ES:[0000H],AX

8061  26: A3 0004                 mov ES:[0004H],AX

8065  26: A3 0008                 mov ES:[0008H],AX

8069  26: C7 06 0002 8134r  mov ES:[0002H],offset Avar ;смещение подпрограммы обработки IRQ0

8070  26: C7 06 0006 8140r   mov ES:[0006H],offset Power ;для IRQ1

8077  26: C7 06 000A 8185r  mov ES:[000AH],offset Input_Keyb ;для IRQ2

807E  FB                             sti

807F  C3                             ret        ;возврат в основную программу

8080                         Init    endp

;Модуль логической обработки сигналов Х1-Х4

;и формирование управляющего сигнала Y1

8080                         Input_X1_4    Proc      Near

8080  50                             push AX       ;сохранение используемых регистров

8081  53                             push BX

8082  51                             push CX

8083  E4 00                          in AL,00H     ;опрос канала А

;в четырех младших разрядах AL- сигналы Х1-Х4

8085  A8 01                         test AL,01H   ;тест на Х1

8087  74 05                          jz M1_1

;если X1-не 0

8089  80 FB 01                    cmp BL,01H    ;засылка Х1 в BL

808C  EB 02                         jmp M2

808E                         M1_1:   ;если Х1 - 0

808E  32 DB                         xor BL,BL     ;обнуление BL

8090  A8 02                  M2: test AL,02H   ;тест на Х2

8092  74 05                          jz M2_1

;если Х2 - не 0

8094  80 E7 01                    and BH,01H    ;засылка Х2 в ВН

8097  EB 02                         jmp M3

8099                         M2_1:   ;если Х2 -0

8099  32 FF                         xor BH,BH     ;обнуление ВН

809B  A8 04                  M3: test AL,04H   ;тест на Х3

809D  74 05                          jz M3_1

;если Х3-не 0

809F  80 E1 01                     and CL,01H    ;засылка Х3 в CL

80A2  EB 02                          jmp M4

80A4                         M3_1:   ;если Х3 - 0

80A4  32 C9                         xor CL,CL     ;обнуление CL

80A6  A8 08                  M4: test AL,08H   ;тест на Х4

80A8  74 05                          jz M4_1

;если Х4 - не 0

80AA  80 E5 01                    and CH,01H    ;Х4 - в СН

80AD  EB 02                         jmp M_end

80AF                         M4_1:   ;если Х4 -0

80AF  32 ED                         xor CH,CH     ;в СН-0

80B1                         M_end:  ;конец опроса датчиков Х1-Х4

;Х1 хранится в BL, Х2-в ВН, Х3-в CL, Х4-в СН

;Получение Y1:

80B1  22 DF                          and BL,BH     ;в BL - функция Х1*Х2

80B3  22 CD                          and CL,CH     ;в СL - Х3*Х4

80B5  0A D9                          or BL,CL      ;в BL- Y1=Х1*X2+X3*X4

;Загрузка модуля пересчета в канал 1 таймера

80B7  B0 4C                          mov AL,01001100B ;загрузка младшего байта

80B9  E6 25                          out 25H,AL

80BB  B0 1D                         mov AL,00011101B ;загрузка старшего байта

80BD  E6 25                         out 25H,AL

80BF  FA                              cli     ;запрет прерываний

80C0  8A C3                         mov AL,BL ;Y1-в AL

80C2  E6 01                          out 01H,AL ;выдача Y1