16 çeşit siren devresi, Similasyonu çalıştırdıktan sonra 4 lü dip switch’i değişik pozisyonda seçerek 4×4=16 çeşit siren çalıştırabilirsiniz her seçim sonunda reset butonuna basmayı unutmayın. Orjinal ASM dosyası mevcuttur.
Örnek Siren Sesleri: Polis, telefon, bep, buzzer, laser vb.
Kurulumunda siren devresinin çalışması için simülasyon üzerinde görülmeyen bağlantıların yapılması gereklidir pin 4 üzerindeki 1k direnç ok yönündeki ucu +5 volt besleme ile birleşecek osilatör için 4mhz kristal kullanılmalıdır
Siren Devresinin Kaynak assembly (asm) Kodu
;----------------------------------------------------------------------------- ;LABLE OPCODE OPERAND COMMENTS list R=DEC ;Set radix to decimal list P=16F84A ;Set device to pic16F84 list F=INHX8m ;Set format intel 8 bit merged ; list F=picice ;picice format ;------------------------------------------------------------------------------ ;SETTING UP LABLES ; port_a equ 5h ;equate port a port_b equ 6h ;equate port b same equ 1 ;same register _pc equ 02h ;program counter _rtcc equ 01h ;rtcc indirect equ 00h ;indirect address contents _fsr equ 04h ;file select register _status equ 03h ;status register _carry equ 0 ;carry flag _zero equ 2 ;zero flag ; equ 10h ; ; equ 11h ; ; equ 12h ; _lenth equ 13h ; ; equ 17h ; temp1 equ 14h ; temp2 equ 15h ; temp3 equ 16h ; temp4 equ 1Ah ; temp5 equ 1Bh ; dipval equ 1Ch ; ; equ 1Dh ; ; equ 1Eh ; ; equ 1Fh ; ; equ 0Fh ; ; equ 0Dh ; ; equ 0Bh ; ; equ 09h ; ; equ 08h ; ; equ 0Ah ; ; equ 0Eh ; _flags equ 0Ch ;flag register ; equ 18h ; ; equ 19h ; ;port b pin definitions ; equ 3 ; ; equ 2 ; ; equ 1 ; sir equ 0 ;siren drive out ;flags ; 0 0=siren sweep off ; 1=siren sweep on ; 1 0= ; 1= ; 2 0= ; 1= ; 3 0= ; 1= ; 4 0= ; 1= ; 5 0= ; 1= ; 6 0= ; 1= ; 7 0= ; 1= ;page 0 ORG 000h ;originate code here ;Codes start here init movlw B'01111111' ;7 output tris port_b ; clrf port_b ;resetting port b movlw B'11111111' ; tris port_a ; clrf port_a ;resetting port a movlw B'00001111' ;setup wdt 128:1 option ;pul ups off int clock enabled clrf _flags ;clear all flags ;---------------------------------------------------------------------------- diptest movf port_b,w ;get dip value movwf dipval ; comf dipval,same ; bcf dipval,7 ;mask bcf dipval,6 ; bcf dipval,5 ; bcf dipval,4 ; movlw 15 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op ; movlw 14 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op14 ; movlw 13 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op13 ; movlw 12 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op12 ; movlw 11 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op11 ; movlw 10 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op10 ; movlw 9 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op9 ; movlw 8 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op8 ; movlw 7 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op7 ; movlw 6 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op6 ; movlw 5 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op5 ; movlw 4 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op4 ; movlw 3 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op3 ; movlw 2 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op2 ; movlw 1 ; subwf dipval,w ; btfsc _status,_carry ;set is pos goto op1 ; goto op ; op bsf _flags,0 ;fast sweep movlw 250 ; movwf temp2 ;sweep = 255 movlw 5 ;255 /10 th = variable rate 5 movwf _lenth ; movlw 3 ; movwf temp3 ;pitch preset to 25 siren bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp2,same ;sweep timer goto var ; movlw 250 ;reset sweep timer movwf temp2 ; goto tog ;toggle if sweep over tog btfsc _flags,0 ;test if sweep off goto down ;pitch down goto up ;pitch up down bcf _flags,0 ; goto siren ; up bsf _flags,0 ; goto siren ; var decfsz _lenth,same ; goto siren ; btfsc _flags,0 ;test if sweep up or down goto re ; decfsz temp3,same ; goto qw1 ; bsf _flags,0 ; qw1 movlw 5 ;reset /10 5 movwf _lenth ; goto siren ; re incf temp3,same ; movlw 5 ; movwf _lenth ;reset /10 5 goto siren ; pit movf temp3,w ; movwf temp4 ; g clrwdt ;kick dog decfsz temp4,same ; goto g ; retlw 0 ; op1 bsf _flags,0 ;very slow sweep movlw 230 ; movwf temp2 ;sweep = 255 movlw 3 ;255 /10 th = variable rate movwf _lenth ; movlw 85 ; movwf temp3 ;pitch preset to 25 siren1 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp2,same ;sweep timer goto var1 ; movlw 230 ;reset sweep timer movwf temp2 ; goto tog1 ;toggle if sweep over tog1 btfsc _flags,0 ;test if sweep off goto down1 ;pitch down goto up1 ;pitch up down1 bcf _flags,0 ; goto siren1 ; up1 bsf _flags,0 ; goto siren1 ; var1 decfsz _lenth,same ; goto siren1 ; btfsc _flags,0 ;test if sweep up or down goto re1 ; decf temp3,same ; movlw 3 ;reset /10 movwf _lenth ; goto siren1 ; re1 incf temp3,same ; movlw 3 ; movwf _lenth ;reset /10 goto siren1 ; op2 bsf _flags,0 ;medium sweep movlw 10 ; movwf temp3 ;pitch preset to 25 siren2 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch goto var2 ; var2 btfsc _flags,0 ;test if sweep up or down goto re2 ; decfsz temp3,same ; goto siren2 ; bsf _flags,0 ; incf temp3,same ; goto siren2 ; re2 incf temp3,same ; movlw 150 ; subwf temp3,w ; btfsc _status,_carry ;set if pos bcf _flags,0 ; goto siren2 ; op3 bsf _flags,0 ;police siren movlw 5 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 255 ; movwf temp3 ;pitch preset to 25 siren3 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren3 ; movlw 5 ;reset delayed sweep movwf temp1 ; btfsc _flags,0 ;test if up or down sweep goto m1 ; goto m2 ; m1 decfsz temp2,same ;sweep timer goto var3 ; goto tog3 ;toggle if sweep over m2 movlw 5 ; subwf temp2,same ; movf temp2,w ; btfsc _status,_zero ; goto var3 ; goto tog3 ;toggle if sweep over tog3 btfsc _flags,0 ;test if sweep off goto down3 ;pitch down goto up3 ;pitch up down3 bcf _flags,0 ; goto siren3 ; up3 bsf _flags,0 ; goto siren3 ; var3 btfsc _flags,0 ;test if sweep up or down goto re3 ; decf temp3,same ; goto siren3 ; re3 movlw 255 ; subwf temp3,w ; btfsc _status,_carry ;set is positive bcf _flags,0 ; incf temp3,same ; goto siren5 ; op4 bsf _flags,0 ;slow rise movlw 6 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 255 ; movwf temp3 ;pitch preset to 25 siren4 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren4 ; movlw 6 ;reset delayed sweep movwf temp1 ; btfss _flags,0 ;test if up or down sweep goto m3 ; goto m4 ; m3 decfsz temp2,same ;sweep timer goto var4 ; goto tog4 ;toggle if sweep over m4 movlw 5 ; subwf temp2,same ; movf temp2,w ; btfsc _status,_zero ; goto var4 ; goto tog4 ;toggle if sweep over tog4 btfsc _flags,0 ;test if sweep off goto down4 ;pitch down goto up4 ;pitch up down4 bcf _flags,0 ; goto siren4 ; up4 bsf _flags,0 ; goto siren4 ; var4 btfsc _flags,0 ;test if sweep up or down goto re4 ; decf temp3,same ; goto siren4 ; re4 movlw 255 ; subwf temp3,w ; btfsc _status,_carry ;set is positive bcf _flags,0 ; incf temp3,same ; goto siren5 ; op5 bsf _flags,0 ;ultra low sweep (air raid) movlw 20 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 255 ; movwf temp3 ;pitch preset to 25 siren5 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren5 ; movlw 20 ;reset delayed sweep movwf temp1 ; decfsz temp2,same ;sweep timer goto var5 ; goto tog5 ;toggle if sweep over tog5 btfsc _flags,0 ;test if sweep off goto down5 ;pitch down goto up5 ;pitch up down5 bcf _flags,0 ; goto siren5 ; up5 bsf _flags,0 ; goto siren5 ; var5 btfsc _flags,0 ;test if sweep up or down goto re5 ; decf temp3,same ; goto siren5 ; re5 movlw 255 ; subwf temp3,w ; btfsc _status,_carry ;set is positive bcf _flags,0 ; incf temp3,same ; goto siren5 ; op6 bsf _flags,0 ;two tone high pitch movlw 2 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 50 ; movwf temp3 ;pitch preset to 25 siren6 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren6 ; movlw 2 ;reset delayed sweep movwf temp1 ; decfsz temp2,same ;sweep timer goto siren6 ; btfsc _flags,0 ;test if high or low goto m5 ; goto m6 ; m5 movlw 20 ; movwf temp3 ; bcf _flags,0 ; goto siren6 ; m6 movlw 50 ; movwf temp3 ; bsf _flags,0 ; goto siren6 ; op7 bsf _flags,0 ;continues movlw 40 ; movwf temp3 ;pitch preset to 25 siren7 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch goto siren7 ; op8 movlw 40 ;telephone movwf temp3 ;pitch preset to 25 movlw 100 ; movwf _lenth ;lenth timer siren8 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz _lenth,same ; goto siren8 ; movlw 100 ;reset lenth timer movwf _lenth ; movlw 50 ; movwf temp3 ;pitch preset to 25 siren9 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz _lenth,same ; goto siren9 ; movlw 100 ;reset lenth timer movwf _lenth ; goto op8 ; op9 movlw 40 ;buzzer movwf temp3 ;pitch preset to 25 movlw 2 ; movwf _lenth ;lenth timer siren10 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz _lenth,same ; goto siren10 ; movlw 2 ;reset lenth timer movwf _lenth ; movlw 255 ; movwf temp3 ;pitch preset to 25 siren11 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz _lenth,same ; goto siren11 ; movlw 2 ;reset lenth timer movwf _lenth ; goto op9 ; op10 bsf _flags,0 ;laser shoot fast movlw 1 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 255 ; movwf temp3 ;pitch preset to 25 siren12 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren12 ; movlw 1 ;reset delayed sweep movwf temp1 ; btfsc _flags,0 ;test if up or down sweep goto m11 ; goto m12 ; m11 decfsz temp2,same ;sweep timer goto var11 ; goto tog13 ;toggle if sweep over m12 movlw 5 ; subwf temp2,same ; movf temp2,w ; btfsc _status,_zero ; goto var11 ; goto tog13 ;toggle if sweep over tog13 btfsc _flags,0 ;test if sweep off goto down13 ;pitch down goto up13 ;pitch up down13 bcf _flags,0 ; goto siren12 ; up13 bsf _flags,0 ; goto siren12 ; var11 btfsc _flags,0 ;test if sweep up or down goto re13 ; decf temp3,same ; goto siren12 ; re13 movlw 255 ; subwf temp3,w ; btfsc _status,_carry ;set is positive bcf _flags,0 ; incf temp3,same ; goto siren12 ; op11 bsf _flags,0 ;laser shoot slow movlw 2 ;sweep delay timer movwf temp1 ; movlw 255 ; movwf temp2 ;sweep = 255 movlw 255 ; movwf temp3 ;pitch preset to 25 siren13 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp1,same ;delay sweep goto siren13 ; movlw 2 ;reset delayed sweep movwf temp1 ; btfsc _flags,0 ;test if up or down sweep goto m13 ; goto m14 ; m13 decfsz temp2,same ;sweep timer goto var13 ; goto tog14 ;toggle if sweep over m14 movlw 5 ; subwf temp2,same ; movf temp2,w ; btfsc _status,_zero ; goto var13 ; goto tog14 ;toggle if sweep over tog14 btfsc _flags,0 ;test if sweep off goto down14 ;pitch down goto up14 ;pitch up down14 bcf _flags,0 ; goto siren13 ; up14 bsf _flags,0 ; goto siren13 ; var13 btfsc _flags,0 ;test if sweep up or down goto re14 ; decf temp3,same ; goto siren13 ; re14 movlw 255 ; subwf temp3,w ; btfsc _status,_carry ;set is positive bcf _flags,0 ; incf temp3,same ; goto siren13 ; op12 bsf _flags,0 ;continues pulsed movlw 40 ; movwf temp3 ;pitch preset to 25 movlw 255 ;pulse timer movwf temp5 ; siren14 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp5,same ; goto siren14 ; qw3 clrwdt ;kick dog call pit ; decfsz temp5,same ; goto qw3 ; decfsz temp3 ; goto qw3 ; goto op12 ; op13 bsf _flags,0 ;double sweep fast movlw 200 ; movwf temp3 ;pitch preset to 25 siren15 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch decfsz temp3,same ; goto siren15 ; movlw 200 ; movwf temp3 ; goto siren15 ; op14 bsf _flags,0 ; movlw 10 ; movwf temp3 ;pitch preset to 25 siren16 bsf port_b,7 ;beeper on call pit ;variable pitch bcf port_b,7 ;beeper off call pit ;variable pitch movlw 1 ; addwf temp3,same ; goto siren16 ; org 3ffh ; goto init ; END ;
Devrenin Kaynak isis simülasyon ve hex asm vb.
pic16f84-ile-16-cesit-siren-devresi
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/11/05 Etiketler: alarm, microchip pic projeleri, PIC16F84 örnekleri, siren
teşekurler swicle seçmeden olmazmı yani her melodi için bir buton yada secimi daha kolay yapacak bir yöntem
arkadaşım paylaşım için sağ ol yanlız bir kaç şey sormak istiyorum kristali hangi bacaklar arasına bağlayacağız birde hoparlörden çıkan sesin desibeli nedir yanıtınızı acele bekliyorum şimdiden teşekkürler
bu devrede nasıl bir speaker kullanacağız bir de sesi arttırmak için devreye anfi bağlasak olurmu ?
devrenin çalışma prensibini yazarmısınız acaba ? [email protected]
devre çalışmıyor hex dosyasında sıkıntı var