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