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

📄 gj0420.asm

📁 公司以前的项目
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;
;*********************** GJIC06.ASM  ***************************
;   This program use sleep!
;   This Lock driver is DC MOTOR.
;
;   RA0----前门开关输入QKG
;   RA1----后门开关输入HKG
;   RA2----电机2驱动+
;   RA3----触发按扭输入;外部上拉,BOTTON
;   RA4----VCO检测
;   RA5----电机2驱动-
;
;   RB4----SDI
;   RB5----外部上拉,MF_RST 
;   RB6----SCK,HT9200时钟
;   RB7----RING输入
;
;   RC0----AN4,VCP模拟输入
;   RC1----比较器1输入
;   RC2----输出,读卡电源使能(‘1’)
;   RC3----输出,MT9200 片选(‘0’)
;   RC4----输出,电机1驱动+
;   RC5----输出,电机1驱动-
;   RC6----输出,充电禁止
;   RC7----输出,SDO
;
;   f=INTERNAL 4MHZ              Date:2006-03-27
;   ID==4935  Checksum=1169
;**************************************************************** 
        LIST P=16f690
        INCLUDE "GJJX.INC"
;******************************************
PUSH       MACRO   
           MOVWF   W_BUF
           SWAPF   W_BUF,F
	       SWAPF   STATUS,W
	       MOVWF   STS_BUF
           ENDM
;
POP        MACRO
           SWAPF   STS_BUF,W
	       MOVWF   STATUS
	       SWAPF   W_BUF,W
           ENDM
;******************************************
DJ1_DRA    MACRO             ;前锁开      
           BANKSEL TRISC
           BCF     TRISC,5
           BCF     TRISC,4 
           BANKSEL PIR1
           BCF     PORTC,5
           BSF     PORTC,4     
           ENDM
;******************************************
DJ1_DRB    MACRO             ;前锁闭                     
           BANKSEL TRISC
           BCF     TRISC,5
           BCF     TRISC,4 
           BANKSEL PIR1
           BSF     PORTC,5
           BCF     PORTC,4 
           ENDM
;******************************************
DJ1OFF     MACRO             ;关闭DJ1驱动          
           BANKSEL TRISC
           BSF     TRISC,5
           BSF     TRISC,4 
           BANKSEL PIR1
           ENDM
;******************************************
DJ2_DRA    MACRO             ;后锁开           
           BANKSEL TRISC
           BCF     TRISA,2
           BCF     TRISA,5 
           BANKSEL PIR1
           BSF     PORTA,2
           BCF     PORTA,5
           ENDM
;******************************************
DJ2_DRB    MACRO             ;后锁闭       
           BANKSEL TRISC
           BCF     TRISA,2
           BCF     TRISA,5 
           BANKSEL PIR1
           BCF     PORTA,2
           BSF     PORTA,5    
           ENDM
;******************************************
DJ2OFF     MACRO             ;关闭DJ2驱动          
           BANKSEL TRISC
           BSF     TRISA,2
           BSF     TRISA,5 
           BANKSEL PIR1
           ENDM
;******************************************
;RB5Z0      MACRO
;           BANKSEL TRISB
;           BCF     TRISB,5
;           BANKSEL PIR1
;           BCF     PORTB,5  
;           ENDM  
;******************************************
;RB5Z1      MACRO
;           BANKSEL TRISB
;           BCF     TRISB,5
;           BANKSEL PIR1
;           BSF     PORTB,5  
;           ENDM 
;******************************************
CHG_INH    MACRO              ;禁止充电
           BANKSEL TRISB
           BCF     TRISB,5
           BANKSEL PIR1
           BSF     PORTB,5  
           ENDM  
;******************************************
CHG_EN     MACRO              ;使能充电
           BANKSEL TRISB
           BCF     TRISB,5
           BANKSEL PIR1
           BCF     PORTB,5  
           ENDM 
;******************************************
LED_ON     MACRO              ;LED亮
           BANKSEL TRISC
           BCF     TRISC,7
           BANKSEL PIR1
           BCF     PORTC,7  
           ENDM 
;******************************************
LED_OFF    MACRO              ;
           BANKSEL TRISB
           BSF     TRISC,7
           BANKSEL PIR1 
           ENDM 
;******************************************
DC3V_EN    MACRO
		   BANKSEL TRISC
		   BCF     TRISC,2
		   BANKSEL PIR1
		   BSF	   EN_3V
		   ENDM
;******************************************
DC3V_disEN MACRO
		   BANKSEL TRISC
		   BCF     TRISC,2
		   BANKSEL PIR1
		   BCF	   EN_3V
		   ENDM
;******************************************************************************
;与RC522相关的宏
;******************************************************************************
PCD_COMF522 MACRO    MA1             ;MA1=发送数据的字节长度;调用前,要把长度送INLENBYTE !!!!!!!!!!!!!!!!
            BANKSEL  PIR1            ;BANK0
            
            MOVLW    PCD_TRANSCEIVE  ;0X0C=发送并接收数据
            MOVWF    COMMAND         ;发给RC522的命令暂存单元
            
            MOVLW    MF522BUF0       ;MF522BUF0=源块数据缓冲区首址C0h--D1h,18 BYTES ;D0,D1=CRCL,CRCH
            MOVWF    PINDATA         ;通过RC522(发送到卡片)的数据
            MOVWF    POUTDATA        ;接收到的(卡片返回)数据?????????????????
           
            MOVLW    UNLENH          ;UNLENH=返回数据的(位)长度(H)高??????
            MOVWF    POUTLENBIT      ;POUTLENBIT EQU    0X66
           
            MOVLW    MA1             ;
            MOVWF    INLENBYTE       ;发送数据的字节长度,INLENBYTE  EQU    0X67
            ENDM 
;------------------------------------------------------
CALUCRC_N   MACRO    MA2,MA3         ;MA2=?,MA3=所求CRC的数据长度
            BANKSEL  PIR1            ;BANK0
            MOVLW    MF522BUF0       ;MF522BUF0,源块数据缓冲区首址
            MOVWF    PINDATA
            
            MOVLW    MA2             ;MF522BUF2????????????
            MOVWF    POUTDATA        ;接收到的卡片返回数据
           
            MOVLW    MA3
            MOVWF    LEN             ;LEN  EQU  0X59 ;所求CRC的数据长度
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_REQUEST MACRO	 MA4,MA5         ;MA4=寻卡方式,MA5= 卡类型
            BANKSEL  PIR1            ;BANK0
			MOVLW	 MA4
            MOVWF    REQ_CODE        ;REQ_CODE   EQU    0X63 寻卡方式:0x52(寻全部卡)/0x26(寻未休眠卡)
            MOVLW    MA5
            MOVWF    PTAGTYPE        ;PTAGTYPE   EQU    0X52 卡类型,两字节
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_ANTICOLL MACRO	 MA6             ;MA6=卡片序列号,4字节????????????????????/
            BANKSEL  PIR1
			MOVLW	 MA6
            MOVWF    PSNR            ;PSNR  EQU  0X53  卡片序列号,4字节
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_AUTHSTA MACRO    MA8,MA9,MA10    ;MA8=密钥验证方式0x60(A密钥)/0x61(B密钥),MA9=块地址?????,MA10=卡片序列号????????
            BANKSEL  PIR1
			MOVLW	 MA8
            MOVWF    AUTH_MODE       ;AUTH_MODE  EQU  0X64 ,  密钥验证方式0x60/0x61
			
			MOVLW	 MA9
            MOVWF    ADDR            ;ADDR  EQU  0X5E, 块地址
			
			MOVLW	 DEFKEYBUF       ;DEFKEYBUF  EQU   0X7A , 缺省密钥值6字节(0X7A~0X7F)
            MOVWF    PKEY            ;PKEY       EQU   0X54 ,卡片密钥,6字节
		
			MOVLW	 MA10
            MOVWF    PSNR            ;PSNR  EQU  0X53 , 卡片序列号,4字节
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_READ    MACRO    MA11,MA12       ;读卡内数据
            BANKSEL  PIR1
			MOVLW	 MA11
            MOVWF    ADDR            ;ADDR=块地址?????????
			
			MOVLW	 MA12
            MOVWF    PDATA           ;PDATA=读/写数据指针
            ENDM                     ;出口BANK0
;**************************************************************************************          
;------------------------------------------------------
EE_WRITE    MACRO	 MA7             ;MA7=EEPROM Address;690EEPROM WRITE
            BANKSEL  EECON1          ;BANK3
			BTFSC	 EECON1,WR       ;Write Control bit;1(正在写周期)/0(写完成)
			GOTO	 $-1
            BANKSEL  EEADR           ;BANK2
			MOVLW	 MA7           
			MOVWF	 EEADR           ;EEPROM Address Register,EEADR    EQU     H'010D'
;			MOVLW	 0X66
			MOVF     EETAMP,W
			MOVWF	 EEDATA
            BANKSEL  EECON1
 			BCF 	 EECON1,EEPGD    ;EEPGD CFGS — FREE WRERR WREN WR RD ,Flash Program or Data EEPROM Memory Select bit= 1/0
			BSF  	 EECON1,WREN     ;Flash Program/Data EEPROM Write Enable bit
			BCF 	 INTCON,GIE
;-------WRITE EEPROM MUST HAVE THIS SEQUENCE---------
			MOVLW	 0X55
			MOVWF	 EECON2          ;	
			MOVLW	 0XAA
			MOVWF	 EECON2
			BSF		 EECON1,WR
;---------------------------------------------------
			NOP
			NOP
			BCF		 EECON1,WREN
            BANKSEL  PIR1
            ENDM                     ;出口BANK0
;***************************************************************************************
           org     0X00
           nop
           goto    START  
;----------------------------------  
           org     0X04
           goto    PICINT   
;-----------------------------------------
;取门状态对应DTMF码:入口:W=000000XX
;-----------------------------------------
           org     0X10
GET_MCODE                       ;
           ADDWF   PCL,F
           RETLW   0X0        ;'0',门全关                      
	       RETLW   0X0E       ;'E',后门关 
           RETLW   0X0D       ;'D',前门关                                 
	       RETLW   0X0F       ;'F',门全开    
;********************************************************

;*************************************************************
;MAIN PROGRAM
;*************************************************************
           Org     0x40        ;
START
           NOP            
           CALL    T10MS 
;           BANKSEL OSCCON
;           BTFSS   OSCCON,HTS
;           GOTO    START        ;等待时钟稳定  
           CALL    INIT690B      ;初始化
;
		   MOVLW   0XFF
		   MOVWF   DEFKEYBUF
		   MOVWF   DEFKEYBUF1
		   MOVWF   DEFKEYBUF2
		   MOVWF   DEFKEYBUF3
		   MOVWF   DEFKEYBUF4
		   MOVWF   DEFKEYBUF5
;
		   DC3V_EN
           LED_ON
           CALL    T1S
           CALL    T1S
		   DC3V_disEN
           LED_OFF
           bcf      ANSTS,7
           clrf    ANTIM
;           
           BSF     INTCON,GIE    ;开总中断  
           MOVLW   0X02          ;
           MOVWF   TEXIT1        ;上电电机1复位
           MOVWF   TEXIT2        ;上电电机2复位                   
;**           BSF     VLINE         ;设定为挂机
;

;
MAINLP     
           NOP
           NOP
;**           BTFSC   VLINE         ;VLINE=0
;**           GOTO    MAINLP        ;
;
;**           SLEEP                 ;是摘机进入休眠
		   DC3V_disEN
;          ;中断唤醒分支到0004H
           NOP
           NOP
           BTFSS   STATUS,NOT_TO    ;超时位,WDT清零时复位
           GOTO    START         ;
           NOP
           NOP
           GOTO    MAINLP
;****************************************
;中断入口:1:定时器2;
;          2:口变化;
;---------------------------------------
PICINT
           PUSH    
;**           BTFSC    C1IF
;**           CALL     C1_SERVICE
;
;**           BTFSS    VLINE
;**           GOTO     INT_END   ;当前摘机,仅比较器1中断
;          当前挂机,使能T1,比较器1,引脚变化中断
           BTFSC    IOIF         ;处理引脚变化中断
           CALL     IOC_SERVICE
;
           MOVF    CHGDLY,F    ;******充电使能延时计数器??????
           BTFSC   STATUS,Z    ;******
           call    read_send   ;IC卡主程序
		   nop
;
           BTFSC    T2IF         ;处理T2中断
           CALL     T2_SERVICE 
           BCF      T2IF
INT_END
	       POP
           RETFIE   
;*******************************************
IOC_SERVICE                   ;振铃信号变化 
           BANKSEL  PIR1
           MOVF     PORTB,W   ;
           MOVWF    PBSTS1    ;
           BCF      IOIF      ;                 
           MOVLW    RISLOT    ;加载振铃信号最大间隔
           MOVWF    RIDLY     ;时间(单位:50MS) 
           CHG_INH
           MOVLW    0X04      ;200MS禁止
           MOVWF    CHGDLY    ;禁止充电 ;充电使能延时计数器        
           RETURN  
;*******************************************
;TMR2 50毫秒中断
;*******************************************
T2_SERVICE
           BANKSEL  PIR1
           CALL    LED_LINK    ;充电LED闪烁控制
           CALL    RING_TST    ;振铃信号测试
           CALL    DOOR_STS    ;测试门状态         
;
           MOVF    ANTIM,W    ;******????????
           BTFSS   STATUS,Z    ;******
           decf    ANTIM,F
           nop
           INCF    MSCNT,F     
           MOVLW   0x14            
           SUBWF   MSCNT,W
           BTFSC   CY         
           GOTO    T1SDONE     ;1秒到 
;                
           BTFSC   DSTS,7      ;1秒未到,门状态变化?
           GOTO    SEND_DSTS   ;
           RETURN              ;门状态未变化  
T1SDONE    ;1秒到         
           CALL    LOCK1_CLOSE ;前锁归位
           CALL    LOCK2_CLOSE ;后锁归位                
    
           CLRF    MSCNT       ;
           INCF    T_SEND,F    ;发送定时增量       
           MOVLW   0x0C        ;判发送周期到?
           SUBWF   T_SEND,W    
           BTFSS   CY
           RETURN              ;12秒发送周期未到
           ;12秒发送周期到,清看门狗             
           CLRWDT              
;----------事件或定时发送双音频     
SEND_DSTS 
           MOVF    CHGDLY,F    ;振铃期间
           BTFSS   STATUS,Z    ;禁发双音频
           RETURN
; 
           BCF     DSTS,7      ;清状态变化标志

⌨️ 快捷键说明

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