INCLUDE "P16F84.INC" LIST P=16F84, R=DEC PA EQU 05h PB EQU 06h c1 EQU 10h c2 EQU 11h x_mute EQU 12h x_pros EQU 13h x_fyzi EQU 14h x_efek EQU 15h x_preb EQU 16h PB_mem EQU 17h ef EQU 18h ORG 00h MOVLW .15 ;nastavení: PA - vstupy TRIS PA MOVLW .0 ;nastavení: PB - výstupy TRIS PB CLRWDT ;vynulování Watch Dog CLRF PB ;nulování CLRF c1 CLRF c2 CLRF x_mute MOVLW .1 MOVWF x_pros MOVWF x_fyzi CLRF x_efek CLRF x_preb CLRF ef GOTO start ;---------------------------------- CEKANI - ZACATEK ----------------------------- cekani MOVLW .200 MOVWF c1 MOVLW .3 MOVWF c2 cek1 DECFSZ c1,1 GOTO cek1 cek2 DECFSZ c2,1 GOTO cek1 CLRWDT ;vynulování Watch Dog RETLW 00h ;---------------------------------- TEST TLACITEK - ZACATEK ----------------------------- test_tl CLRWDT testuje, jestli není stisknuté některé tlačítko. BTFSC PA,4 GOTO start1 BTFSC PA,3 GOTO start1 BTFSC PA,2 GOTO start1 BTFSC PA,1 GOTO start1 BTFSC PA,0 GOTO start1 RETLW 40h tl_preb CLRWDT testuje, jestli není stisknuté některé tlačítko (kromě testu přebuzení). BTFSC PA,3 GOTO start1 BTFSC PA,2 GOTO start1 BTFSC PA,1 GOTO start1 BTFSC PA,0 GOTO start1 RETLW 50h ;---------------------------------- ZJIŠTĚNÍ A NASTAVENÍ LED ----------------------------- led BTFSC x_pros,0 ;zjištění a nastavení stavů LED (např. po skončení efektu) BSF PB,5 BTFSS x_pros,0 BCF PB,5 BTFSC x_fyzi,0 BSF PB,4 BTFSS x_fyzi,0 BCF PB,4 BCF PB,6 BSF PB,7 RETLW 80h ;---------------------------------- START PROGRAMU ----------------------------- start CLRF PB ;vynulovaní výstupů BSF PB,1 ;zapnutí prostorového zvuku (nastavení do 1) BSF PB,5 BSF PB,3 ;zapnutí fyziologické regulace hlasitosti (nastavení do 1) BSF PB,4 BSF PB,4 BSF PB,5 BSF PB,6 BSF PB,7 CALL cekani BCF PB,4 BCF PB,5 BCF PB,6 BCF PB,7 MOVLW .6 MOVWF ef zap_cek CALL test_tl CALL cekani DECFSZ ef,1 GOTO zap_cek BSF PB,0 ;ZAPNUTÍ REPRODUKTORŮ BCF PB,7 CALL cekani ;čekání CALL cekani ;čekání CALL cekani ;čekání ;---------------------------------- NÁBĚH HLASITOSTI ----------------------------- ; tj. pozvolné rozsvícení led PB,7 v osmi úrovních měnění střídy jejího rychlého blikání. nabeh CLRWDT ;vynulování Watch Dog BSF PB,2 ;PŘIPOJENÍ VSTUPŮ MOVLW .250 MOVWF ef ef_7_1 BSF PB,7 NOP BCF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_1 MOVLW .250 MOVWF ef ef_7_2 BSF PB,7 NOP NOP NOP BCF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_2 MOVLW .250 MOVWF ef ef_7_3 BSF PB,7 NOP NOP NOP NOP NOP BCF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_3 MOVLW .250 MOVWF ef ef_7_4 BSF PB,7 NOP NOP NOP NOP NOP NOP NOP BCF PB,7 NOP NOP NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_4 MOVLW .250 MOVWF ef ef_7_5 BSF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF PB,7 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_5 MOVLW .250 MOVWF ef ef_7_6 BSF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF PB,7 NOP NOP DECFSZ ef,1 GOTO ef_7_6 MOVLW .250 MOVWF ef ef_7_7 BSF PB,7 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF PB,7 DECFSZ ef,1 GOTO ef_7_7 BSF PB,7 CALL cekani ;čekání GOTO start1 ;---------------------------------- START hlavního PROGRAMU ----------------------------- start1 CALL led ;nastavení výstupů led CLRWDT ;vynulování Watch Dog BTFSC PA,0 ;test TL (0) - mute GOTO mute BTFSC PA,1 ;test TL (1) - prostorový zvuk GOTO pros BTFSC PA,2 ;test TL (2) - fyziologická regulace hlasitosti GOTO fyzi BTFSC PA,3 ;test TL (3) - světelný efekt (4led) GOTO efek BTFSC PA,4 ;test PŘEBUZENÍ (4) - přebuzení vstupu GOTO preb BTFSC x_efek,0 ;test EFEKT GOTO efek_on BTFSC x_mute,0 GOTO mute_on ;pokud je mute zapnuto, goto blikání PB,7 (mute_on) GOTO start1 ;---------------------------------- MUTE ----------------------------- mute INCF x_mute,1 ;MUTE CALL cekani mute_l NOP NOP BTFSC PA,0 GOTO mute_l BTFSC x_mute,0 BCF PB,2 ;mute - mlčet BTFSS x_mute,0 GOTO nabeh ;mute - hrát GOTO start1 mute_on BCF PB,7 ;blikání PB,7 při mlčení MOVLW .12 MOVWF ef mut_cek CALL test_tl CALL cekani DECFSZ ef,1 GOTO mut_cek BSF PB,7 CALL cekani CALL test_tl CALL cekani CALL test_tl CALL cekani GOTO start1 ;---------------------------------- PROSTOROVY ZVUK ----------------------------- pros INCF x_pros,1 ;PROSTOROVÝ ZVUK CALL cekani pros_l NOP NOP BTFSC PA,1 GOTO pros_l BTFSC x_pros,0 GOTO pros_on ;GOTO pros - on BTFSS x_pros,0 GOTO pros_of ;GOTO pros - off GOTO start1 pros_on BSF PB,5 CALL cekani BCF PB,5 CALL cekani BSF PB,5 CALL cekani BCF PB,5 CALL cekani BSF PB,5 BSF PB,3 ;pros - on GOTO start1 pros_of BCF PB,5 BcF PB,3 ;pros - off GOTO start1 ;---------------------------------- FYZIOLOGICKÁ REGULACE HL. ----------------------------- fyzi INCF x_fyzi,1 CALL cekani fyzi_l NOP NOP BTFSC PA,2 GOTO fyzi_l BTFSC x_fyzi,0 GOTO fyzi_on ;GOTO fyzi - on BTFSS x_fyzi,0 GOTO fyzi_of ;GOTO fyzi - off GOTO start1 fyzi_on BSF PB,4 CALL cekani BCF PB,4 CALL cekani BSF PB,4 CALL cekani BCF PB,4 CALL cekani BSF PB,4 BSF PB,1 ;fyzi - on GOTO start1 fyzi_of BCF PB,4 BCF PB,1 ;fyzi - off GOTO start1 ;---------------------------------- EFEKTY ON/OFF ----------------------------- efek CALL cekani ;EFEKTY 4 LED efek_l NOP NOP BTFSC PA,3 GOTO efek_l INCF x_efek,1 ;zap/vyp světelný efekt CALL cekani GOTO start1 ;---------------------------------- PREBUZENI ----------------------------- preb MOVLW .3 MOVWF ef preb2 BCF PB,6 ;blikání PB,6 - přebuzení CALL cekani CALL tl_preb BSF PB,6 CALL cekani CALL tl_preb BCF PB,6 CALL cekani CALL tl_preb BSF PB,6 CALL cekani CALL tl_preb BCF PB,6 CALL cekani CALL tl_preb BSF PB,6 CALL cekani CALL tl_preb BCF PB,6 BTFSS PA,4 ;mlčení po dlouhodobém přebuzení GOTO start1 BTFSC x_mute,0 ;pokud je zapnuto mute, tak neodpojovat vstupy i při dlouhodobém přebuzení. GOTO preb DECFSZ ef,1 ;pokud blikání přebuzení proběhne ef-krát jdi na pr_mute (mlč) GOTO preb2 pr_mute BCF PB,2 ;mlč BTFSS PA,4 GOTO pr_end ;konec dlouhodobého přebuzení ?? > pr_end BSF PB,4 ;blikání všech čtyř led (zn. pozor, dlouhodobé přebuzení !!!) BSF PB,5 BSF PB,6 BSF PB,7 CALL cekani BCF PB,4 BCF PB,5 BCF PB,6 BCF PB,7 CALL cekani CLRWDT GOTO pr_mute pr_end MOVLW .1 ;zapnutí mlčení MOVWF x_mute GOTO start1 ;vrať se na start1, ale mlč... ;---------------------------------- LED EFEKT ----------------------------- ;plynulý had (každá led má 4 úrovně jasu, které jsou vytvořeny střídou její frekvence rychlého blikání) efek_on CALL test_tl BCF PB,4 BCF PB,5 BCF PB,6 BCF PB,7 ;---------------------------------- 1 ROZSVÍCENÍ 4 CALL test_tl MOVLW .100 MOVWF ef ef_4_1a BSF PB,4 BCF PB,4 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_4_1a CALL test_tl MOVLW .100 MOVWF ef ef_4_2a BSF PB,4 NOP NOP BCF PB,4 NOP NOP DECFSZ ef,1 GOTO ef_4_2a CALL test_tl MOVLW .100 MOVWF ef ef_4_3a BSF PB,4 NOP NOP NOP NOP BCF PB,4 DECFSZ ef,1 GOTO ef_4_3a CALL test_tl MOVLW .100 MOVWF ef ef_4_4a BSF PB,4 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_4_4a ;---------------------------------- 2 ROZSVÍCENÍ 5 CALL test_tl MOVLW .100 MOVWF ef ef_5_1a BSF PB,5 BCF PB,5 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_5_1a CALL test_tl MOVLW .100 MOVWF ef ef_5_2a BSF PB,5 NOP NOP BCF PB,5 NOP NOP DECFSZ ef,1 GOTO ef_5_2a CALL test_tl MOVLW .100 MOVWF ef ef_5_3a BSF PB,5 NOP NOP NOP NOP BCF PB,5 DECFSZ ef,1 GOTO ef_5_3a CALL test_tl MOVLW .100 MOVWF ef ef_5_4a BSF PB,5 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_5_4a ;---------------------------------- 3 ZHASNUTÍ 4 CALL test_tl MOVLW .100 MOVWF ef ef_4_3b BSF PB,4 NOP NOP NOP NOP BCF PB,4 DECFSZ ef,1 GOTO ef_4_3b CALL test_tl MOVLW .100 MOVWF ef ef_4_2b BSF PB,4 NOP NOP BCF PB,4 NOP NOP DECFSZ ef,1 GOTO ef_4_2b CALL test_tl MOVLW .100 MOVWF ef ef_4_1b BSF PB,4 BCF PB,4 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_4_1b ;---------------------------------- 4 ROZSVÍCENÍ 6 CALL test_tl MOVLW .100 MOVWF ef ef_6_1a BSF PB,6 BCF PB,6 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_6_1a CALL test_tl MOVLW .100 MOVWF ef ef_6_2a BSF PB,6 NOP NOP BCF PB,6 NOP NOP DECFSZ ef,1 GOTO ef_6_2a CALL test_tl MOVLW .100 MOVWF ef ef_6_3a BSF PB,6 NOP NOP NOP NOP BCF PB,6 DECFSZ ef,1 GOTO ef_6_3a CALL test_tl MOVLW .100 MOVWF ef ef_6_4a BSF PB,6 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_6_4a ;---------------------------------- 5 ZHASNUTÍ 5 CALL test_tl MOVLW .100 MOVWF ef ef_5_3b BSF PB,5 NOP NOP NOP NOP BCF PB,5 DECFSZ ef,1 GOTO ef_5_3b CALL test_tl MOVLW .100 MOVWF ef ef_5_2b BSF PB,5 NOP NOP BCF PB,5 NOP NOP DECFSZ ef,1 GOTO ef_5_2b CALL test_tl MOVLW .100 MOVWF ef ef_5_1b BSF PB,5 BCF PB,5 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_5_1b ;---------------------------------- 6 ROZSVÍCENÍ 7 CALL test_tl MOVLW .100 MOVWF ef ef_7_1a BSF PB,7 BCF PB,7 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_1a CALL test_tl MOVLW .100 MOVWF ef ef_7_2a BSF PB,7 NOP NOP BCF PB,7 NOP NOP DECFSZ ef,1 GOTO ef_7_2a CALL test_tl MOVLW .100 MOVWF ef ef_7_3a BSF PB,7 NOP NOP NOP NOP BCF PB,7 DECFSZ ef,1 GOTO ef_7_3a CALL test_tl MOVLW .100 MOVWF ef ef_7_4a BSF PB,7 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_4a ;---------------------------------- 7 ZHASNUTÍ 6 CALL test_tl MOVLW .100 MOVWF ef ef_6_3b BSF PB,6 NOP NOP NOP NOP BCF PB,6 DECFSZ ef,1 GOTO ef_6_3b CALL test_tl MOVLW .100 MOVWF ef ef_6_2b BSF PB,6 NOP NOP BCF PB,6 NOP NOP DECFSZ ef,1 GOTO ef_6_2b CALL test_tl MOVLW .100 MOVWF ef ef_6_1b BSF PB,6 BCF PB,6 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_6_1b ;---------------------------------- 8 ZHASNUTÍ 7 CALL test_tl MOVLW .100 MOVWF ef ef_7_3b BSF PB,7 NOP NOP NOP NOP BCF PB,7 DECFSZ ef,1 GOTO ef_7_3b CALL test_tl MOVLW .100 MOVWF ef ef_7_2b BSF PB,7 NOP NOP BCF PB,7 NOP NOP DECFSZ ef,1 GOTO ef_7_2b CALL test_tl MOVLW .100 MOVWF ef ef_7_1b BSF PB,7 BCF PB,7 NOP NOP NOP NOP DECFSZ ef,1 GOTO ef_7_1b ;---------------------------------- 9 ČEKÁNÍ MOVLW .16 MOVWF ef ef_cek CALL test_tl CALL cekani DECFSZ ef,1 GOTO ef_cek GOTO start1 ;konec jedné části efekt >> jdi na start1 (a opakuj dokola) END