📄 basic-52.sdi
字号:
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 + -