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

📄 basic-52.sdi

📁 该应用软件可以实现大多数单片机的仿真实验
💻 SDI
📖 第 1 页 / 共 5 页
字号:
035A,F7,,        DB      0F7H            ;RAM MODE
035B,52 41 4D,,        DB      'RAM'
,,,        ;
035E,F8,,        DB      0F8H            ;ROM MODE
035F,52 4F 4D,,        DB      'ROM'
,,,        ;
0362,F9,,        DB      0F9H            ;INTELLIGENT PROM PROGRAMMING
0363,46 50 52 4F,,        DB      'FPROG'
,,,        ;
0368,FF,,        DB      0FFH            ;END OF TABLE
,,,        ;
,,,
,,,; END OF INCLUDE LOOK52
,,,;$INCLUDE(:F2:LOOK52.SRC)
,,,        ;
0369,45 58 54 52,EIG,EIG:    DB      'EXTRA IGNORED"'
,,,        ;
0377,41 2D 53 54,EXA,EXA:    DB      'A-STACK"'
,,,        ;
037F,43 2D 53 54,EXC,EXC:    DB      'C-STACK"'
,,,        ;
,,,$EJECT
,,,;$INCLUDE(:F2:BAS52.RST)
,,,; BEGINNING
,,,
,,,        ;**************************************************************
,,,        ;
0387,,CRST,CRST:   ; This performs system initialzation, it was moved here so the
,,,        ; new power on reset functions could be tested in an 8751.
,,,        ;
,,,        ;**************************************************************
,,,        ;
,,,        ; First, initialize SFR's
,,,        ;
0387,75 98 5A,,        MOV     SCON,#5AH       ;INITIALIZE SFR'S
038A,75 89 10,,        MOV     TMOD,#10H
038D,75 88 54,,        MOV     TCON,#54H
0390,75,,        DB      75H             ;MOV DIRECT, # OP CODE
0391,C8,,        DB      0C8H            ;T2CON LOCATION
0392,34,,        DB      34H             ;CONFIGURATION BYTE
,,,        ;
0393,90 20 01,,        MOV     DPTR,#2001H     ;READ CODE AT 2001H
0396,E4,,        CLR     A
0397,93,,        MOVC    A,@A+DPTR
0398,B4 AA 03,,        CJNE    A,#0AAH,$+6     ;IF IT IS AN AAH, DO USER RESET
039B,12 20 90,,        LCALL   2090H
,,,        ;
039E,78 FF,,        MOV     R0,#IRAMTOP     ;PUT THE TOP OF RAM IN R0
03A0,E4,,        CLR     A               ;ZERO THE ACC
,,,        ;
03A1,F6,,        MOV     @R0,A           ;CLEAR INTERNAL MEMORY
03A2,D8 FD,,        DJNZ    R0,$-1          ;LOOP TIL DONE
,,,        ;
,,,        ; Now, test the external memory
,,,        ;
03A4,75 3E 4D,,        MOV     SPSAV,#CMNDSP   ;SET UP THE STACK
03A7,85 3E 81,,        MOV     SP,SPSAV
,,,        ;
03AA,75 13 80,,        MOV     BOFAH,#HIGH ROMADR
03AD,75 14 11,,        MOV     BOFAL,#LOW ROMADR+17
03B0,90 80 00,,        MOV     DPTR,#ROMADR    ;GET THE BYTE AT 8000H
03B3,E0,,        MOVX    A,@DPTR
03B4,C3,,        CLR     C
03B5,94 31,,        SUBB    A,#31H          ;FOR BIAS
03B7,F5 45,,        MOV     MT1,A           ;SAVE IN DIRECT MATH LOC
03B9,C2 E2,,        CLR     ACC.2           ;SAVE FOR RESET
03BB,FF,,        MOV     R7,A            ;SAVE IT IN R7
03BC,A3,,        INC     DPTR
03BD,B1 B2,,        ACALL   L31DPI          ;GET SAVED BAUD RATE
03BF,12 08 89,,        LCALL   RCL
03C2,A3,,        INC     DPTR            ;GET MEMTOP
03C3,B1 B2,,        ACALL   L31DPI
03C5,90 00 5F,,        MOV     DPTR,#5FH       ;READ THE EXTERNAL BYTE
03C8,E0,,        MOVX    A,@DPTR
03C9,90 00 00,,        MOV     DPTR,#0         ;ESTABLISH BASE FOR CLEAR
03CC,B4 A5 08,,        CJNE    A,#0A5H,CRS
03CF,E5 45,,        MOV     A,MT1
03D1,C2 E0,,        CLR     ACC.0           ;CLEAR BIT ONE
03D3,64 04,,        XRL     A,#4H
03D5,60 29,,        JZ      CR2
,,,        ;
03D7,BF 02 02,CRS,CRS:    CJNE    R7,#2,$+5
03DA,80 03,,        SJMP    $+5
03DC,BF 03 04,,        CJNE    R7,#3,$+7
03DF,D1 75,,        ACALL   CL_1
03E1,80 11,,        SJMP    CR1
,,,        ;
03E3,AB 83,CR0,CR0:    MOV     R3,DPH          ;SAVE THE DPTR
03E5,A9 82,,        MOV     R1,DPL
03E7,A3,,        INC     DPTR
03E8,74 5A,,        MOV     A,#5AH
03EA,F0,,        MOVX    @DPTR,A
03EB,E0,,        MOVX    A,@DPTR
03EC,B4 5A 05,,        CJNE    A,#5AH,CR1
03EF,E4,,        CLR     A
03F0,F0,,        MOVX    @DPTR,A
03F1,BB E0 EF,,        CJNE    R3,#0E0H,CR0
,,,        ;
03F4,BB 03 00,CR1,CR1:    CJNE    R3,#03H,$+3     ;NEED THIS MUCH RAM
03F7,40 8E,,        JC      CRST
03F9,90 01 0A,,        MOV     DPTR,#MEMTOP    ;SAVE MEMTOP
03FC,B1 FB,,        ACALL   S31DP2          ;SAVE MEMTOP AND SEED RCELL
03FE,D1 54,,        ACALL   CNEW            ;CLEAR THE MEMORY AND SET UP POINTERS
,,,        ;
0400,D1 67,CR2,CR2:    ACALL   RC1             ;SET UP STACKS IF NOT DONE
,,,        ;
0402,12 16 49,,        LCALL   AXTAL0          ;DO THE CRYSTAL
0405,E5 45,,        MOV     A,MT1           ;GET THE RESET BYTE
0407,B4 05 03,,        CJNE    A,#5,$+6
040A,12 40 39,,        LCALL   4039H
040D,50 0D,,        JNC     BG1             ;CHECK FOR 0,1,2,3, OR 4
040F,30 E0 25,,        JNB     ACC.0,BG3       ;NO RUN IF WRONG TYPE
0412,90 80 10,,        MOV     DPTR,#ROMADR+16
0415,E0,,        MOVX    A,@DPTR         ;READ THE BYTE
0416,B4 55 1E,,        CJNE    A,#55H,BG3
0419,02 08 06,,        LJMP    CRUN
,,,        ;
041C,E4,BG1,BG1:    CLR     A               ;DO BAUD RATE
041D,FB,,        MOV     R3,A
041E,F9,,        MOV     R1,A
041F,78 04,,        MOV     R0,#4
0421,20 B0 FD,,        JB      RXD,$           ;LOOP UNTIL A CHARACTER IS RECEIVED
,,,        ;
0424,D8 FE,BG2,BG2:    DJNZ    R0,$            ;FOUR CLOCKS, IN LOOP
0426,12 15 81,,        CALL    DEC3210+4       ;NINE CLOCKS
0429,78 02,,        MOV     R0,#2           ;ONE CLOCK
042B,30 B0 F6,,        JNB     RXD,BG2         ;TWO CLOCKS, LOOP UNTIL DONE
042E,20 B0 FD,,        JB      RXD,$           ;WAIT FOR STOP CHARACTER TO END
0431,30 B0 FD,,        JNB     RXD,$
0434,12 08 89,,        CALL    RCL             ;LOAD THE TIMER
,,,        ;
0437,90 1F D3,BG3,BG3:    MOV     DPTR,#S_N       ;GET THE MESSAGE
043A,D1 A5,,        ACALL   CRP             ;PRINT IT
043C,02 17 7D,,        LJMP    CRAM
,,,
,,,; END
,,,;$INCLUDE(:F2:BAS52.RST)
,,,        ;
,,,$EJECT
,,,        ;***************************************************************
,,,        ;
,,,        ; CIPROG AND CPROG - Program a prom
,,,        ;
,,,        ;***************************************************************
,,,        ;
,,,;$INCLUDE(:F2:BAS52.PGM)
,,,;BEGINNING
,,,
043F,7F 00,PG8,PG8:    MOV     R7,#00H         ;PROGRAM ONE BYTE AT A TIME
0441,7E 01,,        MOV     R6,#01H
0443,7A 7F,,        MOV     R2,#HIGH ROMADR-1
0445,78 FF,,        MOV     R0,#LOW ROMADR-1;LOAD PROM ADDRESS
0447,91 98,,        ACALL   PG1+3
0449,0E,,        INC     R6
044A,E5,,        DB      0E5H            ;MOV A DIRECT OP CODE
044B,CB,,        DB      0CBH            ;ADDRESS OF R2CAP HIGH
044C,91 98,,        ACALL   PG1+3
044E,E5,,        DB      0E5H            ;MOV A, DIRECT OP CODE
044F,CA,,        DB      0CAH            ;R2CAP LOW
0450,7E 03,,        MOV     R6,#3
0452,79 09,,        MOV     R1,#LOW MEMTOP-1
0454,7B 01,,        MOV     R3,#HIGH MEMTOP
0456,91 98,,        ACALL   PG1+3           ;SAVE MEMTOP
0458,80 37,,        SJMP    PGR
,,,        ;
045A,90 01 2A,CIPROG,CIPROG: MOV     DPTR,#IPROGS    ;LOAD IPROG LOCATION
045D,D2 33,,        SETB    INTELB
045F,80 05,,        SJMP    $+7             ;GO DO PROG
,,,        ;
0461,90 01 28,CPROG,CPROG:  MOV     DPTR,#PROGS     ;LOAD PROG LOCATION
0464,C2 33,,        CLR     INTELB
,,,        ;
0466,B1 7A,,        ACALL   LD_T            ;LOAD THE TIMER
0468,C2 95,,        CLR     PROMV           ;TURN ON THE PROM VOLTAGE
046A,12 0E EA,,        CALL    DELTST          ;SEE IF A CR
046D,70 D0,,        JNZ     PG8             ;SAVE TIMER IF SO
046F,7C FE,,        MOV     R4,#0FEH
0471,D2 1D,,        SETB    INBIT
0473,B1 53,,        ACALL   ROMFD           ;GET THE ROM ADDRESS OF THE LAST LOCATION
0475,12 18 55,,        CALL    TEMPD           ;SAVE THE ADDRESS
0478,EC,,        MOV     A,R4            ;GET COUNT
0479,F4,,        CPL     A
047A,12 14 A3,,        CALL    TWO_R2          ;PUT IT ON THE STACK
047D,12 19 A1,,        CALL    FP_BASE+14      ;OUTPUT IT
0480,B1 16,,        ACALL   CCAL            ;GET THE PROGRAM
0482,D1 9D,,        ACALL   CRLF            ;DO CRLF
0484,A8 0E,,        MOV     R0,TEMP4        ;GET ADDRESS
0486,AA 0F,,        MOV     R2,TEMP5
0488,74 55,,        MOV     A,#55H          ;LOAD SIGNIFIER
048A,0E,,        INC     R6              ;LOAD LEN + 1
048B,BE 00 01,,        CJNE    R6,#00,$+4
048E,0F,,        INC     R7
048F,91 9B,,        ACALL   PG2-2
,,,        ;
,,,$EJECT
0491,D2 95,PGR,PGR:    SETB    PROMV
0493,A1 3A,,        AJMP    C_K
,,,        ;
0495,8B A0,PG1,PG1:    MOV     P2,R3           ;GET THE BYTE TO PROGRAM
0497,E3,,        MOVX    A,@R1
0498,12 15 68,,        LCALL   INC3210         ;BUMP POINTERS
049B,7D 01,,        MOV     R5,#1           ;SET UP INTELLIGENT COUMTER
,,,        ;
049D,FC,PG2,PG2:    MOV     R4,A            ;SAVE THE BYTE IN R4
049E,91 D6,,        ACALL   PG7             ;PROGRAM THE BYTE
04A0,91 F0,,        ACALL   PG9
04A2,20 33 0C,,        JB      INTELB,PG4      ;SEE IF INTELLIGENT PROGRAMMING
,,,        ;
04A5,6C,PG3,PG3:    XRL     A,R4
04A6,70 20,,        JNZ     PG6             ;ERROR IF NOT THE SAME
04A8,12 16 39,,        CALL    DEC76           ;BUMP THE COUNTERS
04AB,70 E8,,        JNZ     PG1             ;LOOP IF NOT DONE
04AD,53 D0 E7,,        ANL     PSW,#11100111B  ;INSURE RB0
04B0,22,,        RET
,,,        ;
04B1,6C,PG4,PG4:    XRL     A,R4            ;SEE IF PROGRAMMED
04B2,70 0F,,        JNZ     PG5             ;JUMP IF NOT
04B4,EC,,        MOV     A,R4            ;GET THE DATA BACK
04B5,91 D6,,        ACALL   PG7             ;PROGRAM THE LOCATION
04B7,91 E0,,        ACALL   ZRO             ;AGAIN
04B9,91 E0,,        ACALL   ZRO             ;AND AGAIN
04BB,91 E0,,        ACALL   ZRO             ;AND AGAIN
04BD,DD F8,,        DJNZ    R5,$-6          ;KEEP DOING IT
04BF,91 F0,,        ACALL   PG9             ;RESET PROG
04C1,80 E2,,        SJMP    PG3             ;FINISH THE LOOP
,,,        ;
04C3,0D,PG5,PG5:    INC     R5              ;BUMP THE COUNTER
04C4,EC,,        MOV     A,R4            ;GET THE BYTE
04C5,BD 19 D5,,        CJNE    R5,#25,PG2      ;SEE IF TRIED 25 TIMES
,,,        ;
04C8,D2 95,PG6,PG6:    SETB    PROMV           ;TURN OFF PROM VOLTAGE
04CA,75 D0 00,,        MOV     PSW,#0          ;INSURE RB0
04CD,30 2F E0,,        JNB     DIRF,PG4-1      ;EXIT IF IN RUN MODE
04D0,90 1F 9A,,        MOV     DPTR,#E16X      ;PROGRAMMING ERROR
,,,        ;
04D3,02 18 90,ERRLK,ERRLK:  LJMP    ERROR           ;PROCESS THE ERROR
,,,        ;
,,,$EJECT
04D6,88 80,PG7,PG7:    MOV     P0,R0           ;SET UP THE PORTS
04D8,8A A0,,        MOV     P2,R2           ;LATCH LOW ORDER ADDRESS
04DA,B1 05,,        ACALL   PG11            ;DELAY FOR 8748/9
04DC,C2 93,,        CLR     ALED
04DE,F5 80,,        MOV     P0,A            ;PUT DATA ON THE PORT
,,,        ;
04E0,00,ZRO,ZRO:    NOP                     ;SETTLEING TIME + FP ZERO
04E1,00,,        NOP
04E2,00,,        NOP
04E3,00,,        NOP
04E4,00,,        NOP
04E5,00,,        NOP
04E6,B1 05,,        ACALL   PG11            ;DELAY A WHILE
04E8,C2 94,,        CLR     PROMP           ;START PROGRAMMING
04EA,B1 27,,        ACALL   TIMER_LOAD      ;START THE TIMER
04EC,30 8F FD,,        JNB     TF1,$           ;WAIT FOR PART TO PROGRAM
04EF,22,,        RET                     ;EXIT
,,,        ;
04F0,D2 94,PG9,PG9:    SETB    PROMP
04F2,B1 05,,        ACALL   PG11            ;DELAY FOR A WHILE
04F4,30 B2 FD,,        JNB     P3.2,$          ;LOOP FOR EEPROMS
04F7,75 80 FF,,        MOV     P0,#0FFH
04FA,C2 B7,,        CLR     P3.7            ;LOWER READ
04FC,B1 05,,        ACALL   PG11
04FE,E5 80,,        MOV     A,P0            ;READ THE PORT
0500,D2 B7,,        SETB    P3.7
0502,D2 93,,        SETB    ALED
0504,22,,        RET
,,,        ;
0505,75 0F 0C,PG11,PG11:   MOV     TEMP5,#12       ;DELAY 30uS AT 12 MHZ
0508,D5 0F FD,,        DJNZ    TEMP5,$
050B,22,,        RET
,,,        ;
,,,
,,,;END
,,,;$INCLUDE(:F2:BAS52.PGM)
,,,$EJECT
,,,        ;**************************************************************
,,,        ;
050C,,PGU,PGU:    ;PROGRAM A PROM FOR THE USER
,,,        ;
,,,        ;**************************************************************
,,,        ;
050C,C2 95,,        CLR     PROMV           ;TURN ON THE VOLTAGE
050E,75 D0 18,,        MOV     PSW,#00011000B  ;SELECT RB3
0511,91 95,,        ACALL   PG1             ;DO IT
0513,D2 95,,        SETB    PROMV           ;TURN IT OFF
0515,22,,        RET
,,,        ;
,,,        ;
,,,        ;*************************************************************
,,,        ;
0516,,CCAL,CCAL:   ; Set up for prom moves
,,,        ; R3:R1 gets source
,,,        ; R7:R6 gets # of bytes
,,,        ;
,,,        ;*************************************************************
,,,        ;
0516,B1 82,,        ACALL   GETEND          ;GET THE LAST LOCATION
0518,A3,,        INC     DPTR            ;BUMP TO LOAD EOF
0519,AB 13,,        MOV     R3,BOFAH
051B,A9 14,,        MOV     R1,BOFAL        ;RESTORE START
051D,C3,,        CLR     C               ;PREPARE FOR SUBB
051E,E5 82,,        MOV     A,DPL           ;SUB DPTR - BOFA > R7:R6
0520,99,,        SUBB    A,R1
0521,FE,,        MOV     R6,A
0522,E5 83,,        MOV     A,DPH
0524,9B,,        SUBB    A,R3
0525,FF,,        MOV     R7,A
0526,22,,        RET
,,,        ;
,,,        ;
,,,;$INCLUDE(:F2:BAS52.TL)
,,,;BEGINNING
,,,
,,,        ;**************************************************************
,,,        ;

⌨️ 快捷键说明

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