📄 gj070613.asm
字号:
MOVF MF522BUF1,W ;MF522BUF1
MOVWF INDF
BCF STATUS,RP0
MOVF KA_STS,W ;MI_OK
RETURN
PR_ELSE
MOVLW MI_ERR ;0XFE
MOVWF KA_STS
MOVF KA_STS,W
RETURN
;------------------------------------------------------
;防冲撞:参数:PSNR=卡片类型码指针
;------------------------------------------------------
PCDANTICOLL ;14
PCD_ANTICOLL G_UCTBUF
CLRF SNR_CHECK
MOVLW STATUS2REG ;0X08
MOVWF REGADR
MOVLW 0X08
MOVWF MASK
CALL CLEARBITMASK
;
MOVLW BITFRAMINGREG ;0X0D
MOVWF REGADR
MOVLW 0
MOVWF VALUE
CALL WRITERAWRC
;
MOVLW COLLREG ;0X0E
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL CLEARBITMASK
;
BSF STATUS,RP0
MOVLW PICC_ANTICOLL1 ;0X93
MOVWF MF522BUF0
MOVLW 0X20
MOVWF MF522BUF1
BCF STATUS,RP0
;
PCD_COMF522 0X02
CALL PCDCOMF522
MOVF KA_STS,W
;
BTFSS STATUS,Z
GOTO STAOK
CLRF JSQI ;MI_OK
LOOPCOOL MOVLW MF522BUF0 ;MF522BUF0 0xc0
ADDWF JSQI,W
MOVWF FSR ;FSR=MF522BUF0+JSQI
MOVF INDF,W
MOVWF TEMPA
;
MOVF PSNR,W
ADDWF JSQI,W
MOVWF FSR ;FSR=PSNR+JSQI
MOVF TEMPA,W ;[MF522BUF0+JSQI]
MOVWF INDF ;=>[PSNR+JSQI]
;
MOVF TEMPA,W
XORWF SNR_CHECK,F
;
INCF JSQI,F
MOVF JSQI,W
XORLW 0X04
BTFSS STATUS,Z
GOTO LOOPCOOL
;
MOVLW MF522BUF4 ;MF522BUF4 0xc0
MOVWF FSR ;FSR=MF522BUF0+JSQI
MOVF INDF,W
XORWF SNR_CHECK,W
BTFSC STATUS,Z ;MF522BUF[i]=SNR_CHECK?
GOTO STAOK
;
MOVLW MI_ERR ;0XFE
MOVWF KA_STS
STAOK
MOVLW COLLREG ;0X0E
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL SETBITMASK
MOVF KA_STS,W
RETURN
;-------------------------------------------------------
;选定卡片
;参数:PSNR:卡片序列号 4字节
PCDSELECT ;13
PCD_ANTICOLL G_UCTBUF
BSF STATUS,RP0
MOVLW PICC_ANTICOLL1 ;0X93
MOVWF MF522BUF0
MOVLW 0X70
MOVWF MF522BUF1
MOVLW 0
MOVWF MF522BUF6
BCF STATUS,RP0
;
MOVLW 0
MOVWF JSQI
LOOPPS MOVF PSNR,W
ADDWF JSQI,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMPA
MOVLW MF522BUF2 ;0X42
ADDWF JSQI,W
MOVWF FSR
MOVF TEMPA,W
MOVWF INDF
BSF STATUS,RP0
XORWF MF522BUF6,F
BCF STATUS,RP0
INCF JSQI,F
MOVLW 0X04
XORWF JSQI,W
BTFSS STATUS,Z
GOTO LOOPPS
;
CALUCRC_N 0XC7,0X07
CALL CALULATECRC
;
MOVLW STATUS2REG ;0X08
MOVWF REGADR
MOVLW 0X08
MOVWF MASK
CALL CLEARBITMASK
;
PCD_COMF522 0X09
CALL PCDCOMF522
MOVF KA_STS,W
;
BTFSS STATUS,Z
GOTO XKERR
MOVF UNLENH,W
BTFSS STATUS,Z
GOTO XKERR
MOVF UNLENL,W
XORLW 0X18
BTFSS STATUS,Z
GOTO XKERR
MOVF KA_STS,W
RETURN
XKERR MOVLW MI_ERR ;0XFE
MOVWF KA_STS
MOVF KA_STS,W
RETURN
;------------------------------------------------------
;验证卡片密码
;参数:ADDR :块地址 PKEY:密码 PSNR :卡片序列号 4字节
;成功返回:MI_OK
;------------------------------------------------------
PCDAUTHSTATE ;15
PCD_AUTHSTA PICC_AUTHENT1A,0,G_UCTBUF
MOVF AUTH_MODE,W
BSF STATUS,RP0
MOVWF MF522BUF0 ;MF522BUF[0]=AUTH_MODE
BCF STATUS,RP0
MOVF ADDR,W
BSF STATUS,RP0
MOVWF MF522BUF1 ;MF522BUF[1]=ADDR
BCF STATUS,RP0
CLRF JSQI
LOOPYZ1
MOVF PKEY,W ;密码首地址
ADDWF JSQI,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMPA
;
MOVLW MF522BUF2 ;MF522BUF2
ADDWF JSQI,W
MOVWF FSR
MOVF TEMPA,W ;
MOVWF INDF
INCF JSQI,F
MOVF JSQI,W
XORLW 0X06
BTFSS STATUS,Z
GOTO LOOPYZ1
;
CLRF JSQI
LOOPYZ2 MOVF PSNR,W ;序列号
ADDWF JSQI,W
MOVWF FSR ;FSR=PSNR+JSQI
MOVF INDF,W
MOVWF TEMPA ;读序列号
;
MOVLW MF522BUF8 ;MF522BUF8
ADDWF JSQI,W
MOVWF FSR ;FSR=&MF522BUF8+JSQI
MOVF TEMPA,W
MOVWF INDF ;
INCF JSQI,F
MOVF JSQI,W
XORLW 0X06
BTFSS STATUS,Z
GOTO LOOPYZ2
;
PCD_COMF522 0X0C ;MA1=12字节
;
MOVLW PCD_AUTHENT ;0X0E
MOVWF COMMAND ;验证密钥
CALL PCDCOMF522
MOVF KA_STS,W
;
BTFSS STATUS,Z
GOTO RETERR
MOVLW STATUS2REG ;0X08
MOVWF REGADR
CALL READRAWRC
ANDLW 0X08
BTFSC STATUS,Z
GOTO RETERR
MOVF KA_STS,W
RETURN
RETERR MOVLW MI_ERR ;0XFE;
MOVWF KA_STS
MOVF KA_STS,W
RETURN
;--------------------------------------------------------
;读卡内数据
;参数:ADDR 块地址,输入
;PDATA 数据,输出,16字节0X30=>PDATA (0x30--0x3f)
;成功,返回MI_OK
PCDREAD ;10
PCD_READ 1,G_UCTBUF
BSF STATUS,RP0
MOVLW PICC_READ ;0X30
MOVWF MF522BUF0
BCF STATUS,RP0
MOVF ADDR,W
BSF STATUS,RP0
MOVWF MF522BUF1
BCF STATUS,RP0
CALUCRC_N 0XC2,0X02
CALL CALULATECRC
;
PCD_COMF522 0X04
CALL PCDCOMF522
;
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO FELSE
MOVF UNLENH,W
BTFSS STATUS,Z
GOTO FELSE
MOVF UNLENL,W
XORLW 0X90
BTFSS STATUS,Z
GOTO FELSE
;
MOVLW 0
MOVWF JSQI
LOOPRK
; BSF STATUS,RP0
MOVLW MF522BUF0 ;0Xc0
; BCF STATUS,RP0
ADDWF JSQI,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMPA
MOVF PDATA,W ;PDATA首地址
ADDWF JSQI,W
MOVWF FSR
MOVF TEMPA,W
MOVWF INDF
INCF JSQI,F
MOVF JSQI,W
XORLW 0X10
BTFSS STATUS,Z
GOTO LOOPRK
MOVF KA_STS,W
RETURN
FELSE
MOVLW MI_ERR ;0XFE
MOVWF KA_STS
MOVF KA_STS,W ;建立标志!
RETURN
;----------------------------------------------
;命令卡片休眠 成功 返回MI_OK;
;MF522BUF0,1,2,3,4,5,----
PCDHALT ;8
BSF STATUS,RP0
MOVLW PICC_HALT ;0X50
MOVWF MF522BUF0
CLRW
MOVWF MF522BUF1
BCF STATUS,RP0
CALUCRC_N 0XC2,0X02
CALL CALULATECRC
PCD_COMF522 0X04
CALL PCDCOMF522
RETLW 0 ;MI_OK
;----------------------------------------------
read_send
MOVF CHGDLY,F ;******
BTFSS STATUS,Z ;******
return ;禁充电期间
;
MOVF ANTIM,F
BTFSS ZERO
GOTO ReadCard ;3.2秒寻卡期内
; 读按钮状态
RLF ANSTS,F ;
BSF ANSTS,0
BTFSS ANZT ;RA3=按钮状态,0有效
BCF ANSTS,0
MOVF ANSTS,W ;
ANDLW 0XF7 ;XXXX0111
XORLW 0X07 ;00000111
BTFSS STATUS,Z
RETURN ;按钮无效
;按钮有效,置3.2秒有效刷卡时间
MOVLW 0X40
MOVWF ANTIM ;设定本次按钮有效
RETURN
;****************************************************
ReadCard ;T2 50毫秒中断进入,首次按钮有效,ANTIM=0X40
DECF ANTIM,F ;50毫秒-1
MOVLW 0X03
ANDWF ANTIM,W
BTFSS STATUS,Z
RETURN
;200毫秒间隔到读卡
nop
DC3V_EN
call T10MS
LED_OFF ;**灭灯
;
BANKSEL PIE1 ;当前摘机,仅比较器1中断
BCF INTCON,RABIE ;RABIE=0,保留RABIF中断
BCF PIE1,TMR2IE ;禁止定时器2
BANKSEL PIR1
CLRF PIR1
CLRF PIR2
CLRF MSCNT
CLRF T_SEND
;
CLRF KA_STS
; 复位RF522
CALL PCDRESET
; 关天线
CALL PCDANTENNAOFF
; 开天线
CALL PCDANTENNAON
; 寻卡
; PCD_REQUEST PICC_REQALL,G_UCTBUF
CALL PCDREQUEST
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO MF_FALSE
; 防冲突
; PCD_ANTICOLL G_UCTBUF
CALL PCDANTICOLL
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO MF_FALSE
; 选择
; PCD_ANTICOLL G_UCTBUF
CALL PCDSELECT
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO MF_FALSE
; 验证密钥
; PCD_AUTHSTA PICC_AUTHENT1A,0,G_UCTBUF
CALL PCDAUTHSTATE
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO MF_FALSE
; 读卡
; PCD_READ 1,G_UCTBUF
CALL PCDREAD
MOVF KA_STS,W
BTFSS STATUS,Z
GOTO MF_FALSE
;停止读卡
CALL PCDHALT
BSF SSEL ;撤销从选择
DC3V_disEN ;关闭读卡电压
;
BANKSEL TRISA
MOVF G_UCTBUF,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 0
BANKSEL TRISA
MOVF G_UCTBUF1,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 1
BANKSEL TRISA
MOVF G_UCTBUF2,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 2
BANKSEL TRISA
MOVF G_UCTBUF3,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 3
BANKSEL TRISA
MOVF G_UCTBUF4,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 4
BANKSEL TRISA
MOVF G_UCTBUF5,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 5
BANKSEL TRISA
MOVF G_UCTBUF6,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 6
BANKSEL TRISA
MOVF G_UCTBUF7,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 7
BANKSEL TRISA
MOVF G_UCTBUF8,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 8
BANKSEL TRISA
MOVF G_UCTBUF9,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 9
BANKSEL TRISA
MOVF G_UCTBUFA,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 0x000A
MOVLW 0X0A
MOVWF DTCNT ;发送码长10
MOVLW G_UCTBUF ;
MOVWF DTADDR ; 置DTMF缓冲区首地址
CALL DTMF_SEND ;启动发送
MOVLW 0X40 ;
MOVWF CHGDLY ;3S禁止充电
MOVLW 0X00
MOVWF ANTIM ;读卡结束
MF_FALSE
DC3V_disEN
LED_OFF
BANKSEL PIE1
BSF PIE1,TMR2IE ;
BSF INTCON,RABIE ;
BANKSEL PIR1
CLRF PIR1
CLRF PIR2
CLRF MSCNT
CLRF T_SEND
RETURN
;*****************************************
END ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -