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

📄 main.asm

📁 MRFIC读写器-51汇编源程序及C51源程序.zip
💻 ASM
📖 第 1 页 / 共 3 页
字号:
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 + -