⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic-52.sdi

📁 该应用软件可以实现大多数单片机的仿真实验
💻 SDI
📖 第 1 页 / 共 5 页
字号:
0527,,TIMER_LOAD,TIMER_LOAD:; Load the timer
,,,        ;
,,,        ;*************************************************************
,,,        ;
0527,B1 26,,        ACALL   $-1             ;DELAY FOUR CLOCKS
0529,C2 8E,,        CLR     TR1             ;STOP IT WHILE IT'S LOADED
052B,85 40 8D,,        MOV     TH1,T_HH
052E,85 41 8B,,        MOV     TL1,T_LL
0531,C2 8F,,        CLR     TF1             ;CLEAR THE OVERFLOW FLAG
0533,D2 8E,,        SETB    TR1             ;START IT NOW
0535,22,,        RET
,,,        ;
,,,
,,,;END
,,,;$INCLUDE(:F2:BAS52.TL)
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
0536,,CROM,CROM:   ; The command action routine - ROM - Run out of rom
,,,        ;
,,,        ;***************************************************************
,,,        ;
0536,C2 17,,        CLR     CONB            ;CAN'T CONTINUE IF MODE CHANGE
0538,B1 3D,,        ACALL   RO1             ;DO IT
,,,        ;
053A,02 10 7E,C_K,C_K:    LJMP    CL3             ;EXIT
,,,        ;
053D,12 0F 3E,RO1,RO1:    CALL    INTGER          ;SEE IF INTGER PRESENT
0540,AC 00,,        MOV     R4,R0B0         ;SAVE THE NUMBER
0542,50 02,,        JNC     $+4
0544,7C 01,,        MOV     R4,#01H         ;ONE IF NO INTEGER PRESENT
0546,B1 53,,        ACALL   ROMFD           ;FIND THE PROGRAM
0548,BC 00 11,,        CJNE    R4,#0,RFX       ;EXIT IF R4 <> 0
054B,A3,,        INC     DPTR            ;BUMP PAST TAG
054C,85 83 13,,        MOV     BOFAH,DPH       ;SAVE THE ADDRESS
054F,85 82 14,,        MOV     BOFAL,DPL
0552,22,,        RET
,,,        ;
0553,90 80 10,ROMFD,ROMFD:  MOV     DPTR,#ROMADR+16 ;START OF USER PROGRAM
,,,        ;
0556,E0,RF1,RF1:    MOVX    A,@DPTR         ;GET THE BYTE
0557,B4 55 09,,        CJNE    A,#55H,RF3      ;SEE IF PROPER TAG
055A,DC 01,,        DJNZ    R4,RF2          ;BUMP COUNTER
,,,        ;
055C,22,RFX,RFX:    RET                     ;DPTR HAS THE START ADDRESS
,,,        ;
055D,A3,RF2,RF2:    INC     DPTR            ;BUMP PAST TAG
055E,B1 A4,,        ACALL   G5
0560,A3,,        INC     DPTR            ;BUMP TO NEXT PROGRAM
0561,80 F3,,        SJMP    RF1             ;DO IT AGAIN
,,,        ;
0563,10 1D F6,RF3,RF3:    JBC     INBIT,RFX       ;EXIT IF SET
,,,        ;
0566,90 1F C9,NOGO,NOGO:   MOV     DPTR,#NOROM
0569,81 D3,,        AJMP    ERRLK
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
056B,,L20DPI,L20DPI: ; load R2:R0 with the location the DPTR is pointing to
,,,        ;
,,,        ;***************************************************************
,,,        ;
056B,E0,,        MOVX    A,@DPTR
056C,FA,,        MOV     R2,A
056D,A3,,        INC     DPTR
056E,E0,,        MOVX    A,@DPTR
056F,F8,,        MOV     R0,A
0570,22,,        RET                     ;DON'T BUMP DPTR
,,,        ;
,,,        ;***************************************************************
,,,        ;
0571,,X31DP,X31DP:  ; swap R3:R1 with DPTR
,,,        ;
,,,        ;***************************************************************
,,,        ;
0571,CB,,        XCH     A,R3
0572,C5 83,,        XCH     A,DPH
0574,CB,,        XCH     A,R3
0575,C9,,        XCH     A,R1
0576,C5 82,,        XCH     A,DPL
0578,C9,,        XCH     A,R1
0579,22,,        RET
,,,        ;
,,,        ;***************************************************************
,,,        ;
057A,,LD_T,LD_T:   ; Load the timer save location with the value the DPTR is
,,,        ; pointing to.
,,,        ;
,,,        ;****************************************************************
,,,        ;
057A,E0,,        MOVX    A,@DPTR
057B,F5 40,,        MOV     T_HH,A
057D,A3,,        INC     DPTR
057E,E0,,        MOVX    A,@DPTR
057F,F5 41,,        MOV     T_LL,A
0581,22,,        RET
,,,        ;
,,,$EJECT
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;GETLIN - FIND THE LOCATION OF THE LINE NUMBER IN R3:R1
,,,        ;         IF ACC = 0 THE LINE WAS NOT FOUND I.E. R3:R1
,,,        ;         WAS TOO BIG, ELSE ACC <> 0 AND THE DPTR POINTS
,,,        ;         AT THE LINE THAT IS GREATER THAN OR EQUAL TO THE
,,,        ;         VALUE IN R3:R1.
,,,        ;
,,,        ;***************************************************************
,,,        ;
0582,D2 29,GETEND,GETEND: SETB    ENDBIT          ;GET THE END OF THE PROGRAM
,,,        ;
0584,12 0E A4,GETLIN,GETLIN: CALL    DP_B            ;GET BEGINNING ADDRESS
,,,        ;
0587,12 0A AC,G1,G1:     CALL    B_C
058A,60 12,,        JZ      G3              ;EXIT WITH A ZERO IN A IF AT END
058C,A3,,        INC     DPTR            ;POINT AT THE LINE NUMBER
058D,20 29 0A,,        JB      ENDBIT,G2       ;SEE IF WE WANT TO FIND THE END
0590,B1 C4,,        ACALL   DCMPX           ;SEE IF (DPTR) = R3:R1
0592,B1 BA,,        ACALL   DECDP           ;POINT AT LINE COUNT
0594,E0,,        MOVX    A,@DPTR         ;PUT LINE LENGTH INTO ACC
0595,20 2A 06,,        JB      UBIT,G3         ;EXIT IF EQUAL
0598,40 04,,        JC      G3              ;SEE IF LESS THAN OR ZERO
,,,        ;
059A,B1 D6,G2,G2:     ACALL   ADDPTR          ;ADD IT TO DPTR
059C,80 E9,,        SJMP    G1              ;LOOP
,,,        ;
059E,C2 29,G3,G3:     CLR     ENDBIT          ;RESET ENDBIT
05A0,22,,        RET                     ;EXIT
,,,        ;
05A1,90 02 00,G4,G4:     MOV     DPTR,#PSTART    ;DO RAM
,,,        ;
05A4,D2 29,G5,G5:     SETB    ENDBIT
05A6,80 DF,,        SJMP    G1              ;NOW DO TEST
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
,,,        ; LDPTRI - Load the DATA POINTER with the value it is pointing
,,,        ;          to - DPH = (DPTR) , DPL = (DPTR+1)
,,,        ;
,,,        ; acc gets wasted
,,,        ;
,,,        ;***************************************************************
,,,        ;
05A8,E0,LDPTRI,LDPTRI: MOVX    A,@DPTR         ;GET THE HIGH BYTE
05A9,C0 E0,,        PUSH    ACC             ;SAVE IT
05AB,A3,,        INC     DPTR            ;BUMP THE POINTER
05AC,E0,,        MOVX    A,@DPTR         ;GET THE LOW BYTE
05AD,F5 82,,        MOV     DPL,A           ;PUT IT IN DPL
05AF,D0 83,,        POP     DPH             ;GET THE HIGH BYTE
05B1,22,,        RET                     ;GO BACK
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;L31DPI - LOAD R3 WITH (DPTR) AND R1 WITH (DPTR+1)
,,,        ;
,,,        ;ACC GETS CLOBBERED
,,,        ;
,,,        ;***************************************************************
,,,        ;
05B2,E0,L31DPI,L31DPI: MOVX    A,@DPTR         ;GET THE HIGH BYTE
05B3,FB,,        MOV     R3,A            ;PUT IT IN THE REG
05B4,A3,,        INC     DPTR            ;BUMP THE POINTER
05B5,E0,,        MOVX    A,@DPTR         ;GET THE NEXT BYTE
05B6,F9,,        MOV     R1,A            ;SAVE IT
05B7,22,,        RET
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;DECDP - DECREMENT THE DATA POINTER - USED TO SAVE SPACE
,,,        ;
,,,        ;***************************************************************
,,,        ;
05B8,B1 BA,DECDP2,DECDP2: ACALL   DECDP
,,,        ;
05BA,C5 82,DECDP,DECDP:  XCH     A,DPL           ;GET DPL
05BC,70 02,,        JNZ     $+4             ;BUMP IF ZERO
05BE,15 83,,        DEC     DPH
05C0,14,,        DEC     A               ;DECREMENT IT
05C1,C5 82,,        XCH     A,DPL           ;GET A BACK
05C3,22,,        RET                     ;EXIT
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
,,,        ;DCMPX - DOUBLE COMPARE - COMPARE (DPTR) TO R3:R1
,,,        ;R3:R1 - (DPTR) = SET CARRY FLAG
,,,        ;
,,,        ;IF R3:R1 > (DPTR) THEN C = 0
,,,        ;IF R3:R1 < (DPTR) THEN C = 1
,,,        ;IF R3:R1 = (DPTR) THEN C = 0
,,,        ;
,,,        ;***************************************************************
,,,        ;
05C4,C2 2A,DCMPX,DCMPX:  CLR     UBIT            ;ASSUME NOT EQUAL
05C6,E0,,        MOVX    A,@DPTR         ;GET THE BYTE
05C7,B5 03 0A,,        CJNE    A,R3B0,D1       ;IF A IS GREATER THAN R3 THEN NO CARRY
,,,                                ;WHICH IS R3<@DPTR = NO CARRY AND
,,,                                ;R3>@DPTR CARRY IS SET
05CA,A3,,        INC     DPTR            ;BUMP THE DATA POINTER
05CB,E0,,        MOVX    A,@DPTR         ;GET THE BYTE
05CC,B1 BA,,        ACALL   DECDP           ;PUT DPTR BACK
05CE,B5 01 03,,        CJNE    A,R1B0,D1       ;DO THE COMPARE
05D1,B3,,        CPL     C               ;FLIP CARRY
,,,        ;
05D2,B2 2A,,        CPL     UBIT            ;SET IT
05D4,B3,D1,D1:     CPL     C               ;GET THE CARRY RIGHT
05D5,22,,        RET                     ;EXIT
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ; ADDPTR - Add acc to the dptr
,,,        ;
,,,        ; acc gets wasted
,,,        ;
,,,        ;***************************************************************
,,,        ;
05D6,25 82,ADDPTR,ADDPTR: ADD     A,DPL           ;ADD THE ACC TO DPL
05D8,F5 82,,        MOV     DPL,A           ;PUT IT IN DPL
05DA,50 02,,        JNC     $+4             ;JUMP IF NO CARRY
05DC,05 83,,        INC     DPH             ;BUMP DPH
05DE,22,,        RET                     ;EXIT
,,,        ;
,,,$EJECT
,,,        ;*************************************************************
,,,        ;
05DF,,LCLR,LCLR:   ; Set up the storage allocation
,,,        ;
,,,        ;*************************************************************
,,,        ;
05DF,D1 92,,        ACALL   ICLR            ;CLEAR THE INTERRUPTS
05E1,B1 A1,,        ACALL   G4              ;PUT END ADDRESS INTO DPTR
05E3,74 06,,        MOV     A,#6            ;ADJUST MATRIX SPACE
05E5,B1 D6,,        ACALL   ADDPTR          ;ADD FOR PROPER BOUNDS
05E7,B1 71,,        ACALL   X31DP           ;PUT MATRIX BOUNDS IN R3:R1
05E9,90 01 08,,        MOV     DPTR,#MT_ALL    ;SAVE R3:R1 IN MATRIX FREE SPACE
05EC,B1 FD,,        ACALL   S31DP           ;DPTR POINTS TO MEMTOP
05EE,B1 B2,,        ACALL   L31DPI          ;LOAD MEMTOP INTO R3:R1
05F0,90 01 22,,        MOV     DPTR,#STR_AL    ;GET MEMORY ALLOCATED FOR STRINGS
05F3,B1 A8,,        ACALL   LDPTRI
05F5,12 0A 0A,,        CALL    DUBSUB          ;R3:R1 = MEMTOP - STRING ALLOCATION
05F8,90 01 04,,        MOV     DPTR,#VARTOP    ;SAVE R3:R1 IN VARTOP
,,,        ;
,,,        ; FALL THRU TO S31DP2
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,        ;S31DP - STORE R3 INTO (DPTR) AND R1 INTO (DPTR+1)
,,,        ;
,,,        ;ACC GETS CLOBBERED
,,,        ;
,,,        ;***************************************************************
,,,        ;
05FB,B1 FD,S31DP2,S31DP2: ACALL   S31DP           ;DO IT TWICE
,,,        ;
05FD,EB,S31DP,S31DP:  MOV     A,R3            ;GET R3 INTO ACC
05FE,F0,,        MOVX    @DPTR,A         ;STORE IT
05FF,A3,,        INC     DPTR            ;BUMP DPTR
0600,E9,,        MOV     A,R1            ;GET R1
0601,F0,,        MOVX    @DPTR,A         ;STORE IT
0602,A3,,        INC     DPTR            ;BUMP IT AGAIN TO SAVE PROGRAM SPACE
0603,22,,        RET                     ;GO BACK
,,,        ;
,,,        ;
,,,        ;***************************************************************
,,,        ;
0604,,STRING,STRING: ; Allocate memory for strings
,,,        ;
,,,        ;***************************************************************
,,,        ;
0604,12 0E 8E,,        LCALL   TWO             ;R3:R1 = NUMBER, R2:R0 = LEN
0607,90 01 22,,        MOV     DPTR,#STR_AL    ;SAVE STRING ALLOCATION
060A,B1 FD,,        ACALL   S31DP
060C,0E,,        INC     R6              ;BUMP
060D,8E 3F,,        MOV     S_LEN,R6        ;SAVE STRING LENGTH
060F,C1 5C,,        AJMP    RCLEAR          ;CLEAR AND SET IT UP
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
,,,        ; F_VAR - Find  the variable in symbol table
,,,        ;         R7:R6 contain the variable name
,,,        ;         If not found create a zero entry and set the carry
,,,        ;         R2:R0 has the address of variable on return
,,,        ;
,,,        ;***************************************************************
,,,        ;
0611,90 01 04,F_VAR,F_VAR:  MOV     DPTR,#VARTOP    ;PUT VARTOP IN DPTR
0614,B1 A8,,        ACALL   LDPTRI
0616,B1 B8,,        ACALL   DECDP2          ;ADJUST DPTR FOR LOOKUP
,,,        ;
0618,E0,F_VAR0,F_VAR0: MOVX    A,@DPTR         ;LOAD THE VARIABLE
0619,60 20,,        JZ      F_VAR2          ;TEST IF AT THE END OF THE TABLE
061B,A3,,        INC     DPTR            ;BUMP FOR NEXT BYTE
061C,B5 07 0F,,        CJNE    A,R7B0,F_VAR1   ;SEE IF MATCH
061F,E0,,        MOVX    A,@DPTR         ;LOAD THE NAME
0620,B5 06 0B,,        CJNE    A,R6B0,F_VAR1
,,,        ;
,,,        ; Found the variable now adjust and put in R2:R0
,,,        ;
0623,E5 82,DLD,DLD:    MOV     A,DPL           ;R2:R0 = DPTR-2
0625,94 02,,        SUBB    A,#2
0627,F8,,        MOV     R0,A
0628,E5 83,,        MOV     A,DPH
062A,94 00,,        SUBB    A,#0            ;CARRY IS CLEARED
062C,FA,,        MOV     R2,A
062D,22,,        RET
,,,        ;
062E,E5 82,F_VAR1,F_VAR1: MOV     A,DPL           ;SUBTRACT THE STACK SIZE+ADJUST
0630,C3,,        CLR  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -