📄 sstdownload.a51
字号:
;sst89c58下载器,使用keilc51的debug调试器下载。
;将本程序编译后写入sst89c58,并编程为remap 4kbytes。该芯片即有了keil环境下载功能。
;当p1.0拉低时,启动时进入下载程序,进入下载程序后将会自动删除block0。p1.0高电平时进入用户程序。
;进入下载程序后,可以通过串口和keil的仿真环境连通,波特率自动调节。
;选择load HEX文件,即可将程序下载到sst89c58的低端32keeprom中。除了7e00-7fffh被占用了。
;程序编写:丁丁 2000.12.26
;个人主页:http://www.mcu51.com
sfcf data 0b1h
sfcm data 0b2h
sfal data 0b3h
sfah data 0b4h
sfdt data 0b5h
sfst data 0b6h
ORG 0F000H
ljmp disremap ;千万不要删除这句看似没用的程序,至于为什么就想想吧。
disremap:mov sfcf,#11000000b ;disable remap
;jb p1.0,user ;在这里设置你要用来控制进入iap的管脚
clr p3.1 ;led指示正在擦除
lcall clearuser
setb p3.1
ljmp LF026;main
user: ljmp 0000h
writebyte: push acc ;这个子程序是用来写一个eeprom字节的,如果你仅仅是用来iap,也可以将它简化,后面那一大段就可以删了。
push psw
push dph
push dpl
push b
push 02h
push 00h
push acc ;保存要写入的数据
CLR A ;测试是否为空0ffh
MOVC A, @A+DPTR
inc a
jnz clear_save
w_b_: pop acc ;如果该位置是空的就直接写入,不用擦除
w1byte: mov sfah,dph
mov sfal,dpl
mov sfdt,a
mov sfcm,#0eh
t_over: mov a,sfst
jb acc.2,T_over
ajmp endend
clear_save: ;清除用来暂时保存的rom
mov sfah,#7fh
mov sfal,#00h
mov sfcm,#0bh
t_c7f_over: mov a,sfst
jb acc.2,t_c7f_over
;将高端内存搬到暂时保存rom
mov r2,#00h ;将高端ram搬到7f00rom
mov r0,#80h ;指向高端ram
t_w1_next: mov sfah,#7fh
mov sfal,r2
mov sfdt,@r0
mov sfcm,#06h ;burst write
t_w1_over: mov a,sfst
jb acc.3,t_w1_over
inc r2
inc r0
cjne r0,#0c0h,t_w1_n1 ;write 64
t_w1_over1: mov a,sfst
jb acc.2,t_w1_over1
ajmp t_w1_next
t_w1_n1: cjne r0,#00h,t_w1_next
t_w1_over2: mov a,sfst
jb acc.2,t_w1_over2
;将被写字节所在扇搬到高端内存
mov b,dpl ;save dpl当前字节所在地低端位置b
anl dpl,#80h
mov r0,#80h
save_w0: clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dpl
cjne r0,#00h,save_w0
;写入当前字节到高端内存
mov a,b
orl a,#80h
mov r0,a
pop acc
mov @r0,a
;擦除原位置扇区
mov sfah,dph
mov sfal,b
mov sfcm,#0bh
t_w1_c1: mov a,sfst
jb acc.2,t_w1_c1
;将高端内存搬到原位置扇区
anl b,#80h
mov r0,#80h ;指向高端ram
t1_w1_next: mov sfah,dph
mov sfal,b
mov sfdt,@r0
mov sfcm,#06h ;burst write
t1_w1_over: mov a,sfst
jb acc.3,t1_w1_over
inc b
inc r0
cjne r0,#0c0h,t1_w1_n1 ;write 64
t1_w1_over1: mov a,sfst
jb acc.2,t1_w1_over1
ajmp t1_w1_next
t1_w1_n1: cjne r0,#00h,t1_w1_next
t1_w1_over2: mov a,sfst
jb acc.2,t1_w1_over2
;将保存区的内容搬回到高端ram
mov r0,#80h
mov dptr,#7f00h
t_w1_b: clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dpl
cjne r0,#0,t_w1_b
endend: pop 00h
pop 02h
pop b
pop dpl
pop dph
pop psw
pop acc
ret
org 0f200h ;//////////////////////
LF200: PUSH DPL
PUSH DPH
MOV DPTR, #7E08H
lcall writebyte
MOV A, PSW
INC DPTR
lcall writebyte
CLR A
MOV PSW, A
XCH A, IE
INC DPTR
lcall writebyte
POP ACC
INC DPTR
lcall writebyte
POP ACC
INC DPTR
lcall writebyte
POP ACC
INC DPTR
lcall writebyte
POP ACC
INC DPTR
lcall writebyte
INC DPTR
CLR A
MOVC A, @A+DPTR
XCH A, SP
lcall writebyte
MOV A, B
INC DPTR
lcall writebyte
MOV A, R0
INC DPTR
lcall writebyte
MOV R0, #00H
LF232: INC R0
INC DPTR
CLR A
MOVC A, @A+DPTR
XCH A, @R0
lcall writebyte
MOV A, R0
CJNE A, #6FH, LF232
LCALL LF0AF
LCALL LF2A0
LCALL LFBD0
LCALL LFAD4
LCALL LF9EC
LCALL LF9EC
LCALL LF9EC
LF251: LCALL LFAD4
MOV DPTR, #7E0DH
MOV A, R0
lcall writebyte
INC DPTR
MOV A, R1
lcall writebyte
LCALL LF0A2
RET
LF260: MOV R2, #01H
LF262: LCALL LFBD0
MOV R6, 01H
MOV R5, 00H
LF269: LCALL LFB0C
CJNE A, #01H, LF29B
PUSH DPH
PUSH DPL
LCALL LFACA
CLR C
MOV A, R6
SUBB A, R1
MOV R4, A
MOV A, R5
SUBB A, R0
JNZ LF28A
CJNE R4, #02H, LF281
LF281: JNC LF28A
MOV 28H, #08H
MOV A, #01H
SJMP LF296
LF28A: MOV A, #12H
LCALL LFADF
MOV A, #0F1H
LCALL LFADF
MOV A, #03H
LF296: POP DPL
POP DPH
lcall writebyte
LF29B: INC R2
CJNE R2, #0CH, LF269
RET
LF2A0: MOV R2, #0BH
LF2A2: LCALL LFB0C
CJNE A, #03H, LF2B4
MOV A, #01H
lcall writebyte
LCALL LFACA
LCALL LFADD
LCALL LFADD
LF2B4: DJNZ R2, LF2A2
LF2B6: MOV A, #81H
LF2B8: SETB 10H
MOV R0, A
SJMP LF2C1
LF2BD: MOV R0, #81H
LF2BF: CLR 10H
LF2C1: MOV DPTR, #7E08H
CJNE R0, #0E0H, LF2C9
SJMP LF2ED
LF2C9: INC DPTR
CJNE R0, #0D0H, LF2CF
SJMP LF2ED
LF2CF: INC DPTR
CJNE R0, #0A8H, LF2D5
SJMP LF2ED
LF2D5: INC DPTR
CJNE R0, #83H, LF2DB
SJMP LF2ED
LF2DB: INC DPTR
CJNE R0, #82H, LF2E1
SJMP LF2ED
LF2E1: MOV DPTR, #7E0FH
CJNE R0, #81H, LF2E9
SJMP LF2ED
LF2E9: INC DPTR
CJNE R0, #0F0H, LF2F5
LF2ED: JB 10H, LF2F2
lcall writebyte
RET
LF2F2: CLR A
MOVC A, @A+DPTR
RET
LF2F5: MOV R1, #0E5H
JB 10H, LF2FC
MOV R1, #88H
LF2FC: PUSH ACC
MOV DPTR, #7EC3H
MOV A, R1
LCALL LF8F4
MOV R1, DPL
MOV A, DPH
XCH A, R0
INC DPTR
LCALL LFAF0
MOV A, #22H
LCALL LFAF0
MOV DPL, R1
MOV DPH, R0
CLR A
POP 00H
JMP @A+DPTR
LF31B: MOV A, #0E0H
LCALL LF2B8
MOV DPL, 2CH ;///????????
MOV DPH, 2BH
MOVC A, @A+DPTR
MOV R0, #0E0H
LJMP LF2BF
LF32C: LCALL LF2B6
PUSH 06H
MOV R1, A
MOV A, 2CH
LCALL LF918
MOV A, 2BH
LCALL LF918
MOV A, R1
POP 06H
LJMP LF2BD
Lf342: ;f342h data area
db 01h,06h;AJMP LF006
db 0fh;INC R7
db 01h,01h;AJMP 0F001H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 23h;RL A
db 0ah;INC R2
db 13h;RRC A
db 01h,01h;AJMP 0F001H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 23h;RL A
db 06h;INC @R0
db 15h,01h;DEC 01H
db 02h,02h,01h;LJMP 0201H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,23h;AJMP LF023
db 0ah;INC R2
db 19h;DEC R1
db 01h,02h;AJMP 0F002H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 1eh;DEC R6
db 06h;INC @R0
db 02h,03h,02h;LJMP 0302H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 1eh;DEC R6
db 0ah;INC R2
db 02h,03h,02h;LJMP 0302H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 1eh;DEC R6
db 06h;INC @R0
db 02h,03h,02h;LJMP 0302H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 1eh;DEC R6
db 0ah;INC R2
db 02h,29h,02h;LJMP 2902H
db 03h;RR A
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,1eh,06h;LJMP 1E06H
db 02h,25h,01h;LJMP 2501H
db 03h;RR A
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,03h,0ah;LJMP 030AH
db 02h,01h,02h;LJMP 0102H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 02h,06h,02h;LJMP 0602H
db 01h,01h;AJMP 0F001H
db 01h,02h;AJMP 0F002H
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,02h,02h;LJMP 0202H
db 02h,0ah,02h;LJMP 0A02H
db 01h,23h;AJMP LF023
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 23h;RL A
db 02h,06h,02h;LJMP 0602H
db 01h,01h;AJMP 0F001H
db 02h,01h,01h;LJMP 0101H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 02h,0ah,02h;LJMP 0A02H
db 01h,01h;AJMP 0F001H
db 23h;RL A
db 01h,01h;AJMP 0F001H
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 1eh;DEC R6
db 01h,06h;AJMP LF006
db 01h,01h;AJMP 0F001H
db 01h,02h;AJMP 0F002H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,0ah;AJMP LF00A
db 01h,01h;AJMP 0F001H
db 01h,02h;AJMP 0F002H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
db 01h,01h;AJMP 0F001H
Lf442: db 56h,33h,2eh,30h ;,75h,81h,07h,90h,7eh,08h,0e4h,78h,05h ;f442h code area
Lf446: mov sp,#07h ;program start
mov dptr,#7e08h
clr a
mov r0,#05h
LF44F: lcall writebyte
INC DPTR
DJNZ R0, LF44F
MOV A, #00H
lcall writebyte
INC DPTR
MOV A, #00H
lcall writebyte
INC DPTR
MOV A, #07H
lcall writebyte
INC DPTR
CLR A
lcall writebyte
MOV 23H, A
INC A
MOV 24H, A
MOV DPTR, #7E00H
MOV R1, #00H
MOV R0, #0A5H
LCALL LF4C3
MOV R0, #33H
LCALL LF4C3
MOV R0, #0CCH
LCALL LF4C3
MOV A, R1
JZ LF48D
MOV R2, #0BH
MOV R5, #00H
LCALL LFB83
CLR A
MOV 30H, A
MOV 31H, A
MOV DPTR, #7E07H
lcall writebyte
LF48D: LCALL LF2A0
LF490: LCALL LF890
CJNE A, #11H, LF4A0
MOV A, 23H
LCALL LF884
CPL A
MOV 23H, A
SJMP LF490
LF4A0: CJNE A, #01H, LF4AA
MOV A, 24H
LCALL LF884
SJMP LF490
LF4AA: LCALL LF4AF
SJMP LF490
LF4AF: MOV 25H, A
DEC A
DEC A
ANL A, #0EH
MOV DPTR, #Lf8c0
MOV R7, A
MOVC A, @A+DPTR
XCH A, R7
INC DPTR
MOVC A, @A+DPTR
MOV DPH, R7
MOV DPL, A
CLR A
JMP @A+DPTR
LF4C3: CLR A
MOVC A, @A+DPTR
XRL A, R0
ORL A, R1
MOV R1, A
MOV A, R0
lcall writebyte
INC DPTR
RET
LF4CC: MOV A, #06H
LCALL LF884
MOV A, 28H
LCALL LF884
MOV DPTR, #7E03H
MOV R0, #04H
LF4DB: CLR A
MOVC A, @A+DPTR
LCALL LF884
INC DPTR
DJNZ R0, LF4DB
MOV A, #04H
LCALL LF884
RET
MOV 28H, #00H
LCALL LF89C
MOV 26H, A
JZ LF51A
LCALL LF89C
MOV DPH, A
LCALL LF89C
MOV DPL, A
LCALL LF89C
MOV 27H, A
LF502: LCALL LF89C
LCALL LF8D0
INC DPTR
DJNZ 27H, LF502
LF50C: LCALL LF89C
MOV A, 25H
JZ LF516
MOV 28H, #02H
LF516: LCALL LF4CC
RET
LF51A: LCALL LF89C
MOV DPTR, #7E0DH
lcall writebyte
INC DPTR
LCALL LF89C
lcall writebyte
LCALL LF89C
SJMP LF50C
MOV 28H, #00H
LCALL LF89C
MOV 26H, A
LCALL LF89C
MOV DPH, A
LCALL LF89C
MOV DPL, A
LCALL LF89C
MOV 27H, A
LCALL LF89C
MOV A, 25H
JZ LF550
MOV 28H, #02H
LF54C: LCALL LF4CC
RET
LF550: MOV 25H, #00H
MOV A, #02H
LCALL LF8B0
MOV A, 26H
JZ LF56E
LF55C: LCALL LF96B
LCALL LF8B0
INC DPTR
DJNZ 27H, LF55C
LF566: CLR A
CLR C
SUBB A, 25H
LCALL LF8B0
RET
LF56E: MOV DPTR, #7E0DH
CLR A
MOVC A, @A+DPTR
LCALL LF8B0
INC DPTR
CLR A
MOVC A, @A+DPTR
LCALL LF8B0
SJMP LF566
MOV 28H, #00H
LCALL LF89C
MOV 29H, A
LCALL LF89C
MOV 27H, A
LCALL LF89C
MOV 26H, A
LCALL LF89C
MOV DPH, A
LCALL LF89C
MOV DPL, A
LCALL LF89C
MOV A, 25H
JZ LF5A8
MOV 28H, #02H
LCALL LF4CC
RET
LF5A8: CLR A
CJNE A, 29H, LF5B2
LCALL LFB52
LJMP LF4CC
LF5B2: INC A
CJNE A, 29H, LF5BC
LCALL LFB76
LJMP LF4CC
LF5BC: INC A
CJNE A, 29H, LF5C6
LCALL LFB72
LJMP LF4CC
LF5C6: INC A
CJNE A, 29H, LF5D0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -