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

📄 isp_serve.asm

📁 一个非常好的微处理器烧录EEPROM的C++ 原代码项目文件,直接可用,而且还是一拖八的, 成果奉献
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		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 + -