📄 gj0420.asm
字号:
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 + -