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

📄 gj0420.asm

📁 公司以前的项目
💻 ASM
📖 第 1 页 / 共 5 页
字号:
CRRAMLP    clrf    INDF                 ;
           incf    FSR,1                ;
           MOVF    FSR,W                ;
           SUBLW   0x60                 ;
           BTFSS   STATUS,Z
           goto    CRRAMLP              ;
           RETURN           
;*******************************************************************
;SEND DTMF ROUTINE
;*******************************************************************
;DTMF_D                                  ;H-door on
;           movlw    0x0d                ;Send "A"=01101", H-door is on
;           movwf    TEMP                ;
;           CALL     WR_9200A            ;
;           RETURN
;---------------------------------------;
;DTMF_E                                   ;Q-door on
;           movlw    0x0e                ;Send "b"=01110", Q-door is on
;           movwf    TEMP                ;
;           CALL     WR_9200A            ;
;           RETURN
;---------------------------------------;
;DTMF_F                                   ;H-door and Qdoor on
;           movlw    0x0f                ;Send "c"=01111", doors are on
;           movwf    TEMP                ;
;           CALL     WR_9200A            ;
;           RETURN                       ;
;---------------------------------------; 
;DTMF_0                                   ;Off door 
;           clrf     TEMP                ;Send "D"=00000", door is off
;           CALL     WR_9200A            ;
;           RETURN
;----------------------------------------------------------------------
;发送DTBUF中n位(DTCNT)双音频:
;----------------------------------------------------------------------
DTMF_SEND 
           BANKSEL  PIR1
           MOVF     DTCNT,F      ;
           BTFSC    STATUS,Z
           RETURN                ;发送长度0
;
           CHG_INH               ;禁止充电
;
           BANKSEL  TRISB         ;RC3,RC7,RB6 IS OUTPUT    
           BCF      TRISB,6       ;
           BCF      TRISC,7       ;
           BCF      TRISC,3       ;
           BANKSEL  PIR1  
           BSF      SCK           ;SCK=1
           BCF      MOSI
           BCF      HT92_CE       ;CE=0 ,线路摘机
           CALL     T100MS         ;   
SDTMF_LP0  
           MOVF     DTADDR,W     ;地址指针至FSR 
           MOVWF    FSR 
           INCF     DTADDR,F     ;地址指针增量       
           MOVF     INDF,W        ;
           MOVWF    TEMP          ; 
;       
           CALL     WR_9200A      ;写5位DTMF码
           CLRWDT
;           CALL    T1S
;           CALL     T200MS        ;到9200A 
           CALL     T100MS         ;!!!!!!!T100MS不行,分不开8888 8888
           CALL     T100MS         ;添加????????                
;
           DECFSZ   DTCNT,F
           GOTO     SDTMF_LP0      ;
;
           MOVLW    0X1F           ;写5位STOP码
           MOVWF    TEMP           ;到9200A
           CALL     WR_9200A       
;
           BSF      HT92_CE         ;禁止9200A
           BCF      MOSI            ;Let PB2=DATA=0                    
           BANKSEL  TRISB
           BSF      TRISC,3         ;CE=1,挂机
           BSF      TRISB,6         ;SCK=1
           BSF      TRISC,7         ;
           BANKSEL  PORTA
;
           CALL     T50MS       ;等待挂机稳定  
;
           CLRF     MSCNT       ;重开定时发送
           CLRF     T_SEND      ;
;
;**           BANKSEL  CM1CON0
;**           MOVF     CM1CON0,W   ;消除自动发送DTMF
;**           BANKSEL  PORTA
;**           BCF      C1IF        ;产生的摘,挂机中断
    
           RETURN               ; 
;----------------------------------------------------------------------
;发送一个双音频:TEMP=DTMF CODE 
;执行时间:13X5+4=69US
;----------------------------------------------------------------------
WR_9200A  
           MOVLW    0X05
           MOVWF    VLCNT                   
WR_92LP   
           rrf      TEMP,1           ;
           bcf      MOSI             ;
           btfsc    STATUS,C         ;
           bsf      MOSI             ;PORTB=11011011/11011111
           bcf      SCK              ;SCK ViH to ViL
           NOP                       ;
           NOP                       ;
           NOP
           NOP
           bsf      SCK              ;CK ViL to ViH
           decfsz   VLCNT,1          ;
           goto     WR_92LP          ; 
           RETURN                    ; 
;###############################################################
;RF522读卡器程序
;###############################################################
;CRC16函数
; 参数:*PINDATA:输入数据指针  
;       LEN: 长度
;       *POUTDATA: 输出数据指针(次序:crcL,crcH;?????????)
CALULATECRC                           ;18          
            BANKSEL  PORTC
            MOVLW    DIVIRQREG       ;0X05
            MOVWF    REGADR
            MOVLW    0X04
            MOVWF    MASK
            CALL     CLEARBITMASK    ;清CRCIRQ位
;
            MOVLW    COMMANDREG      ;0X01
            MOVWF    REGADR
            MOVLW    PCD_IDLE        ;0X00
            MOVWF    VALUE
            CALL     WRITERAWRC      ;取消当前执行的命令
;
            MOVLW    FIFOLEVILREG    ;0X0A
            MOVWF    REGADR
            MOVLW    0X80
            MOVWF    MASK
            CALL     SETBITMASK      ;请FIFO指针
;
            MOVLW    0
            MOVWF    JSQI
LOOPCRC        
            MOVF     PINDATA,W      
            MOVWF    FSR
            MOVLW    FIFODATAREG      ;0X09
            MOVWF    REGADR
            MOVF     JSQI,W
            ADDWF    FSR,F
            MOVF     INDF,W 
            MOVWF    VALUE
            CALL     WRITERAWRC     ;写字节到FIFODATAREG
;
            INCF     JSQI,F
            MOVF     LEN,W
            SUBWF    JSQI,W
            BTFSS    STATUS,C		;C=0时,有借位
            GOTO     LOOPCRC        ;未写完
;                                   ;JSQI=len
            MOVLW    COMMANDREG     ;0X01
            MOVWF    REGADR
            MOVLW    PCD_CALCCRC    ;0X03 
            MOVWF    VALUE
            CALL     WRITERAWRC     ;命令522计算校验和
;
            MOVLW    0XFF
            MOVWF    JSQI           ;
LOOPDO      
            MOVLW    DIVIRQREG       ;0X05
            MOVWF    REGADR
            CALL     READRAWRC                                      ;
;            MOVWF    JSQL           ;JSQL=x00x0 CRCIRQ 00
            ANDLW    0X04
            BTFSS    STATUS,Z
            GOTO     CRCEND       ;CRCIRQ=1,检验完   
;
            DECFSZ   JSQI,F       ;
            GOTO     LOOPDO       ;未到256次
CRCEND      ;读2字节检验和
            MOVF     POUTDATA,W
            MOVWF    FSR
            MOVLW    CRCRESULTREGL   ;0X22
            MOVWF    REGADR
            CALL     READRAWRC
            MOVWF    INDF
;
            INCF     FSR,F
            MOVLW    CRCRESULTREGM   ;0X21
            MOVWF    REGADR
            CALL     READRAWRC      
            MOVWF    INDF  
            RETURN
;----------------------------------------------           
;读RC522寄存器(地址在REGADR中)返回读出的值在VALUE中
;SCK==RB6,MISO==RB4,MOSI==RC7;
;工作单元:REGADR,UCADDR,VALUE,BJSQ 
READRAWRC                                ;1
            BANKSEL  TRISC
		    BCF      TRISC,3
		    BCF      TRISC,7
		    BCF      TRISB,6
		    BSF      TRISB,4
		    
		    BCF      TRISC,6
           
            BANKSEL  PIR1
;
            CLRF     VALUE
            BCF      SCK
			NOP
            BCF      SS
			MOVF	 REGADR,W
            MOVWF    UCADDR      ;暂存单元
            RLF      UCADDR,W
	        ANDLW    0X7E
            IORLW    0X80        ;UCADDR=1AAAAAA0           
            MOVWF    UCADDR      ;
            MOVLW    0X08
            MOVWF    BJSQ  
;写地址
LOOPR1      
            BCF      MOSI          ;写地址 
            BTFSC    UCADDR,7          
            BSF      MOSI    
MOSI_2      
            BSF      SCK
            RLF      UCADDR,F
;
            BCF      SCK
            DECFSZ   BJSQ,F
            GOTO     LOOPR1 
;读数据            
            MOVLW    0X08
            MOVWF    BJSQ 
LOOPR2   
            BSF      SCK
;
            RLF      VALUE,F    ;            
            BCF      VALUE,0
            BTFSC    MISO 
            BSF      VALUE,0
;
			BCF      SCK
            DECFSZ   BJSQ,F
            GOTO     LOOPR2
;
            BSF      SS
			NOP
            BSF      SCK
            MOVF     VALUE,W
            RETURN
;-----------------------------------------------
;写RC522寄存器:入口,地址在REGADR中,数据在VALUE中)
;工作单元:REGADR,UCADDR,BJSQ(Bottom 计数器) 
WRITERAWRC                      ;2
            BANKSEL  TRISC
		    BCF      TRISC,3
		    BCF      TRISC,7
		    BCF      TRISB,6
		    BSF      TRISB,4
		    
		    BCF      TRISC,6
            
            BANKSEL  PIR1
;
            BCF      SCK
			NOP
            BCF      SS   
			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      SS
			NOP
            BSF      SCK  
            RETURN
;----------------------------------------------   
;置 RC522寄存器 位 ; 
;参数:REGADR:寄存器地址
;     MASK:置位值;
;----------------------------------------------
SETBITMASK                          ;4
            CALL     READRAWRC      ;读寄存器
            MOVWF    VALUE       
            MOVF     MASK,W         ;值修改
            IORWF    VALUE,F
            CALL     WRITERAWRC     ;写寄存器
            RETURN
;--------------------------------------------- 
;清 RC522寄存器 位 
; 参数: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_STATUS
            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

⌨️ 快捷键说明

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