< >这是我去年写的sst89c58下载器,使用keilc51的debug调试环境下载。
将本程序编译后写入sst89c58,并编程为remap 4kbytes。该芯片即有了keil环境在线下载功能。
当p1.0拉低时,启动时进入下载程序,进入下载程序后将会自动删除block0。p1.0高电平时进入用户程序。
进入下载程序后,可以通过串口和keil的仿真环境连通,波特率自动调节。
选择load HEX文件,即可将程序下载到sst89c58的低端32keeprom中。除了7e00-7fffh被占用了。
</P>;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
|