📄 isp_serve.asm
字号:
CALL Stop_Eeprom
MOV Iic_SubAddr_H,#00H
MOV Iic_SubAddr_L,#30H
MOV Iic_Number,#10H
CALL Read_Eeprom
JNB Iic_Error_Flag,Chek_Type
RET
Chek_Type:
MOV Iic_Buffer,#00H
CALL GetMem
SUBB A,#'M'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'o'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'d'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'e'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'l'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#':'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'D'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'V'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'D'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'7'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'3'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'9'
JNZ Chek_Error
INC Iic_Buffer
CALL GetMem
SUBB A,#'0'
JNZ Chek_Error
RET
Chek_Error:
SETB Eeprom_Type
RET
;======================================================
Chek_Isp_mode:
MOV SCONF,#0EH
MOV WDTC,#00H
POP ACC
MOV Isp_Mode,A
;------------------------------------------------------
;Add inital part
;actually,if your main program has seted it,it needn`t
;except set TFT windows.
;------------------------------------------------------
MOV A,Isp_Mode
CJNE A,#ISP_MODE_UART,Chek_Isp_1
LJMP Uart_Isp
Chek_Isp_1:
CJNE A,#ISP_MODE_EEWRITE,Chek_Isp_2
IF DISPLAY==DISP_DVD
CALL Disp_Title
ENDIF
AJMP Eeprom_Isp
Chek_Isp_2:
CJNE A,#ISP_MODE_EEREAD,Chek_Isp_3
IF DISPLAY==DISP_DVD
CALL Disp_Title
ENDIF
AJMP Eeprom_Read
Chek_Isp_3:
RET
;======================================================
Eeprom_Read:
CLR Eeprom_WR_Flag
CALL Chek_Model
JNB Iic_Error_Flag,Eeprom_Read_1
CALL OUT_Insert_Str
JMP Eeprom_Read
Eeprom_Read_1:
CALL OUT_Read_Str
MOV Percent,#00H
CALL OUT_Percent
MOV Eeprom_Addr_L,#00H
MOV Eeprom_Addr_H,#00H
Eeprom_Read_3:
MOV Temp,#02H
Eeprom_Read_4:
MOV Iic_Buffer,#00H
MOV R1,#80H
MOV DPH,Eeprom_Addr_H
MOV DPL,Eeprom_Addr_L
Eeprom_Read_5:
CLR A
MOVC A,@A+DPTR
MOV Temp1,DPL
MOV Temp2,DPH
MOV DPL,Iic_Buffer
MOV DPH,#00H
MOVX @DPTR,A
MOV DPL,Temp1
MOV DPH,Temp2
INC DPTR
INC Iic_Buffer
DJNZ R1,Eeprom_Read_5
MOV Iic_SubAddr_H,Eeprom_Addr_H
MOV Iic_SubAddr_L,Eeprom_Addr_L
MOV Iic_Number,#80H
CALL Write_Eeprom
JB Iic_Error_Flag,Eeprom_Read
MOV A,Eeprom_Addr_L
ADD A,#80H
MOV Eeprom_Addr_L,A
DJNZ Temp,Eeprom_Read_4
INC Eeprom_Addr_H
MOV A,Eeprom_Addr_H
CJNE A,#0F0H,Eeprom_Read_6
JMP Eeprom_Read_7
Eeprom_Read_6:
MOV B,#0CH
DIV AB
MOV Temp,B
MOV B,#05H
MUL AB
XCH A,Temp
MOV B,#0AH
MUL AB
MOV B,#18H
DIV AB
ADD A,Temp
MOV Percent,A
CALL OUT_Percent
JMP Eeprom_Read_3
Eeprom_Read_7:
CALL OUT_Ok_Str
CALL Delay05s
CALL OUT_Verify_Str
MOV Eeprom_Func,#VERIFY
AJMP Eeprom_Isp_Func
RET
;======================================================
;---------------Eeprom_Isp PROGRAM---------------------
Eeprom_Isp:
SETB Eeprom_WR_Flag
CALL Chek_Model
JNB Iic_Error_Flag,Eeprom_Isp_1
CALL OUT_Insert_Str
JMP Eeprom_Isp
Eeprom_Isp_1:
JNB Eeprom_Type,Eeprom_Isp_2
CALL OUT_Type_Error
JMP Eeprom_Isp
Eeprom_Isp_2:
CALL OUT_Erase_Str
MOV FCMD,#83H
MOV FCMD,#83H
CALL Delay05s
CALL OUT_Ok_Str
CALL Delay05s
MOV Eeprom_Func,#PROGRAM_CODE
CALL OUT_Program_Str
Eeprom_Isp_Func:
MOV Percent,#00H
CALL OUT_Percent
MOV Eeprom_Addr_L,#00H
MOV Eeprom_Addr_H,#00H
Eeprom_Isp_3:
MOV Iic_SubAddr_H,Eeprom_Addr_H
MOV Iic_SubAddr_L,Eeprom_Addr_L
MOV Iic_Number,#80H
CALL Read_Eeprom
JB Iic_Error_Flag,Eeprom_Chek_Type
MOV Iic_Buffer,#00H
MOV R1,#80H
Eeprom_Isp_4:
MOV A,Eeprom_Func
CJNE A,#PROGRAM_CODE,Eeprom_Isp_Verify
MOV FADDRH,Eeprom_Addr_H
MOV FADDRL,Eeprom_Addr_L
CALL GetMem
MOV FDATA,A
MOV FCMD,#80H
JMP Eeprom_Isp_Next
Eeprom_Isp_Verify:
MOV DPH,Eeprom_Addr_H
MOV DPL,Eeprom_Addr_L
CLR A
MOVC A,@A+DPTR
MOV Temp,A
CALL GetMem
XRL A,Temp
JNZ Eeprom_Verify_Error
Eeprom_Isp_Next:
INC Iic_Buffer
INC Eeprom_Addr_L
DJNZ R1,Eeprom_Isp_4
MOV A,Eeprom_Addr_L
JNZ Eeprom_Isp_3
INC Eeprom_Addr_H
MOV A,Eeprom_Addr_H
CJNE A,#0F0H,Eeprom_Isp_5
JMP Eeprom_Isp_6
Eeprom_Isp_5:
MOV B,#0CH
DIV AB
MOV Temp,B
MOV B,#05H
MUL AB
XCH A,Temp
MOV B,#0AH
MUL AB
MOV B,#18H
DIV AB
ADD A,Temp
MOV Percent,A
CALL OUT_Percent
JMP Eeprom_Isp_3
Eeprom_Isp_6:
MOV A,Eeprom_Func
CJNE A,#PROGRAM_CODE,Eeprom_Isp_7
CALL OUT_Ok_Str
CALL Delay05s
MOV Eeprom_Func,#VERIFY
CALL OUT_Verify_Str
AJMP Eeprom_Isp_Func
Eeprom_Verify_Error:
CALL OUT_Verify_Error
Eeprom_Chek_Move:
CALL Chek_Model
JNB Iic_Error_Flag,Eeprom_Chek_Move
Eeprom_Chek_Type:
JB Eeprom_WR_Flag,Eeprom_W_PRG
AJMP Eeprom_Read
Eeprom_W_PRG:
AJMP Eeprom_Isp
Eeprom_Isp_7:
CALL OUT_Ok_Str
CALL Delay05s
CALL OUT_Protect_Str
MOV FCMD,#81H
CALL Delay05s
CALL OUT_Ok_Str
CALL Delay05s
MOV Percent,#0AH
Eeprom_Isp_8:
CALL Chek_Model
JB Iic_Error_Flag,Eeprom_Isp_9
CALL OUT_Move_IC
CALL OUT_Percent
CALL Delay05s
CALL Delay05s
DEC Percent
MOV A,Percent
JNZ Eeprom_Isp_8
Eeprom_Isp_9:
CALL OUT_Restart_Str
CALL Delay05s
LJMP ISP_Restart
;EEPROM ISP PROGRAM TO HERE IS OVER
;=======================================================
;=======================================================
; UART ISP PROGRAM
;=======================================================
Uart_Isp:
POP ACC
MOV Temp1,A
CALL OUT_Isp_Str
MOV DPL,Temp1
MOV DPL,A
JMP Cmd_Exec
;------------------------------------------------------
ISP_Repeat:
MOV DPTR,#0000H
;------------------------------------------------------
Receive_Cmd:
JNB RI,$
CLR RI
MOV A,SBUF
MOVX @DPTR,A
;---------------Chek-end-data--------------------------
CJNE A,#0AAH,Receive_Next
DEC DPL
MOVX A,@DPTR
CJNE A,#55H,Receive_Continue
JMP Cmd_Exec
Receive_Continue:
INC DPTR
Receive_Next:
INC DPTR
JMP Receive_Cmd
Cmd_Exec:
MOV Verify_Sum,#ISP_OK
SETB Function_Statu
MOV R5,DPL
MOV DPTR,#0000H
MOVX A,@DPTR
;---------------Chek-command-type-----------------------
Cmd0:
CJNE A,#CHIP_ERASE,Cmd1
CALL ISP_ChipErase
JMP ISP_Repeat
Cmd1:
CLR Rom_Type
CJNE A,#PROGRAM_CODE,Cmd2
CALL ISP_Program
JMP ISP_Repeat
Cmd2:
CJNE A,#PAGE_ERASE_CODE,Cmd3
CALL ISP_PageErase
JMP ISP_Repeat
Cmd3:
CJNE A,#PROTECT,Cmd4
CALL ISP_Protect
JMP ISP_Repeat
Cmd4:
SETB Rom_Type
CJNE A,#PAGE_ERASE_DATA,Cmd5
CALL ISP_PageErase
JMP ISP_Repeat
Cmd5:
CJNE A,#PROGRAM_DATA,Cmd6
CALL ISP_Program
JMP ISP_Repeat
Cmd6:
CJNE A,#MCU_RESET,Go_Fail
CALL ISP_McuReset
JMP ISP_Repeat
Go_Fail:
CALL Send_ToPC
JMP ISP_Repeat
;=======================================================
;Cmd0: ISP ChipErase
;-------------------------------------------------------
ISP_ChipErase:
CJNE R5,#01H,ChipErase_Quit
MOV FCMD,#83H
MOV FCMD,#83H
CLR Function_Statu
ChipErase_Quit:
CALL Send_ToPC
RET
;-ISP ChipErase part to here is over--------------------
;=======================================================
;Cmd1: ISP Program(Include Code and Data)
;-------------------------------------------------------
ISP_Program:
CJNE R5,#05H,Prg_Quit
;----------check start address and end address----------
MOV DPTR,#0001H
MOVX A,@DPTR
MOV FADDRH,A
MOV DPTR,#0003H
MOVX A,@DPTR
MOV Pgend_Adr,A
INC A
INC A
CJNE A,FADDRH,Prg_Quit
;----------send ISP_OK to pc and init flash addr--------
MOV SBUF,#ISP_OK
MOV Loop1,#1AH
Wait11: MOV Loop2,#0FFH
Wait21: MOV Loop3,#0FFH
Wait31: JBC TI,Send_ok1
DJNZ Loop3,Wait31
DJNZ Loop2,Wait21
DJNZ Loop1,Wait11
RET
Send_ok1:
;MOV SCONF,#0EH
MOV Pgstr_Adr,FADDRH
MOV FADDRL,#0FFH
MOV Verify_Sum,#00H
;----------start received data and load data to SFR-----
Start_Prg:
MOV Loop1,#1AH
Wait1: MOV Loop2,#0FFH
Wait2: MOV Loop3,#0FFH
Wait3: JBC RI,Recive_ok
DJNZ Loop3,Wait3
DJNZ Loop2,Wait2
DJNZ Loop1,Wait1
RET
Recive_ok:
MOV FDATA,SBUF
;----------Write data and read verify sum---------------
;WriteAndRead:
MOV DPH,FADDRH
MOV DPL,FADDRL
JNB Rom_Type,Code_Type
;Data_Type:
MOV FCMD,#0A0H
MOVX A,@DPTR
JMP Add_Sum
Code_Type:
MOV FCMD,#80H
CLR A
MOVC A,@A+DPTR
;----------add verify sum------------------------------
Add_Sum:
ADD A,Verify_Sum
MOV Verify_Sum,A
;----------dec address----------------------------------
DEC FADDRL
MOV A,FADDRL
CJNE A,#0FFH,Start_Prg
DEC FADDRH
MOV A,FADDRH
CJNE A,Pgend_Adr,Start_Prg
CLR Function_Statu
Prg_Quit:
CALL Send_ToPC
RET
;-ISP program part to here is over----------------------
;=======================================================
;Cmd2: ISP PageErase(Include Code and Data)
;-------------------------------------------------------
ISP_PageErase:
CJNE R5,#03H,PageErase_Quit
MOV DPTR,#0001H
MOVX A,@DPTR
MOV FADDRH,A
MOV FADDRL,#00H
JB Rom_Type,Data_PageErase
;---------------Code_PageErase--------------------------
MOV FCMD,#82H
MOV FCMD,#82H
JMP PageErase_Ok
Data_PageErase:
MOV FCMD,#0A2H
MOV FCMD,#0A2H
PageErase_Ok:
CLR Function_Statu
PageErase_Quit:
CALL Send_ToPC
RET
;-ISP PageErase part to here is over--------------------
;=======================================================
;Cmd3: ISP Protect
;-------------------------------------------------------
ISP_Protect:
CJNE R5,#02H,Protect_Quit
MOV FCMD,#81H
CLR Function_Statu
Protect_Quit:
CALL Send_ToPC
RET
;-ISP Protect part to here is over----------------------
;=======================================================
;Cmd4: ISP McuReset
;-------------------------------------------------------
ISP_McuReset:
CJNE R5,#03H,McuReset_Quit
ISP_Restart:
MOV WDTKEY,#1EH
MOV WDTKEY,#0E1H
MOV WDTC,#0a0H
MOV WDTKEY,#0E1H
MOV WDTKEY,#1EH
JMP $
McuReset_Quit:
CALL Send_ToPC
RET
;-ISP McuReset part to here is over---------------------
;=======================================================
;Public Part: ISP Send_ToPC
;-------------------------------------------------------
Send_ToPC:
JNB Function_Statu,Send_Ok
MOV Verify_Sum,#ISP_FAIL
Send_Ok:
MOV SBUF,Verify_Sum
MOV Loop1,#1AH
Wait12: MOV Loop2,#0FFH
Wait22: MOV Loop3,#0FFH
Wait32: JBC TI,Send_ok2
DJNZ Loop3,Wait32
DJNZ Loop2,Wait22
DJNZ Loop1,Wait12
Send_ok2:
RET
;-ISP Public Part to here is over-----------------------
IF DISPLAY==DISP_VFD
IF DISP_VFD_DRIVER==VFD_DRIVER_PT6318
IF DISP_VFD_SCREEN==VFD_SCREEN_GTD_1007A
ORG FONT_VFD
; 0 1 2 3 4 5 6 7 8 9
DW 620EH,2004H,4386H,6186H,218CH,618AH,638AH,2006H,638EH,618EH
; A B C D E F G H I J
DW 238EH,6388H,420AH,6384H,438AH,038AH,618EH,238CH,4822H,6004H
; K L M N O P Q R S T
DW 1348H,4208H,225CH,321CH,620EH,038EH,218EH,138EH,618AH,0822H
; U V W X Y Z + - _
DW 620CH,0648H,360CH,1450H,618CH,4442H,09A0H,0180H,4000H
; a b c d e f g h j k
DW 0002H,0004H,2000H,4000H,0200H,0008H,0100H,0010H,0020H,0040H
; m r q n NULL
DW 0080H,1000H,0800H,0400H,0000H
ENDIF
ENDIF
ENDIF
IF DISPLAY==DISP_DVD
ORG STRING_TITLE;Length:30+1
DB "DVD7390 ISP(SM5964) Ver:1.20\"
ORG STRING_AUTHOR;Length:17+1
DB "Write by LaiJun\"
ORG STRING_INSERT;Length:18+1
DB "Please insert IC\"
ORG STRING_REMOVEIC;Length:18+1
DB "Please remove IC\"
ORG STRING_TYPE;Length:7+1
DB "Type \"
ORG STRING_ERROR;Length:8+1
DB "error!\"
ORG STRING_ERASE;Length:10+1
DB "Erase...\"
ORG STRING_WRITE;Length:10+1
DB "Write...\"
ORG STRING_READ;Length:9+1
DB "Read...\"
ORG STRING_VERIFY;Length:11+1
DB "Verify...\"
ORG STRING_PROTECT;Length:12+1
DB "Protect...\"
ORG STRING_RESTART;Length:9+1
DB "Restart\"
ORG STRING_SUCCEED;Length:10+1
DB "Succeed!\"
ORG STRING_OK;Length:5
DB "OK \"
ENDIF
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -