/******************************************************************************/ void interrupt(){ if (PIR1.CCP1IF == 1) { PIR1.CCP1IF = 0; // GPIO.F4 = 1; asm nop; asm nop; GPIO.F4 = 0; } } //********************************************************************** void main() { static unsigned int cnt; OSCCON = 0b01110000; // クロックは8Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000000; // AN0を使用しない。 TRISIO = 0b00100111; // ポート設定 OPTION_REG = 0b00000000; WPU.F0 = 1; // プルアップ WPU.F1 = 1; // プルアップ WPU.F2 = 1; // プルアップ // CCPの設定 PIE1.CCP1IE = 1; PIR1.CCP1IF = 0; CCP1CON = 0b00001011; cnt = 500; // 500kHz(初期値設定) CCPR1L = cnt & 0xFF; CCPR1H = (cnt >> 8) & 0xFF; // TIMER1の設定 PIE1.TMR1IE = 0; PIR1.TMR1IF = 0; TMR1L = 0; TMR1H = 0; T1CON.T1CKPS0 = 0; T1CON.T1CKPS1 = 0; T1CON.TMR1CS = 1; T1CON.TMR1ON = 1; // 割り込み(全体)の設定 INTCON.PEIE = 1; INTCON.GIE = 1; // while (1) { if ((GPIO.F0 == 1) && (GPIO.F1 == 1)) continue; if ((GPIO.F0 == 0) && (GPIO.F1 == 1)) { if (GPIO.F2 == 1) cnt++; else cnt += 10; } if ((GPIO.F0 == 1) && (GPIO.F1 == 0)) { if (GPIO.F2 == 1) cnt--; else cnt -= 10; } while (1) { if ((GPIO.F0 == 0) && (GPIO.F1 == 0)) { cnt = 500; } if ((GPIO.F0 == 1) && (GPIO.F1 == 1)) break; Delay_ms(1); } if (cnt < 90) cnt = 90; if (cnt > 1510) cnt = 1510; CCPR1L = cnt & 0xFF; CCPR1H = (cnt >> 8) & 0xFF; } } //**********************************************************************