📄 gj0420.asm
字号:
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_STATUS
STAOK
MOVLW COLLREG ;0X0E
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL SETBITMASK
MOVF KA_STATUS,W
RETURN
;-------------------------------------------------------
;选定卡片
;参数:PSNR:卡片序列号 4字节
PCDSELECT ;13
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
; MOVWF MF522BUF6
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_STATUS,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_STATUS,W
RETURN
XKERR MOVLW MI_ERR ;0XFE
MOVWF KA_STATUS
MOVF KA_STATUS,W
RETURN
;------------------------------------------------------
;验证卡片密码
;参数:ADDR :块地址
; PKEY:密码
; PSNR :卡片序列号 4字节
; 成功:返回MI_OK
;------------------------------------------------------
PCDAUTHSTATE ;15
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_STATUS,W
;
BTFSS STATUS,Z
GOTO RETERR
MOVLW STATUS2REG ;0X08
MOVWF REGADR
CALL READRAWRC
ANDLW 0X08
BTFSC STATUS,Z
GOTO RETERR
MOVF KA_STATUS,W
RETURN
RETERR MOVLW MI_ERR ;0XFE;
MOVWF KA_STATUS
MOVF KA_STATUS,W
RETURN
;--------------------------------------------------------
;读卡内数据
;参数:ADDR: 块地址,输入
; PDATA: 数据,输出,16字节0X30=>PDATA (0x30--0x3f)
; 成功:返回MI_OK
PCDREAD ;10
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_STATUS,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_STATUS,W
RETURN
FELSE
MOVLW MI_ERR ;0XFE
MOVWF KA_STATUS
MOVF KA_STATUS,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 ;通过RC522和ISO14443卡通讯
RETLW 0 ;MI_OK
;----------------------------------------------
read_send ;IC卡主程序
MOVF ANTIM,W ;******按钮禁止时间(ms)???
BTFSS STATUS,Z ;******
goto ReadCard ;在按钮禁止时间(ms)内
nop ;不在
BTFSC ANSTS,7
goto anup
nop
BTFSC ANZT ;#define ANZT PORTA,3 ;按钮状态,0按下
RETURN
CALL T50MS
BTFSC ANZT
RETURN
nop
LED_ON
bsf ANSTS,7 ;ANSTS EQU 2FH ;按钮触发状态
; CALL T1S
BANKSEL PORTA
MOVF ANSTS,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 0x0030
anup ;ANSTS.7=1
nop
CALL T50MS
BTFSS ANZT
RETURN
CALL T50MS
BTFSS ANZT
RETURN
nop
bcf ANSTS,7
;
MOVLW 0X40
MOVWF ANTIM
;//
BANKSEL PORTA
MOVF ANSTS,W
BANKSEL EEADR
MOVWF EETAMP
EE_WRITE 0x0030
;//
RETURN
ReadCard
MOVLW 0X03
ANDWF ANTIM,W ;every 0.2s read card one times
BTFSS STATUS,Z
RETURN
nop
DC3V_EN
call T10MS
LED_OFF ;**灭灯
;
BANKSEL PIE1 ;当前摘机,仅比较器1中断
BCF INTCON,RABIE ;RABIE=0,保留RABIF中断
BCF PIE1,TMR2IE ;禁止定时器2
BANKSEL PORTA
CLRF PIR1
CLRF PIR2
CLRF MSCNT
CLRF T_SEND
;
CLRF KA_STATUS
;
CALL PCDRESET
;
CALL PCDANTENNAOFF
;
CALL PCDANTENNAON
;
PCD_REQUEST PICC_REQALL,G_UCTBUF
CALL PCDREQUEST
;
MOVF KA_STATUS,W
BTFSS STATUS,Z
GOTO MF_FALSE
;
PCD_ANTICOLL G_UCTBUF ;G_UCTBUF=0XB0
CALL PCDANTICOLL
;
MOVF KA_STATUS,W
BTFSS STATUS,Z
GOTO MF_FALSE
;
PCD_ANTICOLL G_UCTBUF
CALL PCDSELECT
;
MOVF KA_STATUS,W
BTFSS STATUS,Z
GOTO MF_FALSE
PCD_AUTHSTA PICC_AUTHENT1A,0,G_UCTBUF
CALL PCDAUTHSTATE
;
MOVF KA_STATUS,W
BTFSS STATUS,Z
GOTO MF_FALSE
;
PCD_READ 1,G_UCTBUF
CALL PCDREAD
;
MOVF KA_STATUS,W
BTFSS STATUS,Z
GOTO MF_FALSE
;//
; BANKSEL PORTA
; MOVF KA_STATUS,W
; BANKSEL EEADR
; MOVWF EETAMP
; EE_WRITE 0x0010
;//
CALL PCDHALT
BSF SS
;//
; BANKSEL EEADR
; MOVWF EETAMP
; EE_WRITE 0x0020
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -