//********************************************************************** /*   <音声スイッチ(VOX)> */ //********************************************************************** #define LED1 GPIO.F5 #define LED2 GPIO.F4 #define SW1 GPIO.F3 #define SW2 GPIO.F2 //********************************************************************** short on_cnt, threshold; void interrupt() { if (PIR1.CMIF == 1) { PIR1.CMIF = 0; // on_cnt = threshold; } // if (PIR1.CCP1IF == 1) { PIR1.CCP1IF = 0; // if (on_cnt > 0) { LED2 = 1; on_cnt--; } else { LED2 = 0; } } } //********************************************************************** void main() { static unsigned short Sensitivity, RecoveryTime, cnt; // OSCCON = 0b01110000; // クロックは8Mhz CMCON0 = 0b00000100; // コンパレータを使用する。 ANSEL = 0b00000000; // A/D変換は使用しない。 TRISIO = 0b00001110; GPIO = 0b00000000; // CCPの設定 PIE1.CCP1IE = 1; PIR1.CCP1IF = 0; CCP1CON = 0b00001011; CCPR1L = 0xC4; // 0.01sec...100hz...クロックが8Mhzの時 CCPR1H = 0x09; // 0.01sec...(1÷8000000)*4*8*2500 // TIMER1の設定 PIE1.TMR1IE = 0; PIR1.TMR1IF = 0; TMR1L = 0; TMR1H = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 1; //コンパレータの設定 CMCON0.CINV = 1; PIE1.CMIE = 1; PIR1.CMIF = 0; //基準電圧の設定 VRCON.VREN = 1; VRCON.VRR = 1; VRCON.VR3 = 0; VRCON.VR2 = 1; VRCON.VR1 = 0; VRCON.VR0 = 1; // LED1 = 0; LED2 = 0; // Sensitivity = 5; RecoveryTime = 5; threshold = 50; // INTCON.PEIE = 1; // これ以降の処理で割り込みを許可する。 INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。 // while (1) { //感度調整(10段階切替) if (SW1 == 0) { while (SW1 == 0) { Delay_ms(10); } // Sensitivity++; Sensitivity = (Sensitivity < 11) ? Sensitivity: 1; for (cnt = 0; cnt < Sensitivity; cnt++) { LED1 = 1; Delay_ms(100); LED1 = 0; Delay_ms(100); } // VRCON.VR3 = Sensitivity.F3; VRCON.VR2 = Sensitivity.F2; VRCON.VR1 = Sensitivity.F1; VRCON.VR0 = Sensitivity.F0; } //リカバリータイム調整(0.1秒~1.0秒迄の10段階切替) if (SW2 == 0) { while (SW2 == 0) { Delay_ms(10); } // RecoveryTime++; RecoveryTime = (RecoveryTime < 11) ? RecoveryTime: 1; for (cnt = 0; cnt < RecoveryTime; cnt++) { LED1 = 1; Delay_ms(100); LED1 = 0; Delay_ms(100); } // threshold = RecoveryTime * 10; } } } //**********************************************************************