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

📄 gj0420.asm

📁 公司以前的项目
💻 ASM
📖 第 1 页 / 共 5 页
字号:
           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
;-----------------------------------------
;振铃测试
;-----------------------------------------  
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    OPENLOCK    ;开锁
           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
;*******************************************
OPENLOCK    
           MOVLW    0X01
           XORWF    RINGNS,W
           BTFSS    ZERO
           GOTO     OP_LOCK2 
;       
           CALL     LOCK1_OPEN     ;开前门
           RETURN
OP_LOCK2
           MOVLW    0X02
           XORWF    RINGNS,W
           BTFSS    ZERO
           GOTO     OP_QHLOCK
;
           CALL     LOCK2_OPEN     ;开后门
           RETURN
OP_QHLOCK
           CALL     LOCK1_OPEN     ;开前门
           CALL     LOCK2_OPEN     ;开后门            
           RETURN
;**************************************************
;前锁开驱动子程序:最大执行时间2秒
;**************************************************
LOCK1_OPEN 
           movlw    DRVTIME1   ;电机开锁驱动2秒
           movwf    DRVCNT     ;
           DJ1_DRA
QMOTRUN0   call     T50MS      ;
           DECF     DRVCNT,F   ;
           BTFSC    STATUS,Z   ;
           GOTO     QMNOPEN    ;
           BTFSS    QMZT       ;
           GOTO     QMOTRUN0   ;
           CALL     T100US     ;
           BTFSS    QMZT       ;
           GOTO     QMOTRUN0   ; 
           CALL     T100US     ;
           BTFSS    QMZT       ;
           GOTO     QMOTRUN0   ; 
           DJ1OFF
           MOVLW    0X0C       ;*****锁开电机延时1秒退回
           MOVWF    TEXIT1     ; 
           RETURN              ;
QMNOPEN   
           DJ1OFF           
           MOVLW    LOCKDLY    ;锁未开电机延时2分退回  
           MOVWF    TEXIT1     ;   
           RETURN 
;**************************************************
;后锁开驱动子程序                                 *
;**************************************************
LOCK2_OPEN 
           movlw    DRVTIME1           ;MOTOR RUN TIME 2S
           movwf    DRVCNT            ;
           DJ2_DRA
HMOTRUN0   call     T50MS              ;
           DECF     DRVCNT,F          ;
           BTFSC    STATUS,Z           ;
           GOTO     HMNOPEN            ;
;
           BTFSS    HMZT               ;
           GOTO     HMOTRUN0           ;
           CALL     T100US             ;
           BTFSS    HMZT               ;
           GOTO     HMOTRUN0           ; 
           CALL     T100US             ;
           BTFSS    HMZT               ;
           GOTO     HMOTRUN0           ; 
           DJ2OFF   
           MOVLW    0X0C     ;*****锁开电机延时1秒退回
           MOVWF    TEXIT2   ; 
           RETURN
HMNOPEN    
           DJ2OFF 
           MOVLW    LOCKDLY            ;  
           MOVWF    TEXIT2          ;   
           return       
;**************************************************
;前后锁延时归位驱动子程序
;**************************************************
LOCK1_CLOSE 
           MOVF     TEXIT1,F
           BTFSC    ZERO
           RETURN                 ;前锁已归位 
;**           BTFSS    QMZT
;**           GOTO     QM_NOPEN      ;前门人未开
;**           MOVLW    0X01          ;前门已开
;**           MOVWF    TEXIT1        ;电机立即退回  
QM_NOPEN                    
           DECFSZ   TEXIT1,F      ;前锁驱动延时减量
           RETURN                 ;驱动延时未到返回
;
           BTFSC    VCO           
           GOTO     DJ1_EXIT  
;          
           MOVLW    0X02         ; 电压低延时两秒
           MOVWF    TEXIT1       ;
           RETURN  
DJ1_EXIT
           movlw    DRVTIME2      ;电机解锁驱动1.5秒
           movwf    DRVCNT       ;
           DJ1_DRB                ;电机归位
DJ1_EXIT1   
           CALL     T50MS         ;          
           DECFSZ   DRVCNT,F      ;
           GOTO     DJ1_EXIT1    
           DJ1OFF
           RETURN 
;---------------------------------------------------
LOCK2_CLOSE 
           MOVF     TEXIT2,F
           BTFSC    ZERO          ;
           RETURN                 ;后锁已归位            
;
;**           BTFSS    HMZT
;**           GOTO     HM_NOPEN      ;后门人未开
;**           MOVLW    0X01          ;后门已开
;**           MOVWF    TEXIT2     ;电机立即退回  
HM_NOPEN                    
           DECFSZ   TEXIT2,F   ;后锁驱动延时减量
           RETURN                 ;驱动延时未到返回
;          后锁驱动延时到
           BTFSC    VCO
           GOTO     DJ2_EXIT
;
           MOVLW    0X02          ;电压低延时两秒
           MOVWF    TEXIT2  
           RETURN  
DJ2_EXIT      
           movlw    DRVTIME2      ;置1.5秒驱动计数
           movwf    DRVCNT        ;
           DJ2_DRB                ;
HMCLOSE0   CALL     T50MS         ;
           DECFSZ   DRVCNT,F      ;
           GOTO     HMCLOSE0      ;
           DJ2OFF      
           return
;*******************************************
T1S        
           MOVLW   0X0A
           MOVWF   TIM2
T1S0       CALL    T100MS
           DECFSZ  TIM2,F
           GOTO    T1S0
           RETURN 
;-----------------------------------------
T200MS        
           MOVLW   0XC8
           MOVWF   TIM1
T200MS0    CALL    T1MS
           DECFSZ  TIM1,F
           GOTO    T200MS0
           RETURN 
;-----------------------------------------
T100MS        
           MOVLW   0X64
           MOVWF   TIM1
T100MS0    CALL    T1MS
           DECFSZ  TIM1,F
           GOTO    T100MS0
           RETURN 
;-----------------------------------------
T50MS        
           MOVLW   0X32
           MOVWF   TIM1
T50MS0     CALL    T1MS
           DECFSZ  TIM1,F
           GOTO    T50MS0
           RETURN 
;-----------------------------------------
T10MS        
           MOVLW   0X0A
           MOVWF   TIM1
T10MS0     CALL    T1MS
           DECFSZ  TIM1,F
           GOTO    T10MS0
           RETURN 
;-----------------------------------
T1MS                       ;
           MOVLW   0XFA
           MOVWF   TIM0
T1MS0       
           NOP
           DECFSZ  TIM0,F
           GOTO    T1MS0
           RETURN
;-----------------------------------
T100US                       ;
           MOVLW   0X19
           MOVWF   TIM0
T100US0       
           NOP
           DECFSZ  TIM0,F
           GOTO    T100US0
           RETURN
;***********************************************************
INIT690B                               ;BANK 1 
           BANKSEL OPTION_REG    ;OP_REG:/RABPU INTEDG T0CS T0SE PSA PS2 PS1 PS0          
           movlw   b'01001111'   ;          0      1    0    0    1   1   1   1
           MOVWF   OPTION_REG    ;WDT=1:128,RAB弱上拉,INT下降沿触发中断
           MOVLW   B'00010101'   ;Twdt=(1/31KHZ)X32768x128=128s
           MOVWF   WDTCON        ;
           BSF     PCON,NOT_POR  ;
           BSF     PCON,NOT_BOR  ;
           BANKSEL PORTA
;
           CALL    CR_RAM
           CALL    IO_INIT 
;**           CALL    CMP_INIT
           CALL    T1ME2_INIT
;----
INT_ENB    ;使能T1,C1,引脚变化中断
           BANKSEL  PIE1
           CLRF     PIE1
           CLRF     PIE2
;**           BSF      PIE2,C1IE     ;
           BSF      PIE1,TMR2IE   ;
           MOVLW    B'01001000'   ;GIE,PEIE,T0IE,INTE,RABIE,T0IF,INTF,RABIF
           MOVWF    INTCON
           BANKSEL  PORTA           
           RETURN
;--------------------------------------------
;I/O口设置
;--------------------------------------------
IO_INIT     
           BANKSEL WPUA
           MOVLW   B'00010011'          ;RA0,1,4弱上拉
           MOVWF   WPUA                 ;RA2,5外部弱下拉
           MOVLW   B'00000000'          ;RA0(前门),RA1(后门),RA3(按钮)变化中断(disable)
           MOVWF   IOCA   
              
           BANKSEL WPUB
           MOVLW   B'11010000'          ;RB4,6,7弱上拉
           MOVWF   WPUB
           MOVLW   B'10000000'          ;RB7变化中断(RING)
           MOVWF   IOCB  
;2bank
           MOVLW   b'00000000'  ;******ANS7,6,5,4,3,2,1,0
           movwf   ANSEL        ;******RC0 ,RC1,IS AN4,AN5 
           MOVLW   b'00000000'  ;ANS11,10,9,8   
           movwf   ANSELH       ;IS I/O    
;
           CHG_EN              ;使能充电

           CLRF     PORTA      ;A口初始状态
           CLRF     PORTA      ;A口初始状态
           CLRF     PORTA      ;A口初始状态
           MOVF     PORTB,W    ;读B口初始状态

           MOVF     PORTA,W    ;读A口初始状态
           ANDLW    0X03
           MOVWF    PASTS0    ;
           
           MOVF     PORTB,W    ;读B口初始状态
           ANDLW    0X80
           MOVWF    PBSTS0    ;
           
           bsf      ANZT
           RETURN
;--------------------------------------------
;比较器及参考源设置
;--------------------------------------------
;**CMP_INIT
;**           BANKSEL CM1CON0      ;C1ON,C1OUT,C1OE,C1POL,/,C1R,C1CH1,C1CH0
;**           MOVLW   B'10010101'  ;C1使能,反极性,C1VREF选择,RC1输入
;**           MOVWF   CM1CON0
;**           MOVLW   B'10101000'  ;C1VREN,C2VREN,VRR,VP6EN,VR3,VR2,VR1,VR0
;**           MOVWF   VRCON        ;CVREF=(8/24)X3V=1.0V
;**           BANKSEL PORTA
;**           RETURN
;--------------------------------------------
;TIME2设置:50MS中断
;--------------------------------------------
T1ME2_INIT                       
           BANKSEL PR2           ;
           MOVLW   0XC3          ;
           MOVWF   PR2           ;T=1X256X195
           BANKSEL T2CON         ;T2CON=TO3,TO2,TO1,TO0,T2ON,TI1,TI0
           MOVLW   B'01111111'   ;
           MOVWF   T2CON
           RETURN
;----------------------------------------------
;请20-5F    
;----------------------------------------------
CR_RAM       
           movlw   0x20                 ;Clear 20-5F
           movwf   FSR                  ;

⌨️ 快捷键说明

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