📄 main.asm
字号:
WriteCardLoop4:
XCH A,CardDataCount
CJNE A,#01H,WriteCardLoop5
MOV CardStatus,#00H
;;;;;;
MOV DataLength,#06
LCALL ChangeDbbToHex
MOV CardStatus,DataBuff1 + 2
WriteCardLoop5:
RET
;--------------------------------------------------------------------
; FUNCTION: FormatPurse
; INPUT: CardKeyType
; CardBlockNo
; CardKey
; CardValue+0, ... , CardValue+3
; OUTPUT: CardStatus
; CardStatus = 0 --> OK
; USE: A,R1
;--------------------------------------------------------------------
FormatPurse:
MOV CardStatus,#01H
;--------------------------------------------------------------------
; Command: 0x60 0x0E 0x01 0x64 KEYTYPE BlockNo KEY0 … KEY5 Value0 …Value3 BCC 0x03
; send 35 byte 17 * 2 + 1 = 35
;--------------------------------------------------------------------
;;;;;;
MOV DataBuff1 + 0,#60H
MOV DataBuff1 + 1,#0EH
MOV DataBuff1 + 2,#01H
MOV DataBuff1 + 3,#64H
MOV DataBuff1 + 4,CardKeyType
MOV DataBuff1 + 5,CardBlockNo
;;;;;;
MOV R1,#CardKey
MOV DataBuff1 + 6,@R1
INC R1
MOV DataBuff1 + 7,@R1
INC R1
MOV DataBuff1 + 8,@R1
INC R1
MOV DataBuff1 + 9,@R1
INC R1
MOV DataBuff1 + 10,@R1
INC R1
MOV DataBuff1 + 11,@R1
;;;;;;
MOV R1,#CardValue
MOV DataBuff1 + 12,@R1
INC R1
MOV DataBuff1 + 13,@R1
INC R1
MOV DataBuff1 + 14,@R1
INC R1
MOV DataBuff1 + 15,@R1
;;;;;;
MOV DataLength,#16
LCALL XORCheck
MOV DataBuff1 + 16,A
;;;;;;
MOV DataLength,#17
LCALL ChangeHexToDbb
;;;;;;
MOV CardDataCount,#35
MOV R1,#DataBuff2
FormatPurseLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CardDataCount,FormatPurseLoop1
;;;;;;
;--------------------------------------------------------------------
; Right: 0x60 0x01 0x00 BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
; Error: 0x60 0x01 ERRNO BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
;--------------------------------------------------------------------
;;;;;;
MOV CardDataCount,#09
MOV R1,#DataBuff2
FormatPurseLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#03H,FormatPurseLoop3
AJMP FormatPurseLoop4
FormatPurseLoop3:
INC R1
DJNZ CardDataCount,FormatPurseLoop2
FormatPurseLoop4:
XCH A,CardDataCount
CJNE A,#01H,FormatPurseLoop5
MOV CardStatus,#00H
;;;;;;
MOV DataLength,#06
LCALL ChangeDbbToHex
MOV CardStatus,DataBuff1 + 2
FormatPurseLoop5:
RET
;--------------------------------------------------------------------
; FUNCTION: Increase
; INPUT: CardKeyType
; CardBlockNo
; CardKey
; CardValue+0, ... , CardValue+3
; OUTPUT: CardStatus
; CardStatus = 0 --> OK
; USE: A,R1
;--------------------------------------------------------------------
Increase:
MOV CardStatus,#01H
;--------------------------------------------------------------------
; Command: 0x60 0x0E 0x01 0x65 KEYTYPE BlockNo KEY0 … KEY5 Value0 …Value3 BCC 0x03
; send 35 byte 17 * 2 + 1 = 35
;--------------------------------------------------------------------
;;;;;;
MOV DataBuff1 + 0,#60H
MOV DataBuff1 + 1,#0EH
MOV DataBuff1 + 2,#01H
MOV DataBuff1 + 3,#65H
MOV DataBuff1 + 4,CardKeyType
MOV DataBuff1 + 5,CardBlockNo
;;;;;;
MOV R1,#CardKey
MOV DataBuff1 + 6,@R1
INC R1
MOV DataBuff1 + 7,@R1
INC R1
MOV DataBuff1 + 8,@R1
INC R1
MOV DataBuff1 + 9,@R1
INC R1
MOV DataBuff1 + 10,@R1
INC R1
MOV DataBuff1 + 11,@R1
;;;;;;
MOV R1,#CardValue
MOV DataBuff1 + 12,@R1
INC R1
MOV DataBuff1 + 13,@R1
INC R1
MOV DataBuff1 + 14,@R1
INC R1
MOV DataBuff1 + 15,@R1
;;;;;;
MOV DataLength,#16
LCALL XORCheck
MOV DataBuff1 + 16,A
;;;;;;
MOV DataLength,#17
LCALL ChangeHexToDbb
;;;;;;
MOV CardDataCount,#35
MOV R1,#DataBuff2
IncreaseLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CardDataCount,IncreaseLoop1
;;;;;;
;--------------------------------------------------------------------
; Right: 0x60 0x01 0x00 BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
; Error: 0x60 0x01 ERRNO BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
;--------------------------------------------------------------------
;;;;;;
MOV CardDataCount,#09
MOV R1,#DataBuff2
IncreaseLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#03H,IncreaseLoop3
AJMP IncreaseLoop4
IncreaseLoop3:
INC R1
DJNZ CardDataCount,IncreaseLoop2
IncreaseLoop4:
XCH A,CardDataCount
CJNE A,#01H,IncreaseLoop5
MOV CardStatus,#00H
;;;;;;
MOV DataLength,#06
LCALL ChangeDbbToHex
MOV CardStatus,DataBuff1 + 2
IncreaseLoop5:
RET
;--------------------------------------------------------------------
; FUNCTION: Decrease
; INPUT: CardKeyType
; CardBlockNo
; CardKey
; CardValue+0, ... , CardValue+3
; OUTPUT: CardStatus
; CardStatus = 0 --> OK
; USE: A,R1
;--------------------------------------------------------------------
Decrease:
MOV CardStatus,#01H
;--------------------------------------------------------------------
; Command: 0x60 0x0E 0x01 0x66 KEYTYPE BlockNo KEY0 … KEY5 Value0 …Value3 BCC 0x03
; send 35 byte 17 * 2 + 1 = 35
;--------------------------------------------------------------------
;;;;;;
MOV DataBuff1 + 0,#60H
MOV DataBuff1 + 1,#0EH
MOV DataBuff1 + 2,#01H
MOV DataBuff1 + 3,#66H
MOV DataBuff1 + 4,CardKeyType
MOV DataBuff1 + 5,CardBlockNo
;;;;;;
MOV R1,#CardKey
MOV DataBuff1 + 6,@R1
INC R1
MOV DataBuff1 + 7,@R1
INC R1
MOV DataBuff1 + 8,@R1
INC R1
MOV DataBuff1 + 9,@R1
INC R1
MOV DataBuff1 + 10,@R1
INC R1
MOV DataBuff1 + 11,@R1
;;;;;;
MOV R1,#CardValue
MOV DataBuff1 + 12,@R1
INC R1
MOV DataBuff1 + 13,@R1
INC R1
MOV DataBuff1 + 14,@R1
INC R1
MOV DataBuff1 + 15,@R1
;;;;;;
MOV DataLength,#16
LCALL XORCheck
MOV DataBuff1 + 16,A
;;;;;;
MOV DataLength,#17
LCALL ChangeHexToDbb
;;;;;;
MOV CardDataCount,#35
MOV R1,#DataBuff2
DecreaseLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CardDataCount,DecreaseLoop1
;;;;;;
;--------------------------------------------------------------------
; Right: 0x60 0x01 0x00 BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
; Error: 0x60 0x01 ERRNO BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
;--------------------------------------------------------------------
;;;;;;
MOV CardDataCount,#09
MOV R1,#DataBuff2
DecreaseLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#03H,DecreaseLoop3
AJMP DecreaseLoop4
DecreaseLoop3:
INC R1
DJNZ CardDataCount,DecreaseLoop2
DecreaseLoop4:
XCH A,CardDataCount
CJNE A,#01H,DecreaseLoop5
MOV CardStatus,#00H
;;;;;;
MOV DataLength,#06
LCALL ChangeDbbToHex
MOV CardStatus,DataBuff1 + 2
DecreaseLoop5:
RET
;--------------------------------------------------------------------
; FUNCTION: ReadPurse
; INPUT: CardKeyType
; CardBlockNo
; CardKey
; OUTPUT: CardStatus,DataBuff1+2, ... ,DataBuff1+5
; CardStatus = 0 --> OK
; CardBalance: DataBuff1+2, ... ,DataBuff1+5
; USE: A,R1
;--------------------------------------------------------------------
ReadPurse:
MOV CardStatus,#01H
;--------------------------------------------------------------------
; Command: 0x60 0x0A 0x01 0x67 KEYTYPE BlockNo KEY0 … KEY5 BCC 0x03
; send 27 byte 13 * 2 + 1 = 27
;--------------------------------------------------------------------
;;;;;;
MOV DataBuff1 + 0,#60H
MOV DataBuff1 + 1,#0AH
MOV DataBuff1 + 2,#01H
MOV DataBuff1 + 3,#67H
MOV DataBuff1 + 4,CardKeyType
MOV DataBuff1 + 5,CardBlockNo
;;;;;;
MOV R1,#CardKey
MOV DataBuff1 + 6,@R1
INC R1
MOV DataBuff1 + 7,@R1
INC R1
MOV DataBuff1 + 8,@R1
INC R1
MOV DataBuff1 + 9,@R1
INC R1
MOV DataBuff1 + 10,@R1
INC R1
MOV DataBuff1 + 11,@R1
;;;;;;
MOV DataLength,#12
LCALL XORCheck
MOV DataBuff1 + 12,A
;;;;;;
MOV DataLength,#13
LCALL ChangeHexToDbb
;;;;;;
MOV CardDataCount,#27
MOV R1,#DataBuff2
ReadPurseLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CardDataCount,ReadPurseLoop1
;;;;;;
;--------------------------------------------------------------------
; Right: 0x60 0x05 Balance0 …Balance3 0x00 BCC 0x03
; recieve 17 byte 8 * 2 + 1 = 17
; Error: 0x60 0x01 ERRNO BCC 0x03
; recieve 9 byte 4 * 2 + 1 = 9
;--------------------------------------------------------------------
;;;;;;
MOV CardDataCount,#17
MOV R1,#DataBuff2
ReadPurseLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#03H,ReadPurseLoop3
AJMP ReadPurseLoop4
ReadPurseLoop3:
INC R1
DJNZ CardDataCount,ReadPurseLoop2
ReadPurseLoop4:
XCH A,CardDataCount
CJNE A,#01H,ReadPurseLoop5
MOV CardStatus,#00H
;;;;;;
MOV DataLength,#12
LCALL ChangeDbbToHex
ReadPurseLoop5:
RET
;--------------------------------------------------------------------
; % END
END
;--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -