📄 main.asm
字号:
MOV ISPC, #0X81
MOV ?Debug_Str?BYTE+0, #HIGH(Str_Success)
MOV ?Debug_Str?BYTE+1, #LOW(Str_Success)
LCALL Debug_Str
Protect_Ret:
RET
;================================================================================
ShowRom:
MOV ?Debug_Str?BYTE+0, #HIGH(Str_ShowRom)
MOV ?Debug_Str?BYTE+1, #LOW(Str_ShowRom)
LCALL Debug_Str
LCALL AreYouSure
JNC ShowRom_Ret
LCALL InputPageAddr
MOV ?Debug_Str?BYTE+0, #HIGH(Str_PageAddr)
MOV ?Debug_Str?BYTE+1, #LOW(Str_PageAddr)
LCALL Debug_Str
MOV A, R0
LCALL Debug_Byte_Hex
MOV A, #0X00
LCALL Debug_Byte_Hex
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
MOV ?Debug_Rom?BYTE+0, R0
MOV ?Debug_Rom?BYTE+1, #0X00
MOV ?Debug_Rom?BYTE+2, #0x00
LCALL Debug_Rom
ShowRom_Ret:
RET
;================================================================================
Recv2Hex:
LCALL Debug_In
LCALL Ascii1ToHex
SWAP A
MOV R0, A
LCALL Debug_In
LCALL Ascii1ToHex
ADD A, R0
MOV R0, A
MOV A, R1
ADD A, R0
MOV R1, A
RET
;================================================================================
InputPageAddr:
InputPageAddr_L1:
MOV ?Debug_Str?BYTE+0, #HIGH(Str_InputPageAddr)
MOV ?Debug_Str?BYTE+1, #LOW(Str_InputPageAddr)
LCALL Debug_Str
LCALL Debug_In
LCALL Debug_Byte
LCALL Ascii1ToHex
$IF 0
LCALL Debug_Byte_Hex
$ENDIF
SWAP A
MOV R0, A
$IF 0
LCALL Debug_Byte_Hex
$ENDIF
LCALL Debug_In
LCALL Debug_Byte
LCALL Ascii1ToHex
ADD A, R0
MOV R0, A
$IF 0
LCALL Debug_Byte_Hex
$ENDIF
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
LCALL AreYouSure
JC InputPageAddr_Ret
LJMP InputPageAddr_L1
InputPageAddr_Ret:
RET
;================================================================================
AreYouSure:
MOV ?Debug_Str?BYTE+0, #HIGH(Str_AreYouSure)
MOV ?Debug_Str?BYTE+1, #LOW(Str_AreYouSure)
LCALL Debug_Str
LCALL Debug_In
LCALL UpperChar
MOV B, A
LCALL Debug_Byte
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
CLR C
MOV A, B
XRL A, #'Y'
JNZ AreYouSure_RET
SETB C
AreYouSure_RET:
RET
;================================================================================
IsInRange:
CLR C
MOV A, R0
SUBB A, R1
JC IsInRange_RetF
CLR C
MOV A, R2
SUBB A, R0
JC IsInRange_RetF
SETB C
RET
IsInRange_RetF:
CLR C
RET
;================================================================================
UpperChar:
PUSH B
MOV B, R0
PUSH B
MOV B, R1
PUSH B
MOV B, R2
PUSH B
MOV B, A
MOV R0, A
MOV R1, #'a'
MOV R2, #'z'
LCALL IsInRange
JNC UpperChar_RetF
MOV A, B
CLR C
SUBB A, #'a'
ADD A, #'A'
MOV B, A
UpperChar_RetF:
MOV A, B
POP B
MOV R2, B
POP B
MOV R1, B
POP B
MOV R0, B
POP B
RET
;================================================================================
HexToAscii:
CLR C
SUBB A, #0x0A
JC HexToAscii_L1
ADD A, #0x07
HexToAscii_L1:
ADD A, #0x30
ADD A, #0x0A
RET
;================================================================================
Ascii1ToHex:
PUSH B
MOV B, R0
PUSH B
MOV B, R1
PUSH B
MOV B, R2
PUSH B
LCALL UpperChar
MOV B, A
MOV R0, A
MOV R1, #'A'
MOV R2, #'Z'
LCALL IsInRange
JNC Ascii1ToHex_L1
MOV A, B
CLR C
SUBB A, #'A'
ADD A, #10
SJMP Ascii1ToHex_RET
Ascii1ToHex_L1:
MOV A, B
MOV R0, A
MOV R1, #'0'
MOV R2, #'9'
LCALL IsInRange
JNC Ascii1ToHex_L2
MOV A, B
CLR C
SUBB A, #30H
SJMP Ascii1ToHex_RET
Ascii1ToHex_L2:
MOV A, #10H
Ascii1ToHex_RET:
POP B
MOV R2, B
POP B
MOV R1, B
POP B
MOV R0, B
POP B
RET
;================================================================================
Debug_In:
CPL WatchDog
JNB RI, Debug_In
CLR RI
MOV A, SBUF
RET
;================================================================================
Debug_Byte:
CLR ES
MOV SBUF, A
Debug_Byte_L1:
CPL WatchDog
JNB TI, Debug_Byte_L1
CLR TI
SETB ES
RET
;================================================================================
Debug_Byte_Hex:
PUSH B
MOV B, A
ANL A, #11110000B
RL A
RL A
RL A
RL A
LCALL HexToAscii
LCALL Debug_Byte
MOV A, B
ANL A, #00001111B
LCALL HexToAscii
LCALL Debug_Byte
MOV A, #20H
LCALL Debug_Byte
MOV A, B
POP B
RET
;================================================================================
Debug_Str:
PUSH DPH
PUSH DPL
PUSH B
PUSH ACC
MOV DPH, StrPtr
MOV DPL, StrPtr+1
CLR A
MOVC A, @A+DPTR
JZ Debug_Str_L2
INC DPTR ;DPTR为字符串地址
MOV B, A ;B为长度
Debug_Str_L1:
CLR A
MOVC A, @A+DPTR
LCALL Debug_Byte
INC DPTR
DJNZ B, Debug_Str_L1
Debug_Str_L2:
POP ACC
POP B
POP DPL
POP DPH
RET
;================================================================================
Debug_Mem:
PUSH DPH
PUSH DPL
PUSH B
PUSH ACC
MOV A, R0
PUSH ACC
MOV A, R1
PUSH ACC
MOV ?Debug_Str?BYTE+0, #HIGH(Str_Addr)
MOV ?Debug_Str?BYTE+1, #LOW(Str_Addr)
LCALL Debug_Str
MOV A, MemPtr
LCALL Debug_Byte_Hex
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
MOV A, MemLen
JZ Debug_Mem_L3
MOV ?Debug_Str?BYTE+0, #HIGH(Str_Data)
MOV ?Debug_Str?BYTE+1, #LOW(Str_Data)
LCALL Debug_Str
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
MOV R0, MemPtr
MOV R1, MemLen
MOV B, #10H
Debug_Mem_L1:
CLR A
MOV A, @R0
LCALL Debug_Byte_Hex
INC R0
DJNZ B, Debug_Mem_l2
MOV B, #10H
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
Debug_Mem_l2:
DJNZ R1, Debug_Mem_L1
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
Debug_Mem_L3:
POP ACC
MOV R1, A
POP ACC
MOV R0, A
POP ACC
POP B
POP DPL
POP DPH
RET
;================================================================================
Debug_Rom:
PUSH DPH
PUSH DPL
PUSH B
PUSH ACC
MOV A, R0
PUSH ACC
MOV ?Debug_Str?BYTE+0, #HIGH(Str_Addr)
MOV ?Debug_Str?BYTE+1, #LOW(Str_Addr)
LCALL Debug_Str
MOV A, RomPtr
LCALL Debug_Byte_Hex
MOV A, RomPtr+1
LCALL Debug_Byte_Hex
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
MOV ?Debug_Str?BYTE+0, #HIGH(Str_Data)
MOV ?Debug_Str?BYTE+1, #LOW(Str_Data)
LCALL Debug_Str
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
MOV DPH, RomPtr
MOV DPL, RomPtr+1
MOV R0, RomLen
MOV B, #10H
Debug_Rom_L1:
CLR A
MOVC A, @A+DPTR
LCALL Debug_Byte_Hex
INC DPTR
DJNZ B, Debug_Rom_L2
MOV B, #10H
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
Debug_Rom_L2:
DJNZ R0, Debug_Rom_L1
MOV ?Debug_Str?BYTE+0, #HIGH(Str_LF)
MOV ?Debug_Str?BYTE+1, #LOW(Str_LF)
LCALL Debug_Str
Debug_Rom_L3:
POP ACC
MOV R0, A
POP ACC
POP B
POP DPL
POP DPH
RET
;================================================================================
Str_Addr: DB 5,0B5H,0D8H,0D6H,0B7H,3AH
Str_Data: DB 5,0CAH,0FDH,0BEH,0DDH,3AH
Str_LF: DB 2,0DH,0AH
Str_Star: DB 37,"***********************************",0DH,0AH
Str_Title1: DB 37,"* ISP(SYCMOS5964) *",0DH,0AH
Str_Title2: DB 37,"* ZhengTL 05.07.12 *",0DH,0AH
Str_Select1: DB 37,"* 1: Chip Erease *",0DH,0AH
Str_Select2: DB 37,"* 2: Page Erease *",0DH,0AH
Str_Select3: DB 37,"* 3: Program *",0DH,0AH
Str_Select4: DB 37,"* 4: Protect *",0DH,0AH
Str_Select5: DB 37,"* 5: Reset System *",0DH,0AH
Str_Select6: DB 37,"* Other: Show Rom *",0DH,0AH
Str_Choice: DB 15,"Your Choice Is:"
Str_ChipErease: DB 12,"ChipErease",0DH,0AH
Str_PageErease: DB 12,"PageErease",0DH,0AH
Str_Program: DB 09,"Program",0DH,0AH
Str_Protect: DB 09,"Protect",0DH,0AH
Str_ShowRom: DB 10,"Show Rom",0DH,0AH
Str_AreYouSure: DB 19,"Are You Sure?(Y/N):"
Str_Success: DB 10,"Success!",0DH,0AH
Str_Failure: DB 10,"Failure!",0DH,0AH
Str_InputPageAddr: DB 19,"Input Page Address:"
Str_PageAddr: DB 16,"Page Address Is:"
Str_DownLoadHex: DB 27,"Please Download Your Hex!",0DH,0AH
;================================================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -