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

📄 gj070613.asm

📁 公司以前的项目
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;*********************** GJIC06.ASM  ***************************
;   This program use sleep!
;   This Lock driver is DC MOTOR.
;
;   RA0----前门开关输入/PDIO
;   RA1----后门开关输入/PDIO
;   RA2----电机2驱动+
;   RA3----触发按扭输入/VPP
;   RA4----LED
;   RA5----电机2驱动-
;
;   RB4----MISO
;   RB5----TPS60110使能(‘1’) 
;   RB6----SCK,HT9200时钟
;   RB7----RING输入
;
;   RC0----AN4,VCP模拟输入
;   RC1----比较器1输入
;   RC2----输出,读卡电源使能(‘1’)
;   RC3----输出,MT9200 片选(‘0’)
;   RC4----输出,电机1驱动+
;   RC5----输出,电机1驱动+
;   RC6----输出,充电禁止
;   RC7----输出,SDO
;
;   f=INTER 4MHZ              Date:2006-03-27
;   ID==4935  Checksum=1169
;**************************************************************** 
        LIST P=16f690
        INCLUDE "GJJX2.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
;******************************************
BEEP_ON    MACRO             ;蜂鸣器开           
           BANKSEL TRISC
           BCF     TRISA,2
           BANKSEL PIR1
           BSF     PORTA,2           
           ENDM
;******************************************
BEEP_OFF   MACRO             ;蜂鸣器闭       
           BANKSEL TRISC
           BSF     TRISA,2
           BANKSEL PIR1
           BCF     PORTA,2  
           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
;******************************************
HOOK_UP    MACRO    ;RC3=CE,RC7=SDO,RB6=SCK 
           BANKSEL  TRISB       ;   
           BCF      TRISB,6     ;
           BCF      TRISC,7     ;
           BCF      TRISC,3     ;
           BANKSEL  PIR1 
           BSF      SCK         ;SCK=1
           BCF      MOSI
           BCF      HT92_CE     ;CE=0 ,线路摘机  
           ENDM 
;******************************************
HOOK_OFF   MACRO    ;RC3=CE,RC7=SDO,RB6=SCK 
           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
           ENDM
;-----------------------------------------------------
PCD_COMF522 MACRO    MA1             ;调用前,要把长度送PINLENBYTE
            BANKSEL  PIR1
            MOVLW    PCD_TRANSCEIVE  ;0X0C
            MOVWF    COMMAND
            MOVLW    MF522BUF0       ;MF522BUF0
            MOVWF    PINDATA
            MOVWF    POUTDATA
            MOVLW    UNLENH          ;UNLENH
            MOVWF    POUTLENBIT
            MOVLW    MA1             ;
            MOVWF    INLENBYTE   
            ENDM 
;------------------------------------------------------
CALUCRC_N   MACRO    MA2,MA3
            BANKSEL  PIR1
            MOVLW    MF522BUF0       ;MF522BUF0
            MOVWF    PINDATA
            MOVLW    MA2             ;MF522BUF2
            MOVWF    POUTDATA
            MOVLW    MA3
            MOVWF    LEN             ;
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_REQUEST MACRO	 MA4,MA5
            BANKSEL  PIR1
			MOVLW	 MA4
            MOVWF    REQ_CODE
            MOVLW    MA5
            MOVWF    PTAGTYPE
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_ANTICOLL MACRO	 MA6
            BANKSEL  PIR1
			MOVLW	 MA6
            MOVWF    PSNR
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_AUTHSTA MACRO    MA8,MA9,MA10
            BANKSEL  PIR1
			MOVLW	 MA8
            MOVWF    AUTH_MODE
			MOVLW	 MA9
            MOVWF    ADDR
			MOVLW	 DEFKEYBUF
            MOVWF    PKEY
			MOVLW	 MA10
            MOVWF    PSNR
            ENDM                     ;出口BANK0
;------------------------------------------------------
PCD_READ    MACRO    MA11,MA12
            BANKSEL  PIR1
			MOVLW	 MA11
            MOVWF    ADDR
			MOVLW	 MA12
            MOVWF    PDATA
            ENDM                     ;出口BANK0
;------------------------------------------------------
EE_WRITE    MACRO	 MA7
            BANKSEL  EECON1
			BTFSC	 EECON1,WR
			GOTO	 $-1
            BANKSEL  EEADR
			MOVLW	 MA7
			MOVWF	 EEADR
;			MOVLW	 0X66
			MOVF     EETAMP,W
			MOVWF	 EEDATA
            BANKSEL  EECON1
 			BCF 	 EECON1,EEPGD
			BSF  	 EECON1,WREN
			BCF 	 INTCON,GIE
;
			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   0     ;"A"门开(门关状态,未锁)                    
	       RETLW   0X0E     ;"B"门开(门开状态,未锁)
           RETLW   0        ;"D"门关(门开状态,上锁)                                
	       RETLW   0X0F     ;"C"门开(门开状态,上锁)  
;********************************************************

;*************************************************************
;MAIN PROGRAM
;*************************************************************
           Org     0x40        ;
START
           NOP            
           CALL    T10MS 
           CALL    INIT690B      ;初始化	   
           CALL    LOCK_WZ0           
           BSF     INTCON,GIE    ;开总中断                             
MAINLP     
           NOP
           NOP
           NOP
           GOTO    MAINLP
;****************************************
;锁0位(即开锁);
;---------------------------------------
LOCK_WZ0                
           CHG_EN  
WAIT_VCOA
           CALL     T100MS
           CALL     LED_NOT   ;闪灯
           BTFSS    VCO       ;电压不足等待
           GOTO     WAIT_VCOA
;          充电满    
           LED_ON    
           DC3V_EN            ;使能读卡器电源  
           CALL     T1S
           CALL     T1S
           DC3V_disEN         ;关闭读卡器电源
           LED_OFF   
WAIT_VCOB
           CALL     T100MS
           CALL     LED_NOT   ;闪灯
           BTFSS    VCO       ;电压不足等待
           GOTO     WAIT_VCOB
           CALL     LOCK1_OPEN               
           RETURN
;****************************************
;中断入口:1。定时器1;口变化;
;---------------------------------------
PICINT
           PUSH    
           BTFSC    IOIF         ;处理引脚变化中断
           CALL     IOC_SERVICE
           ;
           BTFSC    T2IF         ;处理T1中断
           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  
;*******************************************
;50毫秒中断
;*******************************************
T2_SERVICE
           BANKSEL  PIR1
           CALL    LED_LINK    ;充电LED闪烁控制
           CALL    RING_TST    ;振铃信号测试
           CALL    DOOR_STS    ;测试门状态  
           ; 
           CALL    read_send   ;测读卡按钮
           ;
           CALL    OPLOCK_BP   ;开锁蜂鸣
           INCF    MSCNT,F     
           MOVLW   0x14            
           SUBWF   MSCNT,W
           BTFSC   CY         
           GOTO    T1SDONE     ;1秒到 
;                
           BTFSC   DSTS,7      ;1秒未到,门状态变化?
           GOTO    SEND_DSTS   ;
           RETURN              ;门状态未变化  
T1SDONE    ;1秒到    
           CALL    BP_CLOSE    ;蜂鸣器关闭       
           CALL    LOCK1_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      ;清状态变化标志
           MOVF    DSTS,W      ;     
           CALL    GET_MCODE   ;取门状态对应DTMF码   
           MOVWF   DTBUF       ;送发送缓冲区
           MOVLW   0X01
           MOVWF   DTCNT       ;发送码长1
           MOVLW    DTBUF      ;
           MOVWF    DTADDR     ; 置DTMF缓冲区首地址
           CALL    DTMF_SEND   ;启动发送 
; 
           CHG_EN              ;开放充电                                                     
           RETURN 
;-----------------------------------------
;充电LED闪烁控制
;-----------------------------------------  
LED_LINK
           BANKSEL  PIR1
           BTFSC   PORTB,5
           GOTO    LEDOFFA     ;是禁止充电
           BTFSC   VCO         ;
           GOTO    LEDOFFA     ;充电满
           BTFSC   MSCNT,1     ;
           GOTO    LEDOFFA
           LED_ON              ;充电亮灯
           RETURN
LEDOFFA    
           LED_OFF             ;充电灭灯
           RETURN
;******************************************
LED_NOT                   ;LED亮
           BTFSS   PORTC,7
           GOTO    OFF_LED
           LED_ON         ;LED亮
           RETURN
OFF_LED                   ;
           LED_OFF
           RETURN
;-----------------------------------------
;振铃测试
;-----------------------------------------  
RING_TST
           BANKSEL  PIR1
           MOVF    RIDLY,W
           BTFSC   ZERO
           GOTO    RINGEND     ;振铃信号中断/结束                             
           INCF    TRING,F     ;振铃持续,时间增量
           DECF    RIDLY,F
           RETURN              ;振铃未结束
RINGEND    ;振铃信号结束
           MOVF    CHGDLY,F    ;
           BTFSC   ZERO        ;
           GOTO    ENABLECHG
           DECFSZ  CHGDLY,F    ;
           RETURN              ;摘机机3秒禁充电
ENABLECHG
           CHG_EN              ;开放充电 
;
           BTFSC   OPLOCK      ;
           GOTO    LOCK_DOING  ;上次欠电锁未开   
           MOVLW   0X10        ;50MSX16=800MS
           SUBWF   TRING,W     ;
           BTFSS   CY
           GOTO    NACT_TIME   ;振铃时间小于0.8S         
          ;振铃时间大于0.8S判超4秒?
           MOVLW   0X50        
           SUBWF   TRING,W     ;
           BTFSC   CY          ;
           GOTO    NACT_TIME
           ;有效振铃时间;执行开锁
           SWAPF   TRING,F     ;
           MOVLW   0X03        ;TRING=000000XX
           ANDWF   TRING,W     ;TRING=01/02/03
           MOVWF   RINGNS      ;
           BSF     OPLOCK      ;置开锁标志 
LOCK_DOING  
           BTFSS    VCO        ;电压不足等待
           RETURN
;
           CALL    LOCK1_OPEN  ;开锁
           BCF     OPLOCK
NACT_TIME
           CLRF    TRING            
           RETURN      
;-----------------------------------------
;门状态滤波:出口,DSTS=C00000XX
;C=1,门状态改变;XX--门状态,0关1开
;-----------------------------------------
DOOR_STS     
           BANKSEL  PIR1         
           MOVF    PORTA,W    ;
           ANDLW   0X03
           MOVWF   PASTS1    ;w=000000xx
           XORWF   PASTS0,W  ;
           BTFSC   ZERO
           GOTO    STS_EQU
           ;新老状态不同        
           CLRF    DSCNT     ;请稳定时间计数
           MOVF    PASTS1,W    ;
           MOVWF   PASTS0      ;新状态取代老状态
           RETURN
STS_EQU   ;状态相同               
           INCF    DSCNT,F   ;稳定时间计数+1
           MOVLW   0X14         ;
           SUBWF   DSCNT,W  
           BTFSS   CY
           RETURN               ;状态未稳定
;          状态稳定达1秒
           CLRF    DSCNT     ;请稳定时间计数
           MOVF    DSTS,W       ;w=000000xx
           XORWF   PASTS1,W    ;
           BTFSC   ZERO
           RETURN               ;新门状态=老门状态
;
           MOVF    PASTS1,W    ;
           MOVWF   DSTS
           BSF     DSTS,7      ;置门状态变化标志
           RETURN              ;DSTS=100000XX
;**************************************************
;前锁开驱动子程序:最大执行时间2秒
;**************************************************
LOCK1_OPEN 
           movlw    DRVTIME1   ;电机开锁驱动2秒
           movwf    DRVCNT     ;
           DJ1_DRA
QMOTRUN0   call     T50MS      ;

⌨️ 快捷键说明

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