📄 gj0420.asm
字号:
CALL WRITERAWRC ;WRITERAWRC(COMIENREG,IRQEN +0x80)
;
MOVLW COMIRQREG ;0X04
MOVWF REGADR
MOVLW 0X80 ;CLR IRQ FLAG
MOVWF MASK
CALL CLEARBITMASK
;
MOVLW COMMANDREG ;0X01
MOVWF REGADR
MOVLW 0X00 ;PCD_IDLE=0 开始执行命令
MOVWF VALUE
CALL WRITERAWRC
;
MOVLW FIFOLEVILREG ;0X0A
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL SETBITMASK ;清读/写缓冲区指针
;
MOVF PINDATA,W ;输入数据首地址送FSR
MOVWF FSR
MOVLW 0X00
MOVWF JSQI
LOOPLEN
MOVLW FIFODATAREG ;0X09
MOVWF REGADR
MOVF INDF,W
MOVWF VALUE
CALL WRITERAWRC
INCF FSR,F
INCF JSQI,F
MOVF INLENBYTE,W
XORWF JSQI,W
BTFSS STATUS,Z
GOTO LOOPLEN
;
MOVLW COMMANDREG ;0X01
MOVWF REGADR
MOVF COMMAND,W
MOVWF VALUE
CALL WRITERAWRC
;
MOVF COMMAND,W
XORLW PCD_TRANSCEIVE ;0X0C
BTFSS STATUS,Z
GOTO TIMETZ
MOVLW BITFRAMINGREG ;0X0D
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL SETBITMASK
TIMETZ
MOVLW 0X02
MOVWF JSQH
MOVLW 0X58
MOVWF JSQL ;JSQH,L=600
;
LOOPD1 MOVLW COMIRQREG ;0X04
MOVWF REGADR
CALL READRAWRC
MOVWF N_COUNT
DEC_JSQHL
DECF JSQL,F ;16 bit counter dec
MOVF JSQL,W
XORLW 0XFF
BTFSS STATUS,Z
GOTO DECOK
DECF JSQH,F
;
DECOK
MOVF JSQH,W
IORWF JSQL,W
BTFSC STATUS,Z
GOTO NEXTB ;JSQHL=0
MOVF N_COUNT,W
ANDLW 0X01
BTFSS STATUS,Z
GOTO NEXTB ;N_COUNT&0X01!=0
MOVF N_COUNT,W
ANDWF WAITFOR,W
BTFSS STATUS,Z
GOTO NEXTB ;N_COUNT&WAITFOR!=0
GOTO LOOPD1
;
NEXTB
MOVLW BITFRAMINGREG ;0X0D
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL CLEARBITMASK
;
MOVF JSQH,W
IORWF JSQL,W
BTFSC STATUS,Z
GOTO NEXTC ;JSQHL=0
MOVLW ERRORREG ;0X06
MOVWF REGADR
CALL READRAWRC
;
ANDLW 0X1B
BTFSS STATUS,Z
GOTO F_ELSE2 ;
MOVLW MI_OK ;0X00
MOVWF KA_STATUS
;
MOVF N_COUNT,W
ANDWF IRQEN,W
BTFSC STATUS,Z
GOTO NEXTD
ANDLW 0X01
BTFSC STATUS,Z
GOTO NEXTD
MOVLW MI_NOTAGERR ;0XFF
MOVWF KA_STATUS
;
NEXTD MOVF COMMAND,W
XORLW PCD_TRANSCEIVE ;0X0C
BTFSS STATUS,Z
GOTO NEXTC
MOVLW FIFOLEVILREG ;0X0A
MOVWF REGADR
CALL READRAWRC
MOVWF N_COUNT
MOVLW COTROLREG ;0X0C
MOVWF REGADR
CALL READRAWRC
ANDLW 0X07
MOVWF LASTBITS
;
MOVF POUTLENBIT,W
MOVWF FSR
MOVF LASTBITS,W
BTFSC STATUS,Z
GOTO F_ELSE1
DECF N_COUNT,W
MOVWF TEMPA
CLRF LEN
BCF STATUS,C
RLF TEMPA,F
RLF LEN,F
RLF TEMPA,F
RLF LEN,F
RLF TEMPA,F ;(N_COUNT-1)*8 (高位在LEN,低位在TEMPA)
RLF LEN,F
DECF FSR,F
MOVF LASTBITS,W
ADDWF TEMPA,W
MOVWF INDF
INCF FSR,F
MOVF LEN,W
BTFSS STATUS,C
GOTO NOTCY
ADDLW 0X01
NOTCY MOVWF INDF
GOTO NEXTE
;
F_ELSE1 MOVF N_COUNT,W
MOVWF TEMPA
CLRF LEN
BCF STATUS,C
RLF TEMPA,F
RLF LEN,F
RLF TEMPA,F
RLF LEN,F
RLF TEMPA,F ;(N_COUNT)*8 (高位在LEN,低位在TEMPA)
RLF LEN,F
MOVF LEN,W
MOVWF INDF
DECF FSR,F
MOVF TEMPA,W
MOVWF INDF
NEXTE
MOVF N_COUNT,W
BTFSS STATUS,Z
GOTO NEXTF
INCF N_COUNT,F
NEXTF
MOVF N_COUNT,W
SUBLW MAXRLEN
BTFSC STATUS,C
GOTO NEXTG
MOVLW MAXRLEN
MOVWF N_COUNT
;
NEXTG MOVLW 0
MOVWF JSQI
MOVF POUTDATA,W
MOVWF FSR
LOOPRD MOVLW FIFODATAREG ;0X09
MOVWF REGADR
CALL READRAWRC
MOVWF INDF
INCF FSR,F
INCF JSQI,F
MOVF N_COUNT,W
SUBWF JSQI,W
BTFSS STATUS,C
GOTO LOOPRD
GOTO NEXTC
;
F_ELSE2
MOVWF KA_STATUS ;MI_ERR
;
NEXTC
MOVLW COTROLREG ;0X0C
MOVWF REGADR
MOVLW 0X80
MOVWF MASK
CALL SETBITMASK
;
MOVLW COMMANDREG ;0X01
MOVWF REGADR
MOVLW PCD_IDLE ;0X00
MOVWF VALUE
CALL WRITERAWRC
MOVF KA_STATUS,W
; ;出口BANK0
RETURN
;##################################################
;-----------------------------------------------
;复位RC522, 无参数; 成功:返回MI_OK
;M_RST==RB5;MI_OK==0;
;-----------------------------------------------
PCDRESET ;3
BANKSEL TRISB ;!!!!!!!!!!!!
BCF TRISB,5
BANKSEL PORTB
;
; CALL T1S
BSF M_RST
; CALL T1S
BCF M_RST
; CALL T1S
BSF M_RST
; CALL T1S
;
MOVLW COMMANDREG ;0X01
MOVWF REGADR
MOVLW PCD_RESETPHASE;0X0F
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(COMMANDREG,PCD_RESETPHASE)
; CALL T1S
;
MOVLW MODEREG ;0X11
MOVWF REGADR
MOVLW 0X3D
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(MODEREG,0X3D)
; CALL T1S
;
MOVLW TRELOADREGL ;0X2D
MOVWF REGADR
MOVLW 0X1E
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(TRELOADREGL ,0X1E)
; CALL T1S
;
MOVLW TRELOADREGH ;0X2C
MOVWF REGADR
MOVLW 0
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(TRELOADREGH ,0)
; CALL T1S
;
MOVLW TMODEREG ;0X2A
MOVWF REGADR
MOVLW 0X8D
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(TMODEREG,0X8D)
; CALL T1S
;
MOVLW TPRESCALERREG ;0X2B
MOVWF REGADR
MOVLW 0X3E
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(TPRESCALERREG,0X3E)
; CALL T1S
;
MOVLW TXASKREG ;0X15
MOVWF REGADR
MOVLW 0X40
MOVWF VALUE
CALL WRITERAWRC ;WRITERAWRC(TXASKREG,0X40)
; CALL T1S
;
RETLW MI_OK ;0
;-------------------------------------------------------
;寻卡
;参数:REQ_CODE:寻卡方式 (0X52:寻所有附合14443标准的卡;0X26:寻未进入休眠的卡)
PCDREQUEST ;12
MOVLW STATUS2REG ;0X08
MOVWF REGADR
MOVLW 0X08
MOVWF MASK
CALL CLEARBITMASK
;
MOVLW BITFRAMINGREG ;0X0D
MOVWF REGADR
MOVLW 0X07
MOVWF VALUE
CALL WRITERAWRC
;
MOVLW TXCONTROLREG ;0X14
MOVWF REGADR
MOVLW 0X03
MOVWF MASK
CALL SETBITMASK
;
MOVF REQ_CODE,W ;REQ_CODE=0X52
BSF STATUS,RP0
MOVWF MF522BUF0
BCF STATUS,RP0
;
PCD_COMF522 0X01 ;长度=1
CALL PCDCOMF522
MOVF KA_STATUS,W
;
BTFSS STATUS,Z
GOTO PR_ELSE
MOVF UNLENH,W
BTFSS STATUS,Z
GOTO PR_ELSE
MOVF UNLENL,W
XORLW 0X10
BTFSS STATUS,Z
GOTO PR_ELSE
;
MOVF PTAGTYPE,W ;状态OK且长度=0X10
MOVWF FSR
BSF STATUS,RP0
MOVF MF522BUF0,W ;MF522BUF0
MOVWF INDF
INCF FSR,F
MOVF MF522BUF1,W ;MF522BUF1
MOVWF INDF
BCF STATUS,RP0
MOVF KA_STATUS,W ;MI_OK
RETURN
PR_ELSE
MOVLW MI_ERR ;0XFE
MOVWF KA_STATUS
MOVF KA_STATUS,W
RETURN
;------------------------------------------------------
;防冲撞:参数:PSNR=卡片类型码指针
;------------------------------------------------------
PCDANTICOLL ;14
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_STATUS,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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -