0156 F5 PUSH PSW ; запомнить состояние
0157 D5 PUSH D ;
0158 E5 PUSH H ;
0159 3E 05 MVI A,05H ;
015B D3 F7 OUT PPI4MS ; GATE1=0 - выкл таймера отмены
015D 21 00 20 LXI H,2000H ; поиск отменяющегося маршрута
0160 16 0C MVI D,0CH ; счетчик маршрутов
0162 7E M1: MOV A,M ; загружаем состояние маршрута
0163 FE 05 CPI 05H ; проверяем: в режиме отмены?
0165 CA 72 01 JZ VOT_ON ; нашли активный
0168 23 INX H ; следующий маршрут
0169 7A MOV A,D ; уменьшаем счетчик маршрутов
016A 3D DCR A ;
016B 57 MOV D,A ;
016C C2 62 01 JNZ M1 ; если не все маршруты проверены - цикл
016F C3 A6 01 JMP EXIT_O ; если не найдено - выход из прерывания
0172 7D VOT_ON: MOV A,L ; проверяем первые секции маршрутов приема
0173 FE 00 CPI 00H ;
0175 CA 90 01 JZ NO1 ; нечетный прием 1
0178 FE 01 CPI 01H ;
017A CA 90 01 JZ NO1 ; нечетный прием 2
017D FE 06 CPI 06H ;
017F CA 9B 01 JZ NO2 ; четный прием 1
0182 FE 07 CPI 07H ;
0184 CA 9B 01 JZ NO2 ; четный прием 2
0187 36 00 MO: MVI M,00H ; маршрут отменен
0189 3E 09 MVI A,09H ;
018B D3 E7 OUT PPI3MS ; выключаем лампочку "ОТМЕНА"
018D C3 A6 01 JMP EXIT_O ; выход из прерывания
0190 3A 2B 20 NO1: LDA PNA ;
0193 FE 03 CPI 03H ; проверка свободности секции ПНА
0195 C2 A6 01 JNZ EXIT_O ; она занялась - прекратить отмену
0198 C3 87 01 JMP MO ; если свободна - отмена
019B 3A 23 20 NO2: LDA PCHA ;
019E FE 03 CPI 03H ; проверка свободности секции ПЧА
01A0 C2 A6 01 JNZ EXIT_O ; она занялась - прекратить отмену
01A3 C3 87 01 JMP MO ; если свободна - отмена
01A6 3E 20 EXIT_O: MVI A,20H ;
01A8 D3 C0 OUT PICW1 ; завершаем прерывание
01AA FB EI ; разрешаем прерывания
01AB E1 POP H ;
01AC D1 POP D ;
01AD F1 POP PSW ; восстанавливаем сосояние
01AE C9 RET ; выход
01AF F3 IRQ_STR: DI ; запрет прерываний
01B0 F5 PUSH PSW ; запомнить состояние
01B1 D5 PUSH D ;
01B2 3E 02 MVI A,02H ;
01B4 D3 F7 OUT PPI4MS ; GATE0=0 - выкл таймена стрелки
01B6 3A 90 20 LDA STATEB3 ; загружаем текущее сстояние датчиков
01B9 57 MOV D,A ;
01BA 3A 60 20 LDA OUTPUT1 ; загружаем выставленное управление
01BD BA CMP D ; сравниваем
01BE C2 F3 0A JNZ VIKL ; если они различны - в защитное состояние
01C1 3E 04 MVI A,04H ;
01C3 32 53 20 STA OUT_MODE ; помечаем, что перевод осуществлен
01C6 3E 20 MVI A,20H ;
01C8 D3 C0 OUT PICW1 ; завершаем прерывание
01CA FB EI ; разрешаем прерывания
01CB D1 POP D ;
01CC F1 POP PSW ; восстанавливаем сосояние
01CD C9 RET ; выход
01CE F3 IRQ_GO: DI ; запрет прерываний
01CF F5 PUSH PSW ; запомнить состояние
01D0 3E 04 MVI A,04H ;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.