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

📄 main.asm

📁 MRFIC读写器-51汇编源程序及C51源程序.zip
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;--------------------------------------------------------------------
; MAIN.ASM
;--------------------------------------------------------------------

; 变量定义

DataLength      EQU     20H
TmpData         EQU     21H
TmpData1        EQU     22H
TmpData2        EQU     23H
TimeCount1      EQU     24H
TimeCount2      EQU     25H
UARTData        EQU     26H
UARTBitCount    EQU     27H
CardDataCount   EQU     28H
CardStatus      EQU     29H

CardKeyType     EQU     50H
CardBlockNo     EQU     51H
CardKey         EQU     52H
CardData        EQU     58H
CardValue       EQU     58H

DataBuff1       EQU     30H
DataBuff2       EQU     50H

UART_TX_BIT     EQU     90H             ; 发送
UART_RX_BIT     EQU     91H             ; 接收

;

;--------------------------------------------------------------------
;--------------------------------------------------------------------
;--------------------------------------------------------------------

; % RESET

        ORG     0000H

        LJMP    START



; % START

        ORG     0030H

START:  MOV     SP,#10H
        NOP
        NOP
        NOP
        NOP
        LCALL   Init_SoftUART
        NOP
        NOP
MainLoop:

;--------------------------------------------------------------------

;;;;;;
; CardReady
        LCALL   CardReady
        NOP
        NOP

;--------------------------------------------------------------------

;;;;;;
; WriteCard
        MOV     CardKeyType, #00H       ; KEYA
        MOV     CardBlockNo, #04H       ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        MOV     CardData +  0, #00H      ; CardData
        MOV     CardData +  1, #11H
        MOV     CardData +  2, #22H
        MOV     CardData +  3, #33H
        MOV     CardData +  4, #44H
        MOV     CardData +  5, #55H
        MOV     CardData +  6, #66H
        MOV     CardData +  7, #77H
        MOV     CardData +  8, #88H
        MOV     CardData +  9, #99H
        MOV     CardData + 10,#0AAH
        MOV     CardData + 11,#0BBH
        MOV     CardData + 12,#0CCH
        MOV     CardData + 13,#0DDH
        MOV     CardData + 14,#0EEH
        MOV     CardData + 15,#0FFH
        LCALL   WriteCard
        NOP
        NOP
;;;;;;
; ReadCard
        MOV     CardKeyType, #00H       ; KEYA
        MOV     CardBlockNo, #04H       ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        LCALL   ReadCard
        NOP
        NOP

;--------------------------------------------------------------------

;;;;;;
; WriteCard
        MOV     CardKeyType, #00H       ; KEYA
        MOV     CardBlockNo, #04H       ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        MOV     CardData +  0,#0FFH     ; CardData
        MOV     CardData +  1,#0FFH
        MOV     CardData +  2,#0FFH
        MOV     CardData +  3,#0FFH
        MOV     CardData +  4,#0FFH
        MOV     CardData +  5,#0FFH
        MOV     CardData +  6,#0FFH
        MOV     CardData +  7,#0FFH
        MOV     CardData +  8,#0FFH
        MOV     CardData +  9,#0FFH
        MOV     CardData + 10,#0FFH
        MOV     CardData + 11,#0FFH
        MOV     CardData + 12,#0FFH
        MOV     CardData + 13,#0FFH
        MOV     CardData + 14,#0FFH
        MOV     CardData + 15,#0FFH
        LCALL   WriteCard
        NOP
        NOP
;;;;;;
; ReadCard
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        LCALL   ReadCard
        NOP
        NOP

;--------------------------------------------------------------------

;;;;;;
; FormatPurse
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        MOV     CardValue + 0,#100      ; CardValue: 64 00 00 00
        MOV     CardValue + 1,#00
        MOV     CardValue + 2,#00
        MOV     CardValue + 3,#00
        LCALL   FormatPurse
        NOP
        NOP
;;;;;;
; ReadPurse
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        LCALL   ReadPurse
        NOP
        NOP

;--------------------------------------------------------------------

;;;;;;
; Increase
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        MOV     CardValue + 0,#10       ; CardValue: 0A 00 00 00
        MOV     CardValue + 1,#00
        MOV     CardValue + 2,#00
        MOV     CardValue + 3,#00
        LCALL   Increase
        NOP
        NOP
;;;;;;
; ReadPurse
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        LCALL   ReadPurse
        NOP
        NOP

;--------------------------------------------------------------------

;;;;;;
; Decrease
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        MOV     CardValue + 0,#20       ; CardValue: 14 00 00 00
        MOV     CardValue + 1,#00
        MOV     CardValue + 2,#00
        MOV     CardValue + 3,#00
        LCALL   Decrease
        NOP
        NOP
;;;;;;
; ReadPurse
        MOV     CardKeyType,#00H        ; KEYA
        MOV     CardBlockNo,#04H        ; Block 4
        MOV     CardKey + 0,#0FFH       ; CardKey: FF FF FF FF FF FF
        MOV     CardKey + 1,#0FFH
        MOV     CardKey + 2,#0FFH
        MOV     CardKey + 3,#0FFH
        MOV     CardKey + 4,#0FFH
        MOV     CardKey + 5,#0FFH
        LCALL   ReadPurse
        NOP
        NOP
        
;--------------------------------------------------------------------


        LJMP    MainLoop



;--------------------------------------------------------------------
;--------------------------------------------------------------------
;--------------------------------------------------------------------

; % SUBROUTINE

;--------------------------------------------------------------------
; FUNCTION: ChangeHexToDbb
; INPUT:    DataLength
;           DataBuff1
; OUTPUT:   DataBuff2
; USE:      A,R0,R1
;--------------------------------------------------------------------

ChangeHexToDbb:
        CLR     A
        MOV     R0,#DataBuff1
        MOV     R1,#DataBuff2
ChangeHexToDbbLoop:
;;;;;; HIGH half byte
        MOV     A,@R0
        SWAP    A
        ANL     A,#0FH
        CJNE    A,#10,ChangeHexToDbbLoop1
        AJMP    ChangeHexToDbbLoop2
ChangeHexToDbbLoop1:
        JNC     ChangeHexToDbbLoop2
        ADD     A,#48
        AJMP    ChangeHexToDbbLoop3
ChangeHexToDbbLoop2:
        ADD     A,#55
ChangeHexToDbbLoop3:
        MOV     @R1,A
        INC     R1
;;;;;; LOW half byte
        MOV     A,@R0
        ANL     A,#0FH
        CJNE    A,#10,ChangeHexToDbbLoop4
        AJMP    ChangeHexToDbbLoop5
ChangeHexToDbbLoop4:
        JNC     ChangeHexToDbbLoop5
        ADD     A,#48
        AJMP    ChangeHexToDbbLoop6
ChangeHexToDbbLoop5:
        ADD     A,#55
ChangeHexToDbbLoop6:
        MOV     @R1,A
        INC     R1
;;;;;;
        INC     R0
        DJNZ    DataLength,ChangeHexToDbbLoop

;;;;;; ETX
        MOV     @R1,#03H

        RET


;--------------------------------------------------------------------
; FUNCTION: ChangeDbbToHex
; INPUT:    DataLength
;           DataBuff2
; OUTPUT:   DataBuff1
; USE:      A,R0,R1
;--------------------------------------------------------------------

ChangeDbbToHex:
        CLR     A
        MOV     R0,#DataBuff1
        MOV     R1,#DataBuff2
ChangeDbbToHexLoop:
;;;;;; HIGH half byte
        MOV     A,@R1
        INC     R1
        CJNE    A,#65,ChangeDbbToHexLoop1
        AJMP    ChangeDbbToHexLoop2
ChangeDbbToHexLoop1:
        JNC     ChangeDbbToHexLoop2
        CLR     C
        SUBB    A,#48
        AJMP    ChangeDbbToHexLoop3
ChangeDbbToHexLoop2:
        CLR     C
        SUBB    A,#55
ChangeDbbToHexLoop3:
        SWAP    A
        MOV     TmpData1,A
;;;;;; LOW half byte
        MOV     A,@R1
        INC     R1
        CJNE    A,#65,ChangeDbbToHexLoop4
        AJMP    ChangeDbbToHexLoop5
ChangeDbbToHexLoop4:
        JNC     ChangeDbbToHexLoop5
        CLR     C
        SUBB    A,#48
        AJMP    ChangeDbbToHexLoop6
ChangeDbbToHexLoop5:
        CLR     C
        SUBB    A,#55
ChangeDbbToHexLoop6:
        MOV     TmpData2,A
;;;;;;
        ANL     TmpData1,#0F0H
        ANL     TmpData2,#0FH
        CLR     A
        ORL     A,TmpData1
        ORL     A,TmpData2
        MOV     @R0,A
        INC     R0
;;;;;;
        DEC     DataLength
        DJNZ    DataLength,ChangeDbbToHexLoop

        RET


;--------------------------------------------------------------------
; FUNCTION: XORCheck
; INPUT:    DataLength
;           DataBuff1
; OUTPUT:   A
; USE:      A,R0
;--------------------------------------------------------------------

XORCheck:
        CLR     A
        MOV     R0,#DataBuff1
XORCheckLoop:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -