Разработка микропроцессорной централизации малой станции. Разработка структурной схемы МПС. Блок центрального процессора, страница 12

0000             FREE_TBL  EQU   1210H    ; таблица необходимой свободности секций

0000             OUT_TBL   EQU   1510H    ; таблица выходных воздействий

0000             STT_TBL   EQU   2020H    ; таблица состояний секций

0000             OTM_TBL   EQU   1B00H    ; таблица сигналов отмены маршрутов

0000                       ORG   0000H    ;

0000  C3 FE 01   START:    JMP   INIT     ;

0080                       ORG   0080H

0080  C3 CE 01   IRQTBL:   JMP   IRQ_GO   ; прерывание начала процессов перевода

0083  00                   NOP            ;

0084  C3 AF 01             JMP   IRQ_STR  ; прерывание от таймера стрелки

0087  00                   NOP            ;

0088  C3 55 01             JMP   IRQ_OTM  ; прерывание от таймера отмены

008B  00                   NOP            ;

008C  C3 00 01             JMP   IRQ_TERM ; прерывание от таймера ПСА

008F  00                   NOP            ;

0090  C3 39 01             JMP   IRQ_FIX  ; прерывание от ССВК

0093  00                   NOP

0100                       ORG   0100H

0100  F3         IRQ_TERM: DI             ;

0101  F5                   PUSH  PSW      ; сохранение его в стеке

0102  DB B1                IN    PCIC     ; чтение слова состояния ПСА

0104  E6 38                ANI   38H      ; выделение битов ошибок

0106  FE 00                CPI   00H      ; есть ошибки?

0108  CA 18 01             JZ    TERM     ; если нет - обработка запроса

010B  DB B1      TXRD1:    IN    PCIC     ; прием слова состояния оп ПСА

010D  1F                   RAR            ; CY=1, если TxRDY=1 в SW ПСА

010E  D2 0B 01             JNC   TXRD1    ; ожидание готовности передатчика

0111  3E 52                MVI   A,'R'    ; вывод символа "R" в канал связи

0113  D3 B0                OUT   PCID     ;

0115  C3 32 01             JMP   EXIT_M   ;

0118  3A 51 20   TERM:     LDA   RCV_CNT  ; загружаем счетчик принятых байт

011B  FE 01                CPI   01H      ;

011D  CA 29 01             JZ    BYTE2    ; принимаемый байт - второй

0120  F1                   POP   PSW      ; восстановление принятого байта

0121  32 1A 20             STA   MDM_BYTE1;

0124  3E 01                MVI   A,01H    ;

0126  32 51 20             STA   RCV_CNT  ; следующий принимаемый байт будет вторым

0129  F1         BYTE2:    POP   PSW      ;

012A  32 1B 20             STA   MDM_BYTE2;

012D  3E 00                MVI   A,00H    ;

012F  32 51 20             STA   RCV_CNT  ; следующий принимаемый байт будет первым

0132  3E 20      EXIT_M:   MVI   A,20H    ; завершение прерывания

0134  D3 C0                OUT   PICW1    ;

0136  FB                   EI             ; разрешение прерываний

0137  F1                   POP   PSW      ; восстановление состояния процессора

0138  C9                   RET            ; возврат в основную программу

0139  F3         IRQ_FIX:  DI             ; запрет прерываний

013A  F5                   PUSH  PSW      ; запомнить состояние

013B  3A 50 20             LDA   ERR_CNT  ; загружаем счетчик сбоев

013E  3D                   DCR   A        ; уменьшаем счетчик


013F  CA 3F 01   ERR1:     JZ    ERR1     ; если =0, то автовыключение канала

0142  3E 09                MVI   A,09H    ;

0144  D3 C7                OUT   PPI1MS   ; TST.RST=1 - сброс триггера

0146  00                   NOP            ; небольшая задержка, чтобы триггер сбросился

0147  00                   NOP            ;

0148  00                   NOP            ;

0149  00                   NOP            ;

014A  3E 08                MVI   A,08H    ;

014C  D3 C7                OUT   PPI1MS   ; TST.RST=0 - вкл триггера

014E  3E 20                MVI   A,20H    ;

0150  D3 C0                OUT   PICW1    ; завершаем прерывание

0152  FB                   EI             ; разрешаем прерывания

0153  F1                   POP   PSW      ; восстанавливаем сосояние

0154  C9                   RET            ; выход

0155  F3         IRQ_OTM:  DI             ; запрет прерываний