📄 wg34l.asm
字号:
L05AF:
MOV A,56H
MOV B,#05H
DIV AB
MOV A,B
MOV 58H,A
MOV A,56H
MOV B,#08H
DIV AB
ADD A,#10H
MOV R0,A
MOV A,@R0 ; [(56H)%8 + 10H] -> Acc
MOV R7,A
MOV A,B
XCH A,R7
INC R7
SJMP L05CC
L05CA:
CLR C
RRC A
L05CC:
DJNZ R7,L05CA
ANL A,#01H
JZ L0617
MOV A,#01H
MOV R7,58H
INC R7
SJMP L05DB
L05D9:
CLR C
RLC A
L05DB:
DJNZ R7,L05D9
XRL 5BH,A
MOV A,56H
CLR C
SUBB A,#32H
JNC L05E9
XRL 5AH,#01H
L05E9:
MOV A,56H
CLR C
SUBB A,#31H
JNC L0617
MOV A,58H
XRL A,#04H
JZ L0617
MOV A,57H
MOV B,#08H
DIV AB
MOV A,B
MOV R7,A
MOV A,#80H
INC R7
SJMP L0606
L0604:
CLR C
RRC A
L0606:
DJNZ R7,L0604
MOV R7,A
;{
MOV A,57H
MOV B,#08H
DIV AB
CPL A
INC A
ADD A,#2EH
;}
MOV R0,A
MOV A,@R0
ORL A,R7
MOV @R0,A
L0617:
MOV A,58H
XRL A,#04H
JNZ L0625
MOV A,5AH
JZ L0623
CLR A
RET
L0623:
SJMP L0627
L0625:
INC 57H
L0627:
INC 56H
LJMP L05A5
L062C:
MOV A,5BH
ANL A,#0FH
JZ L0634
CLR A
RET
L0634:
MOV A,#01H
RET
;---------------------------------------------------------------
; Name :
S0637:
MOV 59H,#80H
LCALL S0467
JNZ L0649
; lcall GetSRAM
LCALL S03DE
LCALL S0467
JNZ L0649
CLR A
RET
L0649:
MOV 57H,#00H
L064C:
MOV A,57H
CLR C
SUBB A,#7FH
JNC L068B
LCALL S045B
MOV A,0CH
ADD A,#10H
MOV R0,A
MOV 5EH,@R0
MOV 5FH,0BH
LCALL S0441
MOV 58H,A
INC 5FH
LCALL S0441
MOV 5FH,A ; (5FH) = 0 or (5FH) = 1
MOV A,58H
JNZ L067D
MOV A,5FH
DEC A
JNZ L067D
MOV 5FH,#00H
LCALL S0499
SJMP L0683
L067D:
MOV 5FH,#01H
LCALL S0499
L0683:
MOV A,57H
ADD A,#02H
MOV 57H,A
SJMP L064C
L068B:
LCALL S04D2
JNZ L0692
CLR A
RET
L0692:
LCALL S0591
JNZ L0699
CLR A
RET
L0699:
; lcall GetSRAM
MOV A,#01H
RET
;---------------------------------------------------------------
; Name : CheckCardData
S069C:
MOV R7,24H ; (24H) != 0
MOV A,R7
XRL A,#01H
JNZ L06B0
; if (24H) = 01h, then (24H) = 04h
MOV 24H,#04H
LCALL S0637
JZ L06AE
MOV 24H,#02H
L06AE:
ret
L06B0:
MOV A,R7
XRL A,#02H
JNZ L06CA
MOV 24H,#04H
LCALL Compare_CardCode ;S054E
JZ L06C5
MOV 29H,#00H
MOV 24H,#03H
ret
L06C5:
MOV 29H,#00H
ret
L06CA:
MOV A,R7
XRL A,#03H
JNZ L06E0
SETB RED_LED
CLR GRN_LED
; clr Buzer
setb Buzer
MOV 3CH,#1EH
MOV 25H,#01H
MOV 24H,#04H
lcall Wiegand34Out
; lcall ABA2_OUT_CardCode
; lcall WiegandInterfaceOut
ret
L06E0:
MOV A,R7
XRL A,#04H
JNZ L06EA
CLR A
MOV 09H,A
MOV 24H,A
L06EA:
RET
;---------------------------------------------------------------
GreenLed_ON:
SETB RED_LED
CLR GRN_LED
; clr Buzer
SETB Buzer
MOV R7,#96H
LCALL VariableDelay
; setb Buzer
clr Buzer
CLR RED_LED
SETB GRN_LED
RET
;---------------------------------------------------------------
; Wiegand Interface Call Start
;---------------------------------------------------------------
;WiegandInterfaceOut:
; mov A,25H
; mov 26H,A
; jnz WiegandInterfaceOut1
; ljmp WiegandInterfaceOut5
;WiegandInterfaceOut1:
; ; Data of Card OK/Ready, Then Send Out using Wiegand Format
; ; Wiegand Format : Odd, D0,D1,...,D7, D8,D9,...,D15, D16,D17,...,D23, Even
; ; Tag/Card Code is 4 Bytes, Using 3 Bytes
; clr WGD0 ; Odd check bit forever equl '0'
; lcall Wiegand1Delay ; Data bit Hold Time
; setb WGD0
; lcall Wiegand2Delay ; Data bit space time
; mov R5,#CardCodeNumber
; mov A,#29H
; add A,#CardCodeNumber ; Lowest Byte/Bit,Card data buffer [2AH(Lowest) -> 2DH(Highest)]
; mov R0,A
;WiegandInterfaceOut2:
; MOV A,@R0
; LCALL PutWG_Byte
; DEC R0
; DJNZ R5,WiegandInterfaceOut2
; clr WGD1 ; Even check bit forever equl '1'
; lcall Wiegand1Delay ; Data bit Hold Time
; setb WGD1
; lcall Wiegand2Delay ; Data bit space time
; lcall Wiegand2Delay ; Data bit space time
;WiegandInterfaceOut5:
; mov 25H,#00H
; clr RED_LED
; setb GRN_LED
; ret
;---------------------------------------------------------------
; Wiegand Interface Call Start
;---------------------------------------------------------------
Wiegand34Out:
mov A,25H
mov 26H,A
jnz Wiegand34Out1
ljmp Wiegand34Out_ret
Wiegand34Out1:
; Data of Card OK/Ready, Then Send Out using Wiegand Format
; Wiegand Format : Odd, D0,D1,...,D7, D8,D9,...,D15, D16,D17,...,D23, Even
; Tag/Card Code is 4 Bytes, Using 4 Bytes
clr WGD0 ; Odd check bit forever equl '0'
lcall Wiegand1Delay ; Data bit Hold Time
setb WGD0
lcall Wiegand2Delay ; Data bit space time
mov R5,#04H
mov A,#29H
add A,#04h ; Lowest Byte/Bit,Card data buffer [2AH(Lowest) -> 2DH(Highest)]
mov R0,A
Wiegand34Out2:
MOV A,@R0
LCALL PutWG_Byte
DEC R0
DJNZ R5,Wiegand34Out2
clr WGD1 ; Even check bit forever equl '1'
lcall Wiegand1Delay ; Data bit Hold Time
setb WGD1
lcall Wiegand2Delay ; Data bit space time
lcall Wiegand2Delay ; Data bit space time
Wiegand34Out_Ret:
mov 25H,#00H
clr RED_LED
setb GRN_LED
ret
;---------------------------------------------------------------
; Input : Data save in Acc
PutWG_Byte:
push 07h
mov R7,#08h
PutWG_Byte1:
RLC A ; Highest bit is first
jc PutWG_Byte2
clr WGD0
ljmp PutWG_Byte3
PutWG_Byte2:
clr WGD1
PutWG_Byte3:
lcall Wiegand1Delay ; Data bit Hold Time
setb WGD0
setb WGD1
lcall Wiegand2Delay ; Data bit space time
djnz R7,PutWG_Byte1
pop 07h
ret
;---------------------------------------------------------------
Wiegand1Delay:
setb WDI
clr WDI
push 06h
mov R6,#64H
djnz R6,$
pop 06h
ret
;---------------------------------------------------------------
Wiegand2Delay:
setb WDI
clr WDI
push 06h
mov R6,#0C8H
djnz R6,$
pop 06h
ret
;---------------------------------------------------------------
; Wiegand Interface Call Ended
;---------------------------------------------------------------
;---------------------------------------------------------------
; ABA2 Interface Call Start , RS232 Format Interface Call Start
; Card Code save in : (Lowest Byte)[2AH] [2BH] [2CH] [2DH](Highest byte)
;
;---------------------------------------------------------------
ABA2_OUT_CardCode:
mov A,25H
mov 26H,A
jnz ABA2_OUT_CardCode1
ljmp ABA2_OUT_CardCode5
ABA2_OUT_CardCode1:
; Send to Host String : "ss Type Length CardCode Bcc n"
mov A,#RS_SOH
lcall PutChar
mov A,#RS_SOH
lcall PutChar ; send 'ss'
mov 53H,#00h ; Bcc Check Reset
mov A,#Module_Type ; send 'type'
lcall PutChar
mov A,#(CardCodeNumber+'0') ; send 'length'
lcall PutChar
; send Card code(3 or 4 bytes)
mov R5,#CardCodeNumber
mov A,#29H
add A,#CardCodeNumber ; Lowest Byte/Bit,Card data buffer [2AH(Lowest) -> 2DH(Highest)]
mov R0,A
ABA2_OUT_CardCode2:
MOV 39H,@R0
LCALL PutHexCode
dec R0
djnz R5,ABA2_OUT_CardCode2
lcall PutStop ; send 'BCC n'
ABA2_OUT_CardCode5:
mov 25H,#00H
clr RED_LED
setb GRN_LED
ret
;---------------------------------------------------------------
; ABA2 Interface Call Ended , RS232 Format Interface Call Ended
;---------------------------------------------------------------
;---------------------------------------------------------------
; Input : R7 Delay times(*250)
;---------------------------------------------------------------
VariableDelay:
MOV R6,#0F3H
VariableDelay1:
NOP
NOP
NOP
NOP
NOP
DJNZ R6,VariableDelay1
DJNZ R7,VariableDelay
RET
;---------------------------------------------------------------
; Serail EEPROM (AT93C66) Operate Call start
;---------------------------------------------------------------
; Name : EEPROM_Disable
EEPROM_Disable:
LCALL EEPROM_Init
SJMP EEPROM_Comm
;---------------------------------------------------------------
; Name : EEPROM_Init
EEPROM_Init:
SETB EEPROM_CS
SETB EEPROM_IO
SETB EEPROM_SK
CLR EEPROM_SK
CLR EEPROM_IO
SETB EEPROM_SK
CLR EEPROM_SK
SETB EEPROM_SK
CLR EEPROM_SK
RET
;---------------------------------------------------------------
; Name : EEPROM_WrEnable
EEPROM_WrEnable:
LCALL EEPROM_Init
SETB EEPROM_IO
EEPROM_Comm:
MOV R7,#09H
EEPROM_Comm1:
SETB EEPROM_SK
CLR EEPROM_SK
DJNZ R7,EEPROM_Comm1
CLR EEPROM_CS
SETB EEPROM_IO
MOV C,EEPROM_IO
RET
;---------------------------------------------------------------
; Name : EEPROM_Byte_Read
; Input : Address Code(save in 38H)
; Output : Data (Save in 38H)
; Description : Read One Byte from EEPROM(AT93C66)
EEPROM_Byte_Read:
SETB EEPROM_CS
SETB EEPROM_IO ; SB = 1
SETB EEPROM_SK
CLR EEPROM_SK
SETB EEPROM_SK ; OP = "10"
CLR EEPROM_SK
CLR EEPROM_IO
LCALL EEPROM_ADR ; Write Address code to Eeprom
SETB EEPROM_IO
MOV C,EEPROM_IO
MOV 38H,#00H
MOV B,#00H
EEPROM_Byte_Read1:
MOV A,B
CLR C
SUBB A,#08H
JNC EEPROM_Byte_Read3
MOV A,38H
CLR C
RLC A
MOV 38H,A
SETB EEPROM_SK
CLR EEPROM_SK
JNB EEPROM_IO,EEPROM_Byte_Read2
ORL 38H,#01H
EEPROM_Byte_Read2:
INC B
SJMP EEPROM_Byte_Read1
EEPROM_Byte_Read3:
CLR EEPROM_CS
RET
;---------------------------------------------------------------
; Name : EEPROM_ADR
; Input : Address Code (save in 38H)
; Output : None
; Using : 62H,PSW,Cy,Acc,B
EEPROM_ADR:
SETB EEPROM_SK
CLR EEPROM_SK
CLR EEPROM_IO
SETB EEPROM_SK
CLR EEPROM_SK
CLR C
MOV 62H,38H
MOV B,#00H
EEPROM_ADR1:
MOV A,B
CLR C
SUBB A,#08H
JNC EEPROM_ADRret
MOV A,62H
RLC A
JNC EEPROM_ADR2
SETB EEPROM_IO
SJMP EEPROM_ADR3
EEPROM_ADR2:
CLR EEPROM_IO
EEPROM_ADR3:
SETB EEPROM_SK
CLR EEPROM_SK
MOV A,62H
CLR C
RLC A
MOV 62H,A
INC B
SJMP EEPROM_ADR1
EEPROM_ADRret:
RET
;---------------------------------------------------------------
; Name : EEPROM_Byte_Write
; Input : Address Code (save in 38H), Data(save in R7)
; Output : None
; Description : Write One Data(save in R7) to EEPROM (Address save in 38H)
EEPROM_Byte_Write:
SETB EEPROM_CS
SETB EEPROM_IO ; SB = 1
SETB EEPROM_SK
CLR EEPROM_SK
CLR EEPROM_IO ; OP = "01"
SETB EEPROM_SK
CLR EEPROM_SK
SETB EEPROM_IO
LCALL EEPROM_ADR ; EEPROM_ADR
MOV 62H,R7
MOV B,#00H
EEPROM_Byte_Write1:
MOV A,B
CLR C
SUBB A,#08H
JNC EEPROM_Byte_Write4
MOV A,62H
RLC A
JNC EEPROM_Byte_Write2
SETB EEPROM_IO
SJMP EEPROM_Byte_Write3
EEPROM_Byte_Write2:
CLR EEPROM_IO
EEPROM_Byte_Write3:
SETB EEPROM_SK
CLR EEPROM_SK
MOV A,62H
CLR C
RLC A
MOV 62H,A
INC B
SJMP EEPROM_Byte_Write1
EEPROM_Byte_Write4:
SETB EEPROM_IO
CLR EEPROM_CS
MOV C,EEPROM_IO
SETB EEPROM_CS
MOV B,#00H
EEPROM_Byte_Write5:
MOV A,B
CLR C
SUBB A,#0C8H
JNC EEPROM_Byte_Write7
JNB EEPROM_IO,EEPROM_Byte_Write6
SJMP EEPROM_Byte_Write7
EEPROM_Byte_Write6:
INC B
SJMP EEPROM_Byte_Write5
EEPROM_Byte_Write7:
CLR EEPROM_CS
RET
;---------------------------------------------------------------
; Serial EEPROM (AT93C66) Call Ended
;---------------------------------------------------------------
Factory_SNR:
DB 'R', 'F', 'S', 'A'
DB '0', '1', '0', '0','1'
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -