' {$STAMP BS2} ' {$PBASIC 2.5} '------- 定義 ------- '--- 変数 i VAR Word j VAR Word vf VAR Word vf2 VAR Word p1 VAR Word p2 VAR Word p3 VAR Word p4 VAR Word p5 VAR Word sglDif VAR Bit oddSign VAR Bit adc VAR Byte(2) f2 VAR Word(2) '--- 定数 C CON 523 D CON 587 E CON 659 F CON 698 G CON 784 A CON 880 B CON 988 R CON 0 T CON 50 P CON 200 Sgl CON %1 '--- ピン割り当て CS PIN 13 CLK PIN 14 Dio PIN 15 '------- メイン処理分 ------- '--- ADCリセット Reset: HIGH CS '--- モードセレクト IF IN0=0 THEN mode0 IF (IN4=1) AND (IN5=1) THEN mode1 IF (IN4=1) AND (IN5=0) THEN mode2 IF (IN4=0) AND (IN5=1) THEN mode3 IF (IN4=0) AND (IN5=0) THEN mode4 mode0: GOTO main0 mode1: p1=6 p2=6 p3=6 p4=6 p5=6 GOTO main mode2: p1=6 p2=7 p3=6 p4=7 p5=6 GOTO main mode3: p1=6 p2=8 p3=9 p4=10 p5=10 GOTO main mode4: p1=10 p2=9 p3=8 p4=6 p5=6 GOTO main main0: DO sglDif=Sgl oddSign = 0 GOSUB adc_s f2(oddSign)= 100*adc(oddSign)/8 vf=f2(oddSign) IF IN1=1 THEN doremi1 GOSUB doremi doremi1: GOSUB wave IF vf=0 THEN noise1 FREQOUT 6,20,vf,vf2 GOTO loop1 noise1:PAUSE P loop1:LOOP END main: DO sglDif=Sgl oddSign = 0 GOSUB adc_s f2(oddSign)= 100*adc(oddSign)/8 vf=f2(oddSign) IF IN1=1 THEN doremi2 GOSUB doremi doremi2: GOSUB wave IF vf=0 THEN noise GOSUB pin_act GOTO loop2 noise:PAUSE P loop2:LOOP END adc_s: LOW CS LOW CLK SHIFTOUT Dio,CLK,MSBFIRST,[%1\1,sglDif\1,oddSign\1] SHIFTIN Dio,CLK,MSBPOST,[adc(oddSign)\8] HIGH CS RETURN pin_act: FREQOUT p1,T,vf,vf2 FREQOUT p2,T,vf,vf2 FREQOUT p3,T,vf,vf2 FREQOUT p4,T,vf,vf2 FREQOUT p5,T*2,vf,vf2 PAUSE P RETURN doremi: IF adc(oddSign)=0 THEN O1 IF adc(oddSign)<7 THEN O2 IF adc(oddSign)<10 THEN O3 IF adc(oddSign)<14 THEN O4 IF adc(oddSign)<19 THEN O5 IF adc(oddSign)<26 THEN O6 IF adc(oddSign)<33 THEN O7 IF adc(oddSign)<40 THEN O8 IF adc(oddSign)<47 THEN O9 IF adc(oddSign)<54 THEN O10 IF adc(oddSign)<61 THEN O11 IF adc(oddSign)<69 THEN O12 IF adc(oddSign)<77 THEN O13 IF adc(oddSign)<85 THEN O14 IF adc(oddSign)<91 THEN O15 IF adc(oddSign)<150 THEN O16 onkai: LOOKUP j,[R,C,D,E,F,G,A,B,C*2,D*2,E*2,F*2,G*2,A*2,B*2,C*4],vf DEBUG DEC j,TAB,DEC vf,CR RETURN O1:j=0 GOTO onkai O2:j=1 GOTO onkai O3:j=2 GOTO onkai O4:j=3 GOTO onkai O5:j=4 GOTO onkai O6:j=5 GOTO onkai O7:j=6 GOTO onkai O8:j=7 GOTO onkai O9:j=8 GOTO onkai O10:j=9 GOTO onkai O11:j=10 GOTO onkai O12:j=11 GOTO onkai O13:j=12 GOTO onkai O14:j=13 GOTO onkai O15:j=14 GOTO onkai O16:j=15 GOTO onkai wave: IF (IN2=1) AND (IN3=1) THEN wave1 IF (IN2=1) AND (IN3=0) THEN wave2 IF (IN2=0) AND (IN3=1) THEN wave3 IF (IN2=0) AND (IN3=0) THEN wave4 back:RETURN wave1: vf2=vf GOTO back wave2: vf2=vf-8 GOTO back wave3: vf2=vf-100 GOTO back wave4: vf2=vf/2 GOTO back