📄 gj070613.asm
字号:
;*********************** 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 + -