📄 main.asm
字号:
;--------------------------------------------------------------------
; 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 + -