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

📄 cxe2007.txt

📁 基于PIC12F629的电动车遥控报警器的完整原代码
💻 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 + -