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

📄 wg34l.asm

📁 通过51单片机的I/O口模拟WG34信号
💻 ASM
📖 第 1 页 / 共 3 页
字号:
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 + -