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

📄 rfid.asm

📁 125khz射频ID卡读卡程序
💻 ASM
字号:
;;;;;;;;;;;读卡号;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ:   MOV     R0,#HEX0
        MOV     R1,#10H                 ;预读16个字节
READ1:  MOV     @R0,#00H
	INC     R0                      ;清除缓冲区@R0
	DJNZ    R1,READ1
	MOV     R0,#HEX0
        MOV     R1,#16H
READ2:  JB      DATE,$
	DJNZ    R1,READ2                ;循环等待稳定的低电平
        MOV     STAT,#00H
        LCALL   IFJMP                   ;有跳变
        MOV     R1,#80H                 ;连续读取128位,
        MOV     R2,#00H
	MOV     TH0,#00H
	MOV     TL0,#05H
SSS:    LCALL   JMPOK
        JC      READ4
        SJMP    SSS
READ3:  LCALL   JMPOK
        JNC     READ5                   ;半周期
        MOV     A,#01H
        RET
READ4:  LCALL   JMPOK                   ;
	JNC     READ3
READ5:  MOV     A,STAT
	RRC     A
	CPL     C
	MOV     A,@R0
	RLC     A
	MOV     @R0,A                   ;保存状态
	INC     R2
	CJNE    R2,#08H,READ6
	MOV     R2,#00H
	INC     R0
READ6:  DJNZ    R1,READ4                ;未读完,继续
        MOV     R0,#HEX0
	MOV     R2,#08H
	MOV     A,R0
	ADD     A,#08H
	MOV     R1,A                    ;读完,比较前8字节与后8字节
READ7:  MOV     A,@R0
	CLR     C
	SUBB    A,@R1
	JZ      READ8
	RET                             ;不等,返回错误
READ8:  INC     R1
	INC     R0
	DJNZ    R2,READ7
	RET                             ;相等,解码
;;;;;;;;;;;;;解码;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;R0,R1,R2,R3,R4,R5,R6
;IN: R0,R1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEMOD:  MOV     R0,#HEX0
	MOV     R1,#HEX0
	MOV     R2,#09H
	MOV     R3,#37H                 ;剩余55位数据
	MOV     R4,#05H                 ;每5位为一字节
	MOV     R5,#08H
	MOV     R6,#10H
	MOV     STAT,#00H
	PUSH    01H
	CLR     C
DEMOD1: MOV     A,@R0
DEMOD2: RLC     A
	JNC     DEMOD3
	DJNZ    R2,DEMOD4
	SJMP    DEMOD5                   ;出现9个高电平,数据开始
DEMOD3: MOV     R2,#09H
DEMOD4: DJNZ    R5,DEMOD2
	MOV     R5,#08H
	INC     R0
	DJNZ    R6,DEMOD1
	MOV     A,#01H
	POP     01H                     ;未出现9个高电平,读卡错误
	RET
;-------------------------------
DEMOD5: DJNZ    R5,DEMOD6
	SJMP    DEMOD9                   ;移完8位,取下一字节
DEMOD6: RLC     A
	XCH     A,STAT                  ;未移完,继续
	RLC     A
	XCH     A,STAT
	DJNZ    R4,DEMOD8
	MOV     R4,#05H
	DJNZ    R3,DEMODA
	MOV     @R1,STAT                ;55位全部移完
        MOV     A,STAT
        JNB     ACC.0,AAA               ;结束位为0
        POP     01H
        RET
AAA:    POP     01H
	MOV     R2,#00H
	MOV     R3,#00H
	MOV     R4,#00H
	MOV     R5,#00H                 ;计算列校验和
	MOV     R6,#0BH
LXRL:   MOV     A,@R1
	CLR     C
	RRC     A
	MOV     @R1,A
	RRC     A
	JNC     LXRL1
	INC     R2
LXRL1:  RRC     A
	JNC     LXRL2
	INC     R3
LXRL2:  RRC     A
	JNC     LXRL3
	INC     R4
LXRL3:  RRC     A
	JNC     LXRL4
	INC     R5
LXRL4:  INC     R1
	DJNZ    R6,LXRL                   ;计算列校验和
	MOV     A,R2
        JB      ACC.0,LXRL5
        MOV     A,R3
        JB      ACC.0,LXRL5
        MOV     A,R4
        JB      ACC.0,LXRL5
        MOV     A,R5
        JB      ACC.0,LXRL5
        CLR     A
	RET
LXRL5:  MOV     A,#01H
        RET
DEMOD8: DEC     R3
	DJNZ    R5,DEMOD6
DEMOD9: MOV     R5,#08H
	INC     R0
	MOV     A,@R0                   ;移完8位,取下一字节
	SJMP    DEMOD6
DEMODA: MOV     @R1,STAT
	INC     R1
        XCH     A,STAT
	MOV     R2,#05H
	MOV     B,#00H
HXRL1:  RRC     A                       ;行校验和计算
	JNC     HXRL
	INC     B
HXRL:   DJNZ    R2,HXRL1
        XCH     A,STAT
	JNB     B.0,DEMODB              ;校验正确,继续
	POP     01H                     ;校验错误,返回
	MOV     A,#01H
	RET
DEMODB: MOV     STAT,#00H
	SJMP    DEMOD5
;;;;;;;;;;;;;测跳变时长;;;;;;;;;;;;;;;;;;;;;
JMPOK:  LCALL   IFJMP
	CLR     C
        MOV     A,#7AH                  ;70h
	SUBB    A,TL0
        MOV     A,#00H                  ;01H
	SUBB    A,TH0
	MOV     TH0,#00H
	MOV     TL0,#05H
	SETB    TR0
	RET
;;;;;;;;;;;;;检测跳变;;;;;;;;;;;;;;;;;;;;;;;
IFJMP:  MOV     A,#00H
	MOV     C,DATE
	RLC     A
	CJNE    A,STAT,IFJMP1
	SJMP    IFJMP
IFJMP1: MOV     B,A
        MOV     A,#00H
	MOV     C,DATE
	RLC     A
        CJNE    A,B,IFJMP
        MOV     STAT,A
	CLR     TR0
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

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