; 汽車防盜器報(bào)警聲 ;頻率分兩個(gè)0.1s第一個(gè) ;0.1S頻率從1.8K-3.5K勻速增加第二個(gè)0.1S頻率從3.5K-1.8K勻速減少, ;程序復(fù)位后,按S2喇叭叫兩聲,按S3喇叭叫15秒,中途可按S5停止. ;========================================================= LIST P=16F84A,R=DEC __CONFIG B11111111110001;_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
RTCC EQU 01H ;定義各寄存器 PC EQU 02H STATUS EQU 03H C EQU 0 RP0 EQU 5 ;---------------------- PORTA EQU 05H PORTB EQU 06H
TRISA EQU 5H TRISB EQU 6H ;----------------------- SOUNDDELAY1 EQU 10H ;聲音頻率變化計(jì)數(shù)器,從1.8~3.55KHZ FRE_COUNT EQU 11H ;同一頻率的重復(fù)次數(shù)保存地址 FRE_REPEAT EQU 12H SOUND_TEMP EQU 13H TEMP EQU 14H ;暫存寄存器 S_LOOP EQU 46 ;93-47=46 S_MAX EQU 93 ;最低頻率1.8K 93*3=280US*2 S_MIN EQU 47 ;最高頻率3.55K 47*3=140*2 S_REPEAT EQU 4 ;同一頻率重復(fù)次數(shù) ;----------------------RA KEY1 EQU 3 KEY2 EQU 4 ;----------------------RB KEY3 EQU 0 KEY4 EQU 1 ;-------------------- ORG 0000H MAIN CLRF PORTA CLRF PORTB ;初始化IO口
BSF STATUS,RP0 MOVLW 0011000B MOVWF TRISA MOVLW 00000011B MOVWF TRISB BCF STATUS,RP0 LOOP BTFSS PORTA,KEY1 ;掃描按鍵 GOTO SET_1 BTFSS PORTA,KEY2 GOTO SET_2 GOTO LOOP ;-------------------------------------------- SET_1 BTFSC PORTA,KEY1 ;去抖動(dòng) GOTO LOOP CALL SOUNDDELAY BTFSC PORTA,KEY1 ;按S2叫兩聲 GOTO LOOP CALL SOUND200MS CALL SOUND200MS GOTO LOOP ;-------------------------------------------- SET_2 BTFSC PORTA,KEY2 ;去抖動(dòng) GOTO LOOP CALL SOUNDDELAY BTFSC PORTA,KEY2 ;按S3叫15秒 GOTO LOOP CALL SOUND15S GOTO LOOP ;- - ---------------------------------------- SOUND200MS MOVLW S_LOOP MOVWF FRE_COUNT ;46=93-47 SOUND_LH_LP MOVLW S_REPEAT ;同一頻率重復(fù)次數(shù)送FRE_REPEAT MOVWF FRE_REPEAT MOVFW FRE_COUNT ADDLW S_MIN ;計(jì)數(shù)值加最小值 MOVWF TEMP REPEAT0_LP MOVFW TEMP BSF PORTA,0 CALL SOUNDDELAY0 ;廷時(shí)W*3US BCF PORTA,0 MOVFW TEMP
CALL SOUNDDELAY0 DECFSZ FRE_REPEAT,1 ;每四次減頻率計(jì)數(shù)一次 GOTO REPEAT0_LP DECFSZ FRE_COUNT,1 GOTO SOUND_LH_LP SOUND_HL MOVLW S_LOOP MOVWF FRE_COUNT ;46=93-47 SOUND_HL_LP MOVLW S_REPEAT ;同一頻率重復(fù)次數(shù)送FRE_REPEAT MOVWF FRE_REPEAT MOVFW FRE_COUNT SUBLW S_MAX ;最大值減計(jì)數(shù)值 MOVWF TEMP REPEAT1_LP MOVFW TEMP BSF PORTA,0 CALL SOUNDDELAY0 ;廷時(shí)W*3US BCF PORTA,0 MOVFW TEMP CALL SOUNDDELAY0 DECFSZ FRE_REPEAT,1;四次減頻率計(jì)數(shù)一次 GOTO REPEAT1_LP DECFSZ FRE_COUNT,1 GOTO SOUND_HL_LP SOUND_END RETLW 0 ;------------------------------ SOUNDDELAY: ;廷時(shí)255*3US+2US MOVLW 255 SOUNDDELAY0 MOVWF SOUNDDELAY1 ;廷時(shí)W*3US+1US SOUNDDELAYUS_1 DECFSZ SOUNDDELAY1,1 GOTO SOUNDDELAYUS_1 RETLW 0 ;--------------------- SOUND15S ;報(bào)警15秒 MOVLW 73 MOVWF SOUND_TEMP SOUND1S_LP CALL SOUND200MS; BTFSS PORTB,KEY4 ;按S5退出 RETLW 0 DECFSZ SOUND_TEMP,1 GOTO SOUND1S_LP RETLW 0 ;------------------------ END
|
|