📄 isp_serve.asm
字号:
;--------------------------------------------------------
; ISP Serve program
; Description:
;
; Use it only at UART mode and needn`t any key input.
; for dvd937 mcu is sm5964,it modify by original ver3.0a
; the entry addr is: 0xfc00
; ------------------write by laijun---------------------
; -----------------------------------Ver1.00--2005.08.19
; ------------------------------------------------------
; Add follow 2 function at the new version
; 1: Use Eeprom(AT24C512) direct write into sm5964 flash
; 2: Use Eeprom(AT24C512) direct read from sm5964 flash
; Above 2 function support PnP technology,and the iic
; wire use the UART 2 wire,it needn`t change any hardware
; ------------------------------------------------------
; **NOTE: At the version add a VFD display(PT6318)***
; If you want to add your display program,please modify
; every part about display subprogram carefully,it is de
; -fined by macro,including font and font index,memory,
; send subprogam,display subprogram,etc.
; ------------------------------------------------------
; the entry addr is: 0xf800
; ------------------added by laijun---------------------
; -----------------------------------Ver1.10--2005.09.22
;--------------------------------------------------------
#include "sm5964.h"
#include "DVD7390Ver.h"
;=======================================================
;=======================================================
;=======================================================
;Define Display type
DISP_NONE EQU 00H
DISP_VFD EQU 01H
DISP_LCD EQU 02H
DISP_TFT EQU 03H
DISP_DVD EQU 04H
;DISPLAY EQU DISP_VFD
DISPLAY EQU DISP_DVD
;=======================================================
;--------------------------------------------------------
IF DISPLAY==DISP_VFD
;Define VFD Driver IC
VFD_DRIVER_PT6318 EQU 00H
DISP_VFD_DRIVER EQU VFD_DRIVER_PT6318
;--------------------------------------------------------
;Define VFD Screen type
VFD_SCREEN_GTD_1007A EQU 00H
DISP_VFD_SCREEN EQU VFD_SCREEN_GTD_1007A
;--------------------------------------------------------
ENDIF
;=======================================================
IF DISPLAY==DISP_LCD
;add the lcd part
ENDIF
;=======================================================
IF DISPLAY==DISP_TFT
;add the tft part
ENDIF
;=======================================================
IF DISPLAY==DISP_DVD
;
ENDIF
;=======================================================
;--------------------------------------------------------
;Don`t change it
;ISP_MODE
ISP_MODE_UART EQU 00H
ISP_MODE_EEWRITE EQU 01H
ISP_MODE_EEREAD EQU 02H
;define Register
Iic_Type EQU 2DH
Iic_Addr EQU 2EH
Isp_Mode EQU 2FH
Function_Statu EQU 020H^0
Rom_Type EQU 020H^1
Iic_Ack_Bit EQU 020H^2
Iic_Error_Flag EQU 020H^3
Eeprom_Type EQU 020H^4
Eeprom_WR_Flag EQU 020H^5
Verify_Sum EQU 030H
Pgstr_Adr EQU 031H
Pgend_Adr EQU 032H
Iic_Send_Buffer EQU 033H
Iic_Rec_Buffer EQU 034H
Iic_SubAddr_H EQU 035H
Iic_SubAddr_L EQU 036H
Iic_Number EQU 037H
Temp EQU 038H
Temp1 EQU 039H
Temp2 EQU 03AH
Loop1 EQU 070H
Loop2 EQU 071H
Loop3 EQU 072H
Loop4 EQU 073H
Loop5 EQU 074H
Loop6 EQU 075H
Iic_Buffer EQU 00H ;don`t modify it
;--------------------------------------------------------
;added follow memory define
IF DISPLAY==DISP_VFD
Vfd_Send_Buffer EQU 03BH
IF DISP_VFD_DRIVER==VFD_DRIVER_PT6318
IF DISP_VFD_SCREEN==VFD_SCREEN_GTD_1007A
Vfd_Mem_Addr_0L EQU 03CH
Vfd_Mem_Addr_0H EQU 03DH
Vfd_Mem_Addr_1L EQU 03EH
Vfd_Mem_Addr_1H EQU 03FH
Vfd_Mem_Addr_2L EQU 040H
Vfd_Mem_Addr_2H EQU 041H
Vfd_Mem_Addr_3L EQU 042H
Vfd_Mem_Addr_3H EQU 043H
Vfd_Mem_Addr_4L EQU 044H
Vfd_Mem_Addr_4H EQU 045H
Vfd_Mem_Addr_5L EQU 046H
Vfd_Mem_Addr_5H EQU 047H
Vfd_Mem_Addr_6L EQU 048H
Vfd_Mem_Addr_6H EQU 049H
Vfd_Mem_Addr_7L EQU 04AH
Vfd_Mem_Addr_7H EQU 04BH
Vfd_Mem_Addr_8L EQU 04CH
Vfd_Mem_Addr_8H EQU 04DH
Vfd_Mem_Addr_9L EQU 04EH
Vfd_Mem_Addr_9H EQU 04FH
Vfd_Mem_1 EQU 050H
Vfd_Mem_2 EQU 051H
Vfd_Mem_3 EQU 052H
Vfd_Mem_4 EQU 053H
Vfd_Mem_5 EQU 054H
Vfd_Mem_6 EQU 055H
Vfd_Mem_7 EQU 056H
Vfd_Mem_8 EQU 057H
Vfd_Mem_9 EQU 058H
ENDIF
ENDIF
ENDIF
IF DISPLAY==DISP_DVD
Xpos EQU 03BH
Ypos EQU 03CH
Color EQU 03DH
ENDIF
;--------------------------------------------------------
;Don`t change it
Percent EQU 059H
Eeprom_Addr_L EQU 05AH
Eeprom_Addr_H EQU 05BH
Eeprom_Func EQU 05CH
;--------------------------------------------------------
IIC_ADDR_EEPROM EQU 0A0H
IIC_ADDR_DVD EQU 50H
;--------------------------------------------------------
IF DISPLAY<>DISP_NONE
CH_0 EQU 00H ;//"0"
CH_1 EQU 01H ;//"1"
CH_2 EQU 02H ;//"2"
CH_3 EQU 03H ;//"3"
CH_4 EQU 04H ;//"4"
CH_5 EQU 05H ;//"5"
CH_6 EQU 06H ;//"6"
CH_7 EQU 07H ;//"7"
CH_8 EQU 08H ;//"8"
CH_9 EQU 09H ;//"9"
CH_A EQU 0AH ;//"A"
CH_B EQU 0BH ;//"B"
CH_C EQU 0CH ;//"C"
CH_D EQU 0DH ;//"D"
CH_E EQU 0EH ;//"E"
CH_F EQU 0FH ;//"F"
CH_G EQU 10H ;//"G"
CH_H EQU 11H ;//"H"
CH_I EQU 12H ;//"I"
CH_J EQU 13H ;//"J"
CH_K EQU 14H ;//"K"
CH_L EQU 15H ;//"L"
CH_M EQU 16H ;//"M"
CH_N EQU 17H ;//"N"
CH_O EQU 18H ;//"O"
CH_P EQU 19H ;//"P"
CH_Q EQU 1AH ;//"Q"
CH_R EQU 1BH ;//"R"
CH_S EQU 1CH ;//"S"
CH_T EQU 1DH ;//"T"
CH_U EQU 1EH ;//"U"
CH_V EQU 1FH ;//"V"
CH_W EQU 20H ;//"W"
CH_X EQU 21H ;//"X"
CH_Y EQU 22H ;//"Y"
CH_Z EQU 23H ;//"Z"
CH_ADD EQU 24H ;//"+"
CH_SUB EQU 25H ;//"-"
CH_LINE EQU 26H ;//"under line"
CH_NULL EQU 35H ;//NULL
ENDIF
IF DISPLAY==DISP_DVD
DVD_CMD_SETADDR EQU 0x01
DVD_CMD_SETCOLOR EQU 0x02
DVD_CMD_SETDATA EQU 0x03
DVD_CMD_CLRDISP EQU 0x04
;define COLOR
BLACK EQU 0x00
BLUE EQU 0x01
GREEN EQU 0x02
CYAN EQU 0x03
RED EQU 0x04
MAGENT EQU 0x05
YELLOW EQU 0x06
WHITE EQU 0x07
ENDIF
;------------------------------------------------------
; Flash ISP command table
;------------------------------------------------------
;Don`t change it
CHIP_ERASE EQU 00H
PROGRAM_CODE EQU 01H
PAGE_ERASE_CODE EQU 02H
PROTECT EQU 03H
PAGE_ERASE_DATA EQU 04H
PROGRAM_DATA EQU 05H
MCU_RESET EQU 06H
VERIFY EQU 07H
READ EQU 08H
;------------------------------------------------------
; I/O PORT DEFINE
;------------------------------------------------------
sbit Pin_Sda_IIC=P3^1
sbit Pin_Scl_IIC=P3^0
IF DISPLAY==DISP_VFD
sbit Pin_Data_VFD=P1^2
sbit Pin_Clk_VFD=P1^3
sbit Pin_Stb_VFD=P1^4
ENDIF
IF DISPLAY==DISP_LCD
;Add LCD I/O part
ENDIF
IF DISPLAY==DISP_TFT
;Add TFT I/O part
ENDIF
IF DISPLAY==DISP_DVD
sbit Pin_Sda_DVD=P0^1
sbit Pin_Scl_DVD=P0^2
sbit Pin_Stb_DVD=P0^3
ENDIF
;------------------------------------------------------
; IIC_TYPE DEFINE
;------------------------------------------------------
IIC_EEPROM EQU 00H
IIC_DVD EQU 01H
;------------------------------------------------------
;Don`t change it
ISP_OK EQU 0AAH
ISP_FAIL EQU 57H
;------------------------------------------------------
IF DISPLAY==DISP_VFD
FONT_VFD EQU 0FF90H
ENDIF
IF DISPLAY==DISP_DVD
STRING_TITLE EQU 0FF40H
STRING_AUTHOR EQU 0FF5FH
STRING_INSERT EQU 0FF71H
STRING_REMOVEIC EQU 0FF84H
STRING_TYPE EQU 0FF97H
STRING_ERROR EQU 0FF9FH
STRING_ERASE EQU 0FFA8H
STRING_WRITE EQU 0FFB3H
STRING_READ EQU 0FFBEH
STRING_VERIFY EQU 0FFC8H
STRING_PROTECT EQU 0FFD4H
STRING_RESTART EQU 0FFE1H
STRING_SUCCEED EQU 0FFEBH
STRING_OK EQU 0FFF6H
ENDIF
;=======================================================
;=======================================================
; ISP_SERVE SOFTWARE
;=======================================================
;------------------------------------------------------
ORG IspServerAddr ; if you want change it
LJMP Chek_Isp_mode ;--please enter dvd937ver.h
;--modify Isp_Server_AddrL
;--modify Isp_Server_AddrH
;------------------------------------------------------
; DELAY PROGRAM
;------------------------------------------------------
Delay5us:
NOP
RET
Delay10us:
CALL Delay5us
CALL Delay5us
RET
Delay05s:
MOV R5,#19H
Delay05s_1:
MOV R6,#64H
Delay05s_2:
MOV R7,#64H
DJNZ R7,$
DJNZ R6,Delay05s_2
DJNZ R5,Delay05s_1
RET
Delay5ms:
MOV R6,#19H
Delay5ms_1:
MOV R7,#64H
DJNZ R7,$
DJNZ R6,Delay5ms_1
RET
;------------------------------------------------------
; DELAY PROGRAM TO HERE IS OVER
;------------------------------------------------------
;IIC part:
;------------------------------------------------------
; IIC PROGRAM
;------------------------------------------------------
SetIic_Addr:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,SIA1
MOV Iic_Addr,#IIC_ADDR_EEPROM
RET
SIA1: MOV Iic_Addr,#IIC_ADDR_DVD
RET
;------------------------------------------------------
SetbSda:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,SSD1
SETB Pin_Sda_IIC
RET
SSD1: CJNE A,#IIC_DVD,SSD2
SETB Pin_Sda_DVD
SSD2: RET
;------------------------------------------------------
ClrSda:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,CSD1
CLR Pin_Sda_IIC
RET
CSD1: CJNE A,#IIC_DVD,CSD2
CLR Pin_Sda_DVD
CSD2: RET
;------------------------------------------------------
SetbScl:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,SSC1
SETB Pin_Scl_IIC
RET
SSC1: CJNE A,#IIC_DVD,SSC2
SETB Pin_Scl_DVD
SSC2: RET
;------------------------------------------------------
ClrScl:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,CSC1
CLR Pin_Scl_IIC
RET
CSC1: CJNE A,#IIC_DVD,CSC2
CLR Pin_Scl_DVD
CSC2: RET
;------------------------------------------------------
InSda:
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,ISD1
JNB Pin_Sda_IIC,ISD_End
SETB C
RET
ISD1: JNB Pin_Sda_DVD,ISD_End
SETB C
RET
ISD_End: CLR C
RET
;------------------------------------------------------
Iic_Start:
CALL SetbSda
CALL SetbScl
CALL Delay10us
CALL ClrSda
CALL ClrScl
RET
;------------------------------------------------------
Iic_Stop:
CALL SetbScl
CALL Delay10us
CALL SetbSda
RET
;------------------------------------------------------
Iic_Ack:
JB Iic_Ack_Bit,Ack_High
CALL ClrSda
JMP Ack_Wait
Ack_High:
CALL SetbSda
Ack_Wait:
CALL SetbScl
CALL Delay5us
CALL ClrScl
CALL ClrSda
RET
;------------------------------------------------------
IIC_SendByte:
CLR Iic_Error_Flag
MOV R7,#08H
MOV R6,#80H
IIC_SendAga:
MOV A,Iic_Send_Buffer
ANL A,R6
JZ IIC_Send_Zero
CALL SetbSda
JMP IIC_Send_Wait
IIC_Send_Zero:
CALL ClrSda
IIC_Send_Wait:
CALL Delay5us
CALL SetbScl
CALL Delay5us
CALL ClrScl
MOV A,R6
RR A
MOV R6,A
DJNZ R7,IIC_SendAga
CALL SetbSda
CALL SetbScl
NOP
NOP
CALL InSda
JNC IIC_Send_End
SETB Iic_Error_Flag
IIC_Send_End: CALL ClrScl
CALL ClrSda
RET
;------------------------------------------------------
IIC_ReceiveByte:
MOV Iic_Rec_Buffer,#00H
MOV R7,#08H
MOV R6,#80H
CALL SetbSda
IIC_Rec_Aga:
CALL ClrScl
CALL Delay5us
CALL SetbScl
CALL Delay5us
CALL InSda
JNC IIC_Rec_Next
MOV A,R6
ORL Iic_Rec_Buffer,A
IIC_Rec_Next:
MOV A,R6
RR A
MOV R6,A
DJNZ R7,IIC_Rec_Aga
CALL ClrScl
CALL ClrSda
RET
;------------------------------------------------------
IIC_Write:
CALL Iic_Start
MOV Iic_Send_Buffer,Iic_Addr
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Write_End
MOV A,Iic_Type
CJNE A,#IIC_EEPROM,IIC_Write_DVD
MOV Iic_Send_Buffer,Iic_SubAddr_H
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Write_End
IIC_Write_DVD:
MOV Iic_Send_Buffer,Iic_SubAddr_L
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Write_End
MOV DPL,#00H
MOV DPH,#00H
MOV R5,Iic_Number
CJNE R5,#00H,IIC_Write_Next
JMP IIC_Write_End
IIC_Write_Next:
MOVX A,@DPTR
MOV Iic_Send_Buffer,A
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Write_End
INC DPL
DJNZ R5,IIC_Write_Next
IIC_Write_End:
CALL Iic_Stop
CALL Delay5ms
RET
;------------------------------------------------------
IIC_Read:
CALL Iic_Start
MOV Iic_Send_Buffer,Iic_Addr
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Read_End
MOV Iic_Send_Buffer,Iic_SubAddr_H
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Read_End
MOV Iic_Send_Buffer,Iic_SubAddr_L
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Read_End
CALL Iic_Start
MOV Iic_Send_Buffer,#0A1H
CALL IIC_SendByte
JB Iic_Error_Flag,IIC_Read_End
MOV DPH,#00H
MOV DPL,#00H
MOV R5,Iic_Number
IIC_Read_Next:
CALL IIC_ReceiveByte
CJNE R5,#01,IIC_Read_1
SETB Iic_Ack_Bit
JMP IIC_Read_2
IIC_Read_1:
CLR Iic_Ack_Bit
IIC_Read_2:
CALL Iic_Ack
MOV A,Iic_Rec_Buffer
MOVX @DPTR,A
INC DPL
DJNZ R5,IIC_Read_Next
IIC_Read_End:
CALL Iic_Stop
RET
;------------------------------------------------------
Stop_Eeprom:
MOV Iic_Type,#IIC_EEPROM
CALL SetIic_Addr
RET
Write_Eeprom:
MOV Iic_Type,#IIC_EEPROM
CALL SetIic_Addr
CALL IIC_Write
RET
Read_Eeprom:
MOV Iic_Type,#IIC_EEPROM
CALL SetIic_Addr
CALL IIC_Read
RET
IF DISPLAY==DISP_DVD
Write_DVD:
JNB Pin_Stb_DVD,$
MOV Iic_Type,#IIC_DVD
CALL SetIic_Addr
CALL IIC_Write
RET
ENDIF
;------------------------------------------------------
; IIC TO HERE IS OVER
;------------------------------------------------------
;Display part:
;------------------------------------------------------
; DISPLAY PROGRAM
;------------------------------------------------------
;Display Driver
IF DISPLAY==DISP_VFD
VFD_SendByte:
IF DISP_VFD_DRIVER==VFD_DRIVER_PT6318
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -