//********************************************************************** #define sw0 GPIO.F0 #define sw1 GPIO.F1 #define sw2 GPIO.F4 //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.F6 = duty_ratio & 0b00000001; CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** void main() { static unsigned char temp; // OSCCON = 0b01110000; // クロックは1Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000000; // AN0を使用する。 TRISIO = 0b00011011; // ポート設定 WPU.F0 = 1; // プルアップ WPU.F1 = 1; // プルアップ WPU.F4 = 1; // プルアップ OPTION_REG = 0b00000000; // Pwm_Init(1000000); // 1Mhz PR2 = 2; /* 1666Khz 2 1250Khz 3 1000Khz 4 833Khz 5 714Khz 6 625Khz 7 555Khz 8 500Khz 9 */ Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Start(); // temp = GPIO & 0b00010011; while (1) { if (temp != (GPIO & 0b00010011)) { temp = GPIO & 0b00010011; switch (temp) { case 0b00000000: PR2 = 9; // 500Khz break; case 0b00000001: PR2 = 8; // 555Khz break; case 0b00000010: PR2 = 7; // 625Khz break; case 0b00000011: PR2 = 6; // 714Khz break; case 0b00010000: PR2 = 5; // 833Khz break; case 0b00010001: PR2 = 4; // 10000Khz break; case 0b00010010: PR2 = 3; // 1250Khz break; case 0b00010011: PR2 = 2; // 1666Khz break; } Pwm_Change_DutyEx((PR2 * 4) / 2); } } } //**********************************************************************