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

📄 gj070613.asm

📁 公司以前的项目
💻 ASM
📖 第 1 页 / 共 4 页
字号:
			BCF      SCK
            DECFSZ   BJSQ,F
            GOTO     LOOPR2
;
            BSF      SSEL
			NOP
            BSF      SCK
            MOVF     VALUE,W
            RETURN
;-----------------------------------------------
;写RC632寄存器:入口,地址在REGADR中,数据在VALUE中)
;工作单元:REGADR,UCADDR,BJSQ 
WRITERAWRC                      ;2
            BANKSEL  TRISC
		    BCF      TRISC,3
		    BCF      TRISC,7
		    BCF      TRISB,6
		    BCF      TRISC,6
		    BSF      TRISB,4
            BANKSEL  PIR1
;
            BCF      SCK
			NOP
            BCF      SSEL   
			MOVF	 REGADR,W
            MOVWF    UCADDR
            RLF      UCADDR,W
	        ANDLW    0X7E
	        MOVWF    UCADDR      ;UCADDR=0AAAAAA0
            MOVLW    0X08
            MOVWF    BJSQ  
LOOPR10    
            BCF      MOSI          ;写地址   
            BTFSC    UCADDR,7
            BSF      MOSI
;
            BSF      SCK
            RLF      UCADDR,F
;
            BCF      SCK
            DECFSZ   BJSQ,F
            GOTO     LOOPR10
;写数据            
            MOVLW    0X08
            MOVWF    BJSQ 
LOOPR20     
            BCF      MOSI    
            BTFSC    VALUE,7
            BSF      MOSI    

MOSI_21     BSF      SCK
            RLF      VALUE,F
;
            BCF      SCK
            DECFSZ   BJSQ,F
            GOTO     LOOPR20
;
            BSF      SSEL
			NOP
            BSF      SCK  
            RETURN
;----------------------------------------------   
;置RC522寄存器位 ; 参数:REGADR , MASK;
;REGADR:寄存器地址,MASK:置位值;
;----------------------------------------------
SETBITMASK                          ;4
            CALL     READRAWRC      ;读寄存器
            MOVWF    VALUE       
            MOVF     MASK,W         ;值修改
            IORWF    VALUE,F
            CALL     WRITERAWRC     ;写寄存器
            RETURN
;--------------------------------------------- 
;清RC522寄存器位 ; 参数:REG , MASK;
;REG:寄存器地址,MASK:置位值;
;---------------------------------------------          
CLEARBITMASK                        ;5
            CALL     READRAWRC      ;读寄存器
            MOVWF    VALUE
            COMF     MASK,W
            ANDWF    VALUE,F        ;值修改
            CALL     WRITERAWRC     ;写寄存器
            RETURN
;---------------------------------------------
;开启天线   每次开启或关闭之间应至少有1MS间隔!
;工作单元: TEMPA;
PCDANTENNAON                       ;        
            MOVLW    TXCONTROLREG  ;0X14:   INVT2RF INVT1RF INVTX2RF INVTX1RF TX2CW  0  TX2RFEN  TX1RFEN
            MOVWF    REGADR
            CALL     READRAWRC
            MOVWF    TEMPA
            MOVLW    0X03           
            ANDWF    TEMPA,W
            BTFSS    STATUS,Z       ;TX2RFEN,TX1RFEN=11?
            RETURN                  ;
            MOVLW    0X03           ;
            MOVWF    MASK
            MOVLW    TXCONTROLREG   ;0X14
            MOVWF    REGADR         ;
            CALL     SETBITMASK     ;TX2RFEN,TX1RFEN=11
            RETURN
;----------------------------------------------
;关闭 天线   每次开启或关闭之间应至少有1MS间隔!
PCDANTENNAOFF                             ;7
            MOVLW    TXCONTROLREG         ;0X14:   INVT2RF INVT1RF INVTX2RF INVTX1RF TX2CW  0  TX2RFEN  TX1RFEN
            MOVWF    REGADR
            MOVLW    0X03
            MOVWF    MASK
            CALL     CLEARBITMASK
            RETURN
;-----------------------------------------------
;通过RC522和ISO14443卡通讯
;参数: COMMAND,RC522命令字,输入
;PINDATA:通过RC522发送到卡的数据,输入,开始地址PINDATA
;INLENBYTE:发送数据的字节长度,输入
;POUTDATA:接收到的卡片返回数据,输出
;POUTLENBIT:返回数据的长度
;------------------------------------------------
PCDCOMF522                              ;9
            MOVLW    MI_ERR               ;0XFE 
            MOVWF    KA_STS
            CLRF     IRQEN
            CLRF     WAITFOR
            MOVF     COMMAND,W
;
            XORLW    PCD_AUTHENT          ;0X0E
            BTFSC    STATUS,Z
            GOTO     YZMIMA
;
            MOVF     COMMAND,W
            XORLW    PCD_TRANSCEIVE       ;0X0C
            BTFSC    STATUS,Z
            GOTO     TRANSCEIVE
            GOTO     NEXTA
;          
YZMIMA      MOVLW    0X12                 ;验证密钥
            MOVWF    IRQEN
            MOVLW    0X10
            MOVWF    WAITFOR
            GOTO     NEXTA
;            
TRANSCEIVE  MOVLW    0X77                 ;发并收
            MOVWF    IRQEN
            MOVLW    0X30
            MOVWF    WAITFOR
NEXTA
            MOVLW    COMIENREG            ;0X02 
            MOVWF    REGADR  
            MOVLW    0X80                 ;ENABLE INTERRUPT 
            IORWF    IRQEN,W
            MOVWF    VALUE
            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_STS
;
            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_STS
;
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_STS         ;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_STS,W
;                                     ;出口BANK0
            RETURN  
;##################################################
;-----------------------------------------------                 
;复位RC522, 无参数; 成功 返回MI_OK
;M_RST==RC6;MI_OK==0;
;-----------------------------------------------  
PCDRESET                                  ;3
            BANKSEL  TRISC
		    BCF      TRISC,6
            BANKSEL  PORTC
;
            BSF      M_RST
            BCF      M_RST
            BSF      M_RST
;
            MOVLW    COMMANDREG    ;0X01
            MOVWF    REGADR
            MOVLW    PCD_RESETPHASE;0X0F
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(COMMANDREG,PCD_RESETPHASE) 
;                
            MOVLW    MODEREG       ;0X11
            MOVWF    REGADR
            MOVLW    0X3D
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(MODEREG,0X3D)
;
            MOVLW    TRELOADREGL   ;0X2D
            MOVWF    REGADR
            MOVLW    0X1E
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(TRELOADREGL ,0X1E)
;
            MOVLW    TRELOADREGH	;0X2C
            MOVWF    REGADR
            MOVLW    0
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(TRELOADREGH ,0)
;
            MOVLW    TMODEREG      ;0X2A
            MOVWF    REGADR
            MOVLW    0X8D
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(TMODEREG,0X8D)
;
            MOVLW    TPRESCALERREG  ;0X2B
            MOVWF    REGADR
            MOVLW    0X3E
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(TPRESCALERREG,0X3E)
;
            MOVLW    TXASKREG       ;0X15
            MOVWF    REGADR
            MOVLW    0X40
            MOVWF    VALUE
            CALL     WRITERAWRC    ;WRITERAWRC(TXASKREG,0X40)
;
            RETLW    MI_OK         ;0
;-------------------------------------------------------
;寻卡                 
;参数:REQ_CODE:寻卡方式 0X52:寻所有附合14443标准的卡;0X26:寻未进入休眠的卡
PCDREQUEST                             ;12
            PCD_REQUEST PICC_REQALL,G_UCTBUF
            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_STS,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           

⌨️ 快捷键说明

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