;****************************************************************************************** ; 音響LSI(YAMAHA YMZ294)用 サンプル ; 振動センサーで揺れを感じると1曲演奏する ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H18.07.30 ; Replace date : ; History : ;****************************************************************************************** ; (1)Descript I/O ; PORTA ; PORTA(0) : Output YMZ294(WR) ; PORTA(1) : Output YMZ294(CS) ; PORTA(2) : Output YMZ294(A0) ; PORTA(3) : Output YMZ294(IC) ; PORTA(4) : None connect ; PORTA(5) : None connect ; PORTA(6) : Serial Port(Rx) => Senser ; PORTA(7) : Serial Port(Tx) ; PORTB ; PORTB(0) : Output YMZ294(D0) ; PORTB(1) : Output YMZ294(D1) ; PORTB(2) : Output YMZ294(D2) ; PORTB(3) : Output YMZ294(D3) ; PORTB(4) : Output YMZ294(D4) ; PORTB(5) : Output YMZ294(D5) ; PORTB(6) : Output YMZ294(D6) ; PORTB(7) : Output YMZ294(D7) ; ;****************************************************************************************** LIST P=PIC16F88,ST=OFF,R=DEC INCLUDE "P16F88.inc" __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO __CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF ADR EQU 20H ; Adress DAT EQU 21H ; Data LP EQU 22H CNT0 EQU 23H CNT1 EQU 24H CNT2 EQU 25H DAT0 EQU 26H DAT1 EQU 27H ; ORG 0 GOTO START ORG 4 GOTO START START ; Bank0での設定 BANKSEL PORTA ; PortAのBankを選択する CLRF PORTA ; PortAの初期化(Bank0) CLRF PORTB ; PortBの初期化(Bank0,1,2,3) ; Bank1での設定 BANKSEL ANSEL ; ANSELのBankを選択する(Bank1) MOVLW B'01111110' ;内部OSC選択,内部OSCに8MHzを選択 MOVWF OSCCON MOVLW B'00000000' ;Degitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'01000000' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'00000000' MOVWF TRISB ; PortBのI/O設定(Bank1) MOVLW B'10000000' ; 7:10Bitを右詰めで得る,6:?(どっちでも),5-4:ReferはVoltage-GND,3-0:None MOVWF ADCON1 ;(Bank1) ; Bank0に戻す BANKSEL PORTA ; PortAのBankを選択する ; ; 1.SSGのリセット CALL SSGRES ; MAIN ; 2.揺れを待つ CALL PROG1 ; 3.曲を鳴らす CALL DEMO2 ; GOTO MAIN ;****************************************************************************************** ; Function Name : PROG1 ; Title : 揺れを待つ(状態が変化したら抜ける) ; Input : ; Output : ;****************************************************************************************** PROG1 ; 1.状態設定 BTFSC PORTA,6 GOTO PROG1B ; 2.0の場合 BTFSS PORTA,6 GOTO $-1 RETURN PROG1B ; 3.1の場合 BTFSC PORTA,6 GOTO $-1 RETURN ;****************************************************************************************** ; Function Name : DEMO1 ; Title : デモ1(ドレミファソラシド) ; Input : ; Output : ;****************************************************************************************** DEMO1 ; ド MOVLW H'01' MOVWF DAT1 MOVLW H'DD' MOVWF DAT0 CALL SETSND CALL TIMS ; レ   MOVLW H'01' MOVWF DAT1 MOVLW H'A9' MOVWF DAT0 CALL SETSND CALL TIMS ; ミ   MOVLW H'01' MOVWF DAT1 MOVLW H'7B' MOVWF DAT0 CALL SETSND CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS ; ラ   MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS ; シ   MOVLW H'00' MOVWF DAT1 MOVLW H'FD' MOVWF DAT0 CALL SETSND CALL TIMS ; ド   MOVLW H'00' MOVWF DAT1 MOVLW H'EF' MOVWF DAT0 CALL SETSND CALL TIMS ; RETURN ;****************************************************************************************** ; Function Name : DEMO2 ; Title : デモ2(海) ; Input : ; Output : ;****************************************************************************************** DEMO2 ; ラ MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; レ   MOVLW H'01' MOVWF DAT1 MOVLW H'A9' MOVWF DAT0 CALL SETSND CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; レ   MOVLW H'01' MOVWF DAT1 MOVLW H'A9' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ド   MOVLW H'01' MOVWF DAT1 MOVLW H'DD' MOVWF DAT0 CALL SETSND CALL TIMS ; ; ド MOVLW H'01' MOVWF DAT1 MOVLW H'DD' MOVWF DAT0 CALL SETSND CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS ; ; ; ; ; ラ   MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ラ   MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ド   MOVLW H'00' MOVWF DAT1 MOVLW H'EF' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ラ   MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS ; ラ   MOVLW H'01' MOVWF DAT1 MOVLW H'1C' MOVWF DAT0 CALL SETSND CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; レ   MOVLW H'01' MOVWF DAT1 MOVLW H'A9' MOVWF DAT0 CALL SETSND CALL TIMS ; レ   MOVLW H'01' MOVWF DAT1 MOVLW H'A9' MOVWF DAT0 CALL SETSND CALL TIMS ; ド   MOVLW H'01' MOVWF DAT1 MOVLW H'DD' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ソ   MOVLW H'01' MOVWF DAT1 MOVLW H'3F' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS ; ファ   MOVLW H'01' MOVWF DAT1 MOVLW H'66' MOVWF DAT0 CALL SETSND CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS CALL TIMS ; RETURN ;****************************************************************************************** ; Function Name : SETSND ; Title : 音を出す ; Input : ; Output : ; Description : ; ラ(220Hz) ;568 > 238h ; ラ#(233Hz) ;536 > 218h ; シ(247Hz) ;506 > 1FAh ; ド(262Hz) ;477 > 1DDh ; ド#(277Hz) ;451 > 1C3h ; レ(294Hz) ;425 > 1A9h ; レ#(311Hz) ;402 > 192h ; ミ(330Hz) ;379 > 17Bh ; ファ(349Hz) ;358 > 166h ; ファ#(370Hz);338 > 152h ; ソ(392Hz) ;319 > 13Fh ; ソ#(415Hz) ;301 > 12Dh ; ラ(440HzHz) ;284 > 11Ch ; ラ#(466Hz) ;268 > 10Ch ; シ(494Hz) ;253 > 0FDh ; ド(523Hz) ;239 > 0EFh ; ド#(554Hz) ;226 > 0E2h ; レ(587Hz) ;213 > 0D5h ; レ#(622Hz) ;201 > 0C9h ; ミ(659Hz) ;190 > 0BEh ;****************************************************************************************** SETSND ; 0.設定 CALL INTSSG ; 1.$01 MOVLW H'01' MOVWF ADR ; MOVFW DAT1 MOVWF DAT ; CALL WRTSSG ; ; 2.$00 MOVLW H'00' MOVWF ADR ; MOVFW DAT0 MOVWF DAT ; CALL WRTSSG ; RETURN ;****************************************************************************************** ; Function Name : INTSSG ; Title : SSGの初期設定 ; Input : ; Output : ;****************************************************************************************** INTSSG ; 1.ミキサーの設定($07) MOVLW H'07' MOVWF ADR ; MOVLW B'00111000' MOVWF DAT ; CALL WRTSSG ; ; 2.ボリューム設定($08〜$0A) ; (1)チャンネルA($08) MOVLW H'08' MOVWF ADR ; MOVLW B'00011111' MOVWF DAT ; CALL WRTSSG ; ; (2)チャンネルB($09) MOVLW H'09' MOVWF ADR ; MOVLW B'00011111' MOVWF DAT ; CALL WRTSSG ; ; (3)チャンネルC($0A) MOVLW H'0A' MOVWF ADR ; MOVLW B'00011111' MOVWF DAT ; CALL WRTSSG ; ; 3.エンベローブ周波数の設定($0B〜$0C) ; (1)15-8($0C) MOVLW H'0C' MOVWF ADR ; MOVLW H'0A' MOVWF DAT ; CALL WRTSSG ; ; (2)0-7($0B) MOVLW H'0B' MOVWF ADR ; MOVLW H'2C' MOVWF DAT ; CALL WRTSSG ; ; 4.エンベローブの設定($0D) MOVLW H'0D' MOVWF ADR ; MOVLW B'00000000' MOVWF DAT ; CALL WRTSSG ; RETURN ; ;****************************************************************************************** ; Function Name : WRTSSG ; Title : SSGにアドレスとデータを設定する ; Input : ; Output : ;****************************************************************************************** WRTSSG ; 1.アドレスを書き込む MOVLW B'10001000' ;SSGLPにアドレスを書き込む設定 MOVWF PORTA ;SSGLPにアドレスを書き込む設定 MOVFW ADR ;SSGLPにアドレスを書き込む MOVWF PORTB ;SSGLPにアドレスを書き込む MOVLW B'10001011' ;SSGLPにアドレスを書き込む指示 MOVWF PORTA ;SSGLPにアドレスを書き込む指示 ; 2.データを書き込む MOVLW B'10001100' ;SSGLPにデータを書き込む設定 MOVWF PORTA ;SSGLPにデータを書き込む設定 MOVFW DAT ;SSGLPにデータを書き込む MOVWF PORTB ;SSGLPにデータを書き込む MOVLW B'10001111' ;SSGLPにデータを書き込む指示 MOVWF PORTA ;SSGLPにデータを書き込む指示 ; RETURN ; ; ;****************************************************************************************** ; Function Name : SSGRES ; Title : SSGをリセットする ; Input : ; Output : ; Description : リセットパルスは5μS以上(200KHz)必要 ; 8MHz/4 =(200)=> 10KHz 以上 ;****************************************************************************************** SSGRES ; 1.ICを'0'にする BCF PORTA,3 ; 2.5μS以上待つ MOVLW H'FF' MOVWF LP SSGRES1 NOP NOP DECFSZ LP,F GOTO SSGRES1 ; ; 3.ICを'1'に戻す BSF PORTA,3 ; RETURN ; ; ;****************************************************************************************** ; Function Name : TIM1S ; Title : タイマー(約1秒) ; Input : ; Output : ;****************************************************************************************** TIM1S CALL TIMS CALL TIMS CALL TIMS CALL TIMS RETURN ;****************************************************************************************** ; Function Name : TIMS ; Title : タイマー(約0.25秒) ; Input : ; Output : ; Description : 8/4MHz =(200)=> 10KHz =(100)=> 100Hz =(100)=> 1Hz ;****************************************************************************************** TIMS ; MOVLW H'64' MOVLW H'19' MOVWF CNT2 TIMS2 MOVLW H'64' MOVWF CNT1 TIMS1 MOVLW H'64' MOVWF CNT0 TIMS0 DECFSZ CNT0,F GOTO TIMS0 DECFSZ CNT1,F GOTO TIMS1 DECFSZ CNT2,F GOTO TIMS2 RETURN ; END