📄 main.asmbak
字号:
;HexToAscii:A 为要转换的字节 if(A<0x0A) A+='0'; else A+=('A'-0x0A);
;================================================================================
HexToAscii:
CLR C
SUBB A, #0x0A
JC HexToAscii_L1
ADD A, #0x07
HexToAscii_L1:
ADD A, #0x30
ADD A, #0x0A
RET
;================================================================================
;Ascii1ToHex(A) A=A&0FH
;CHANGE:A
;================================================================================
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:A 为要发送的字节
;================================================================================
Debug_In:
CPL WatchDog
JNB RI, Debug_In
CLR RI
MOV A, SBUF
RET
;================================================================================
;Debug_Byte:A 为要发送的字节
;================================================================================
Debug_Byte:
CLR ES ;关闭串口0中断
MOV SBUF, A
Debug_Byte_L1:
CPL WatchDog
JNB TI, Debug_Byte_L1
CLR TI
SETB ES ;允许串口0中断
RET
;================================================================================
;Debug_Byte_Hex:A 为要发送的字节
;================================================================================
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:StrPtr 为要发送的字符串地址,如:Str_Test:DB 6,"Test",0DH,0AH
;================================================================================
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:MemPtr 为要发送的字符串地址,MemLen 为发送长度
;================================================================================
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:RomPtr 为要发送的字符串地址,RomLen 为发送长度
;================================================================================
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 + -