📄 cxe2007.txt
字号:
MCU= 12F629
;
;Modify Date: 10-14-2005
;Author: Rollonse.Chen
;Copyright(C) 2005 FreeTek,All rights reserved.
;
;moto bike alarm system
;
;
;//////////////////////////////////////////////////////////////////////
__CONFIG _WDT_ON & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_ON & _CP_ON
;*************************************************************
LIST P=12F629
#INCLUDE "P12F629.INC"
#DEFINE LAMP GPIO,0
#DEFINE BUZZER GPIO,1
#DEFINE LED GPIO,2
#DEFINE LEARN GPIO,3
#DEFINE OSC GPIO,4
#DEFINE ANT GPIO,5
;=============================================================
COUNTER EQU 20H
ADDR EQU 21H
SDATA EQU 22H
BASECNT EQU 23H
BASEMS EQU 24H
ADDR2 EQU 25H
ADDR1 EQU 26H
ADDR0 EQU 27H
KEY EQU 28H
FLAG EQU 29H
;
#DEFINE VALB FLAG,0
#DEFINE LEARNB FLAG,1
#DEFINE OSC1STB FLAG,2
;#DEFINE OSCB FLAG,3
#DEFINE ALLB FLAG,4
#DEFINE ENB FLAG,5
;#DEFINE CHANGB FLAG,6
#DEFINE RZB FLAG,6
#DEFINE LEARN1STB FLAG,7
;
SCAN_C EQU 2AH
;LEARNCNTH EQU 2BH
LEARNCNTL EQU 2CH
LEARNCNT EQU 2DH
TEMP EQU 2EH
STEMP EQU 2FH
;SIGNAL_HIGH EQU 2EH
;SIGNAL_LOW EQU 2FH
DEL EQU 30H
DELAYCNT EQU 31H
;FLAGS EQU 32H
;
;#DEFINE MS4B FLAGS,0
;#DEFINE MS60B FLAGS,1
;#DEFINE HALFSB FLAGS,2
;
FLAG1 EQU 33H
;
#DEFINE WRITE1STB FLAG1,0
;HALFS_C EQU 33H
MS60_C EQU 34H
SPEAK_C EQU 35H
SPEAK_L EQU 36H
;FREQH EQU 37H
FREQL EQU 38H
LAMP_C EQU 39H
LAMP_L EQU 3AH
REFREQ EQU 3BH
FREQCNT EQU 3CH
DIRECTION EQU 3DH
S_SPEAK_L EQU 3EH
S_LAMP_L EQU 3FH
OSCCNT EQU 40H
STEP EQU 41H
CNTL EQU 42H
CNTH EQU 43H
TADDR2 EQU 50H
TADDR1 EQU 51H
TADDR0 EQU 52H
SASTATUS EQU 5EH
SAACC EQU 5FH
;////////////////////////////////////////
SYS EQU H'20'
SECURE2 EQU H'30'
SECURE1 EQU H'31'
SECURE0 EQU H'32'
;tmr0 generate frequency
;tmr1 is base timer
;修改记录:
;
;1.报警声音已修正
;
;=============================================================
ORG 000H
GOTO RESET
ORG 004H
MOVWF SAACC
SWAPF STATUS,W
CLRF STATUS
MOVWF SASTATUS
MOVLW B'00000010'
XORWF GPIO,F
MOVF FREQL,W
SUBWF TMR0,F
CLRF PCLATH
MOVF STEP,W
ADDWF PCL,F
GOTO STEP0
GOTO STEP1
GOTO STEP2
GOTO STEP3
GOTO STEP4
GOTO STEP5
GOTO STEP6
STEP0:
DECFSZ REFREQ,F
GOTO INT_COM
MOVLW D'8'
MOVWF REFREQ
;MOVLW 01H
;ADDWF FREQL,F
INCF FREQL,F
DECFSZ FREQCNT,F
GOTO INT_COM
MOVLW D'62'
MOVWF FREQCNT
INCF STEP,F
GOTO INT_COM
STEP1:
DECFSZ REFREQ,F
GOTO INT_COM
MOVLW D'8'
MOVWF REFREQ
;MOVLW 0FFH
;ADDWF FREQL,F
DECF FREQL,F
DECFSZ FREQCNT,F
GOTO INT_COM
MOVLW D'62'
MOVWF FREQCNT
DECF STEP,F
DECFSZ CNTL,F
GOTO INT_COM
INCF STEP,F
INCF STEP,F
;CLRF CNTL
MOVLW D'6'
MOVWF CNTH
MOVLW D'138'
MOVWF FREQL
MOVLW D'4'
MOVWF REFREQ
GOTO INT_COM
STEP2:
DECFSZ CNTL,F
GOTO INT_COM
DECFSZ CNTH,F
GOTO INT_COM
INCF STEP,F
MOVLW D'92'
MOVWF FREQL
MOVLW D'9'
MOVWF CNTH
GOTO INT_COM
STEP3:
DECFSZ CNTL,F
GOTO INT_COM
DECFSZ CNTH,F
GOTO INT_COM
MOVLW D'138'
MOVWF FREQL
MOVLW D'6'
MOVWF CNTH
DECF STEP,F
DECFSZ REFREQ,F
GOTO INT_COM
INCF STEP,F
INCF STEP,F
MOVLW D'8'
MOVWF REFREQ
MOVLW D'255'
MOVWF FREQL
MOVLW D'2'
MOVWF CNTL
GOTO INT_COM
STEP4:
DECFSZ REFREQ,F
GOTO INT_COM
MOVLW D'8'
MOVWF REFREQ
DECF FREQL,F
MOVLW D'160'
SUBWF FREQL,W
BTFSC STATUS,C
GOTO $+2
RLF REFREQ,F
MOVLW D'70'
SUBWF FREQL,W
BTFSC STATUS,C
GOTO INT_COM
MOVLW D'255'
MOVWF FREQL
DECFSZ CNTL,F
GOTO INT_COM
INCF STEP,F
MOVLW D'8'
MOVWF REFREQ
MOVLW D'70'
MOVWF FREQL
MOVLW D'4'
MOVWF CNTL
GOTO INT_COM
STEP5:
DECFSZ REFREQ,F
GOTO INT_COM
MOVLW D'4'
MOVWF REFREQ
INCF FREQL,F
MOVLW D'160'
SUBWF FREQL,W
BTFSC STATUS,C
GOTO $+2
RLF REFREQ,F
MOVLW D'250'
SUBWF FREQL,W
BTFSS STATUS,C
GOTO INT_COM
MOVLW D'70'
MOVWF FREQL
DECFSZ CNTL,F
GOTO INT_COM
STEP6:
BCF INTCON,T0IE
BCF BUZZER
INT_COM:
BCF INTCON,T0IF
SWAPF SAACC,F
SWAPF SASTATUS,W
MOVWF STATUS
SWAPF SAACC,W
RETFIE
;//////////////////////////////////////////
TMR0_INT:
CLRWDT
BTFSS TMR1H,4
RETLW 00H
BCF TMR1H,4
INCF BASECNT,F
INCF MS60_C,F
RETLW 00H
;'''''''''''''''''''''''''''''''''''''''
INITIALIZE:
BSF STATUS,RP0
MOVLW B'10000000' ;pull up disable,prescale for Tmr0,
MOVWF OPTION_REG
MOVLW B'00111000'
MOVWF TRISIO
CALL 3FFH
;MOVLW 80H
MOVWF OSCCAL ;adjust osc
MOVLW B'10000000'
MOVWF INTCON
MOVLW B'00000000'
MOVWF PIE1
MOVLW B'00000000'
MOVWF WPU ;pull up enable
CLRF IOCB ;IO change wake up
;; CLRF ANSEL
;CLRF EECON1
CLRF VRCON
BCF STATUS,RP0
CLRF GPIO
;; CLRF ADCON0
;MOVLW B'00110000'
;MOVWF T1CON
CLRF T1CON
CLRF PIR1
MOVLW 07H
MOVWF CMCON
CLRF TMR1L
CLRF TMR1H
CLRF TMR0
BSF T1CON,TMR1ON
RETLW 00H
;=============================================================
RESET:
BCF STATUS,RP0
MOVLW D'63'
MOVWF COUNTER
MOVLW 21H
MOVWF FSR
CLR_SFR:
CLRF INDF
INCF FSR,F
DECFSZ COUNTER,F
GOTO CLR_SFR
;------------------------------------------------------------
MAIN:
CALL INITIALIZE
BSF LED
POLL:
;CLRWDT
CALL TMR0_INT
GOTO CHECK_STATUS
OSC_END:
;4.096ms
MOVF BASEMS,W
XORWF BASECNT,W
BTFSC STATUS,Z
GOTO POLL
XORWF BASEMS,F
CALL RFIN
XORLW 01H
BTFSS STATUS,Z
GOTO NORFIN
CLRF SCAN_C
BTFSC VALB
GOTO CHECKING
BSF VALB
BTFSS LEARNB ;learn?
GOTO KEY_PRO
GOTO WRITECODE
NORFIN:
INCF SCAN_C,F
MOVLW D'50'
SUBWF SCAN_C,W
BTFSS STATUS,C
GOTO CHECKING
BCF VALB
BCF WRITE1STB
CHECKING:
;60ms
MS60_PRO:
MOVLW D'15'
SUBWF MS60_C,W
BTFSS STATUS,C
GOTO RECEIVE
CLRF MS60_C
BSF STATUS,RP0
MOVLW B'00111000'
MOVWF TRISIO
BCF STATUS,RP0
CALL BEEP_LAMP
CALL CHECK_LEARN
RECEIVE:
HALFPRO:
MOVLW D'122'
SUBWF BASECNT,W
BTFSS STATUS,C
GOTO POLL
MOVWF BASECNT
BTFSS LEARNB
GOTO NORMAL_HALF
DECFSZ LEARNCNT,F
GOTO _LEARN_HALF
BCF LEARNB
GOTO NORMAL_HALF
_LEARN_HALF:
MOVLW B'00000100'
XORWF GPIO,F
GOTO _NORMAL_HALF
NORMAL_HALF:
BSF LED
_NORMAL_HALF:
DECFSZ OSCCNT,F
GOTO ENABLE_OSC1ST
BCF OSC1STB
ENABLE_OSC1ST:
DECFSZ DELAYCNT,F
GOTO ENABLE_CHECK
BCF ENB
BTFSS RZB
GOTO ENABLE_CHECK
BCF RZB
BSF ENB
GOTO DIFOUR
ENABLE_CHECK:
GOTO POLL
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
STOPALL:
BCF INTCON,T0IE
BCF INTCON,T0IF
CLRF SPEAK_C
BCF BUZZER
CLRF LAMP_C
BCF LAMP
BCF ALLB
BCF RZB
BSF ENB
MOVLW D'2'
MOVWF DELAYCNT
MOVLW D'21'
MOVWF OSCCNT
GOTO CHECKING
;/////////////////////////////////////////////////
KEY_PRO:
MOVLW SECURE2
MOVWF ADDR
CALL EEREAD
MOVF SDATA,W
XORWF ADDR2,W
BTFSS STATUS,Z
GOTO CANCELKEY
MOVLW SECURE1
MOVWF ADDR
CALL EEREAD
MOVF SDATA,W
XORWF ADDR1,W
BTFSS STATUS,Z
GOTO CANCELKEY
MOVLW SECURE0
MOVWF ADDR
CALL EEREAD
MOVF SDATA,W
XORWF ADDR0,W
BTFSC STATUS,Z
GOTO KEY01
CANCELKEY:
BCF VALB
GOTO CHECKING
KEY01:
MOVLW B'00000001'
XORWF KEY,W
BTFSS STATUS,Z
GOTO KEY02
BTFSC ALLB
GOTO STOPALL
MOVLW 55H
MOVWF SDATA
MOVLW SYS
MOVWF ADDR
CALL EEWRITE
BCF OSC1STB
BCF RZB
BSF ENB
MOVLW D'6'
MOVWF DELAYCNT
DI1:
MOVLW D'1'
MOVWF SPEAK_C
MOVWF LAMP_C
PROCOM:
;BCF CHANGB
MOVLW D'2'
MOVWF SPEAK_L
_PROCOM_:
MOVLW D'2'
MOVWF S_SPEAK_L
PROCOM_:
MOVLW D'2'
MOVWF LAMP_L
MOVLW D'6'
MOVWF S_LAMP_L
MOVLW D'76'
MOVWF FREQL;0EBH
CLRF TMR0
MOVLW D'8'
MOVWF REFREQ
MOVLW D'62'
MOVWF FREQCNT
;CLRF DIRECTION
CLRF STEP
MOVLW D'20'
MOVWF CNTL
BCF INTCON,T0IF
BSF INTCON,T0IE
CLRF MS60_C
BSF LAMP
GOTO CHECKING
KEY02:
MOVLW B'00000010'
XORWF KEY,W
BTFSS STATUS,Z
GOTO KEY04
BCF INTCON,T0IE
BCF INTCON,T0IF
CLRF SPEAK_C
BCF BUZZER
CLRF LAMP_C
BCF LAMP
BCF ALLB
BCF RZB
MOVLW 0AAH
MOVWF SDATA
MOVLW SYS
MOVWF ADDR
CALL EEWRITE
MOVLW D'3'
MOVWF SPEAK_C
MOVWF LAMP_C
GOTO PROCOM
KEY04:
MOVLW B'00001000'
XORWF KEY,W
BTFSS STATUS,Z
GOTO KEY08
BTFSC ALLB
GOTO STOPALL
BCF RZB
MOVLW D'1' ;3S
MOVWF SPEAK_C
MOVLW D'13'
MOVWF LAMP_C
MOVLW D'50'
MOVWF SPEAK_L
;BSF CHANGB
BSF ALLB
BSF ENB
MOVLW D'8'
MOVWF DELAYCNT
GOTO _PROCOM_
KEY08:
GOTO CHECKING
;//////////////////////////////////////////
WRITECODE:
;verify address
BTFSC WRITE1STB
GOTO CMPWRITE
BSF WRITE1STB
REWRITE:
BCF VALB
MOVF ADDR2,W
MOVWF TADDR2
MOVF ADDR1,W
MOVWF TADDR1
MOVF ADDR0,W
MOVWF TADDR0
GOTO CHECKING
CMPWRITE:
MOVF ADDR2,W
XORWF TADDR2,W
BTFSS STATUS,Z
GOTO REWRITE
MOVF ADDR1,W
XORWF TADDR1,W
BTFSS STATUS,Z
GOTO REWRITE
MOVF ADDR0,W
XORWF TADDR0,W
BTFSS STATUS,Z
GOTO REWRITE
MOVLW SECURE2
MOVWF ADDR
MOVF ADDR2,W
MOVWF SDATA
CALL EEWRITE
MOVLW SECURE1
MOVWF ADDR
MOVF ADDR1,W
MOVWF SDATA
CALL EEWRITE
MOVLW SECURE0
MOVWF ADDR
MOVF ADDR0,W
MOVWF SDATA
CALL EEWRITE
BCF LEARNB
BSF LED
GOTO DI1;CHECKING
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;////////////////////////////////////////////////
RFIN:
MOVLW D'24'
MOVWF COUNTER
CLRF TEMP
BTFSC ANT
RETLW 00H
;>4000us & <9600us
WAIT_LOW:
BTFSC ANT
GOTO SYNC_DATA
CALL TMR0_INT ;13us/6us
MOVLW .8;.10
MOVWF DEL
DELING:
DECFSZ DEL,F
GOTO DELING
INCF TEMP,F
MOVLW D'213' ;213*45us=9600us
SUBWF TEMP,W
BTFSS STATUS,C
GOTO WAIT_LOW
RETLW 00H
SYNC_DATA:
MOVLW D'89' ;89*45us=4000us
SUBWF TEMP,W
BTFSS STATUS,C
RETLW 00H
RECE_D0:
CLRF TEMP
RECE_HIGH:
BTFSS ANT
GOTO RECE_LOW
INCF TEMP,F
MOVLW D'162' ;162*8us=1300us
SUBWF TEMP,W
BTFSS STATUS,C
GOTO RECE_HIGH
RETLW 00H
RECE_LOW:
MOVLW D'6' ;6*8us=50us
SUBWF TEMP,W
BTFSS STATUS,C
RETLW 00H
CALL TMR0_INT
CLRF STEMP
RECE_L0:
BTFSC ANT
GOTO RECE_END
INCF STEMP,F
MOVLW D'162' ;162*8us=1300us
SUBWF STEMP,W
BTFSS STATUS,C
GOTO RECE_L0
RETLW 00H
RECE_END:
MOVLW D'6' ;6*8us=50us
SUBWF STEMP,W
BTFSS STATUS,C
RETLW 00H
;800us<STEMP+TEMP<1450us
;MOVF STEMP,W
;ADDWF TEMP,W
;MOVWF DEL
;BTFSC STATUS,C
;RETLW 00H
;
;MOVLW D'100'
;SUBWF DEL,W
;BTFSS STATUS,C
;RETLW 00H
;
;MOVLW D'181'
;SUBWF DEL,W
;BTFSC STATUS,C
;RETLW 00H
MOVF STEMP,W
SUBWF TEMP,W
RRF ADDR2,F
RRF ADDR1,F
RRF ADDR0,F
DECFSZ COUNTER,F
GOTO RECE_D0
RECEIVE_OK:
SWAPF ADDR2,W
ANDLW 0FH
;MOVF ADDR2,W
MOVWF KEY
MOVLW 0FH
ANDWF ADDR2,F
RETLW 01H
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
CHECK_STATUS:
BTFSS OSC ;oscillate
GOTO NO_OSC
;BTFSC OSC1STB
;GOTO OSC_PRO
;BSF OSC1STB
;GOTO HAVE_OSC
OSC_PRO:
;BTFSC OSCB
;GOTO HAVE_OSC
;BSF OSCB
MOVLW SYS
MOVWF ADDR
CALL EEREAD
MOVF SDATA,W
XORLW 55H
BTFSS OSC ;oscillate
GOTO NO_OSC
BTFSS STATUS,Z
GOTO HAVE_OSC
BTFSC ENB
GOTO HAVE_OSC
BSF ENB
BTFSC OSC1STB
GOTO SECOND_OSC
BSF OSC1STB
MOVLW D'24'
MOVWF OSCCNT
DIFOUR:
MOVLW D'7'
MOVWF SPEAK_C
MOVWF LAMP_C
MOVLW D'2'
MOVWF SPEAK_L
MOVLW D'8'
MOVWF S_SPEAK_L
MOVLW D'6'
MOVWF DELAYCNT
MOVLW D'8'
GOTO SECOND_COM
SECOND_OSC:
;BCF OSC1STB
BSF RZB
MOVLW D'46'
MOVWF OSCCNT
MOVLW D'22'
MOVWF DELAYCNT
MOVLW D'1' ;9S
MOVWF SPEAK_C
MOVLW D'37'
MOVWF LAMP_C
MOVLW D'150'
MOVWF SPEAK_L
MOVLW D'6'
SECOND_COM:
MOVWF S_LAMP_L
MOVLW D'2'
MOVWF LAMP_L
;BSF CHANGB
BSF ALLB
MOVLW D'76'
MOVWF FREQL;0EBH
CLRF TMR0
MOVLW D'8'
MOVWF REFREQ
MOVLW D'62'
MOVWF FREQCNT
;CLRF DIRECTION
CLRF STEP
MOVLW D'15';3S
MOVWF CNTL
BCF INTCON,T0IF
BSF INTCON,T0IE
CLRF MS60_C
BSF LAMP
NO_OSC:
;BCF OSC1STB
;BCF OSCB
HAVE_OSC:
GOTO OSC_END
CHECK_LEARN:
;MOVLW SYS
;MOVWF ADDR
;CALL EEREAD
;MOVF SDATA,W
;XORLW 55H
;BTFSC STATUS,Z
;RETLW 00H
BTFSC LEARN
GOTO NO_LEARN
INCF LEARNCNTL,F
;BTFSC STATUS,Z
;INCF LEARNCNTH,F
MOVLW D'40'
SUBWF LEARNCNTL,W
BTFSS STATUS,C
RETLW 00H
BTFSC LEARN1STB
RETLW 00H
BSF LEARN1STB
BTFSC LEARNB
RETLW 00H
BSF LEARNB
MOVLW D'20'
MOVWF LEARNCNT
MOVLW B'00000100'
XORWF GPIO,F
RETLW 00H
NO_LEARN:
;CLRF LEARNCNTH
CLRF LEARNCNTL
BCF LEARN1STB
RETLW 00H
;*************************************************************
;ADDR SDATA
;EEADR EEDAT
EEREAD:
MOVF ADDR,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
NOP
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF SDATA
RETURN
;ADDR SDATA
;EEADR EEDAT
EEWRITE:
MOVF ADDR,W
BSF STATUS,RP0
MOVWF EEADR
BCF STATUS,RP0
MOVF SDATA,W
BSF STATUS,RP0
MOVWF EEDATA
BSF EECON1,WREN
BCF INTCON,GIE ;disable Interrupt
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
CALL TMR0_INT
BTFSC EECON1,WR
GOTO $-2
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;//////////////////////////////////////////
BEEP_LAMP:
MOVF SPEAK_C,W
BTFSC STATUS,Z
GOTO LAMP_OUT
DECFSZ SPEAK_L,F
GOTO LAMP_OUT
BCF INTCON,T0IE
BCF INTCON,T0IF
BCF BUZZER
DECFSZ SPEAK_C,F
GOTO WORKING
BCF ALLB
GOTO LAMP_OUT
WORKING:
BTFSS SPEAK_C,0
GOTO BUZZER_SLEEP
MOVLW D'2'
MOVWF SPEAK_L
CLRF TMR0
MOVLW D'76'
MOVWF FREQL
MOVLW D'8'
MOVWF REFREQ
MOVLW D'62'
MOVWF FREQCNT
;CLRF DIRECTION
CLRF STEP
MOVLW D'20'
MOVWF CNTL
BCF INTCON,T0IF
BSF INTCON,T0IE
GOTO LAMP_OUT
BUZZER_SLEEP:
MOVF S_SPEAK_L,W
MOVWF SPEAK_L
LAMP_OUT:
MOVF LAMP_C,W
BTFSC STATUS,Z
RETLW 00H
DECFSZ LAMP_L,F
RETLW 00H
BCF LAMP
DECFSZ LAMP_C,F
GOTO LIGHTING
RETLW 00H
LIGHTING:
BTFSS LAMP_C,0
GOTO LAMP_SLEEP
MOVLW D'2'
MOVWF LAMP_L
BSF LAMP
RETLW 00H
LAMP_SLEEP:
MOVF S_LAMP_L,W
MOVWF LAMP_L
RETLW 00H
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;ORG 3FFH
;RETLW 90H ;Adjust OSC
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -