Практические задания на экзамен по дисциплине "Цифровые и микропроцессорные устройства", страница 13

        DEFSEG  RAM_BUF2,CLASS=DATA,START=RAM+TEXTSIZE

        SEG     RAM_BUF2

BUF2    DS      TEXTSIZE

        DEFSEG  RAM_BUF3,CLASS=DATA,START=RAM+TEXTSIZE*2

        SEG     RAM_BUF3

BUF3    DS      TEXTSIZE

        ;STACK

STACKSIZE               EQU          32

        DEFSEG  STACK,CLASS=DATA,START=RAM+LEN_RAM-STACKSIZE

        SEG     STACK

STACKR  DS      STACKSIZE

STPOINT EQU     $               ;

;

                    ;MASKS FOR 2EXAPLES

MASK11  EQU          00000011B                  ;

MASK12  EQU          01010000B                  ;

                    ;FLAGS

        DEFSEG  RAM_VARI,CLASS=DATA,START=RAM+0C0H

        SEG     RAM_VARI

PASS1   DS      1

FLGZGR  DS      1       ;1=LOAD BUFFER, 0=MASK INTERRUPT

19.1.

ADDR        DW            820H

                    ;

                    ;MACROCOMMAND

INIT1        %MACRO                   BU,SIM,SZ

        %LOCAL LOOP_INIT

        LXI    H,BU

                    MVI           B,SZ

LOOP_INIT:

                    MVI           M,SIM

                    INX            H

                    DCR           B

                    JNZ           LOOP_INIT

        %ENDM

                    SEG           IOSPACE,START=0

CS8155                         DS              1                 ; COMMAND/STATUS REG OF 8155 IN I/O SPACE

PA8155                        DS              1                 ; PORT A OF 8155 IN I/O SPACE

PB8155                        DS              1

PC8155                        DS              1                 ; PORT C OF 8155 IN I/O SPACE

TL8155                        DS              1                 ; TIMER LOW PART OF 8155 IN I/O SPACE

TH8155                        DS              1                 ; TIMER HIGH PART OF 8155 IN I/O SPACE

                    DEFSEG  PA8355SEG,START=8,CLASS=IOSPACE

                    SEG           PA8355SEG

PA8355          DS      1 ; PORT A OF 8355 IN I/O SPACE

PB8355                        DS              1 ; PORT B OF 8355 IN I/O SPACE

DA8355                        DS              1 ; DDR OF PORT A OF 8355 IN I/O SPACE

DB8355                        DS              1 ; DDR OF PORT B OF 8355 IN I/O SPACE

                    ;

        ;PROGRAMM

        DEFSEG  STARTSEG,CLASS=CODE,START=0

        SEG     STARTSEG

        JMP     PROG

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        DEFSEG  RST65SEG,CLASS=CODE,START=34H

        SEG     RST65SEG

        PUSH    PSW

        PUSH                    H

IN      PB8155                                             ;в задаче вместо PB8155           надо писать 0E0H

XRI    10100001B

                    LHLD       POINT    

        MOV M,A

        POP   H

        POP   PSW

        EI

        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        INX     H

        DCR     B

        JZ     SET_FLAG

        POP     PSW

        EI

19.1.

        RET

SET_FLAG:

        MVI     A,0

        STA     FLGZGR

        POP     PSW

        EI

        RET

        SEG     CODE

PROG:   LXI     SP,STPOINT

        MVI     A,00001101B     ;SET MASK TO RST7.5, RST5.5

        SIM

        INIT1   STACKR,'.',STACKSIZE

        INIT1   BUF1,'1',TEXTSIZE-1

        INIT1   BUF2,'2',TEXTSIZE-1

        INIT1   BUF3,'3',TEXTSIZE-1

        MVI     A,1

        STA     FLGZGR

        MVI     A,0     ;ALL INPUT

        OUT     DB8355

                    LXI            H,BUF1+TEXTSIZE-1               ;END OF BUF1

        DCR     A

        OUT     DA8355  ;ALL OUTPUT

;           BIT=  76543210

        MVI     A,00101000B     ;B7,6=TIMER-STOP,

                                ;B5,4=INTB-DESABLE, INTA -ENABLE,

                                ;B3,2=ALT4

        OUT     CS8155          ;PORT A,B 8155 - INPUT

;

;               MAIN

;

        LXI     H,BUF1

        MVI     B,TEXTSIZE-1    ;1BYTE - END BUFFER +

                                ;1BYTE - EMPTY BYTE FROM INPUT_FILE