// PIC16F88 Configuration Bit Settings #include <xc.h> // CONFIG1 #pragma config FOSC = INTOSCIO//内部クロックを使用 #pragma config WDTE = OFF // ウォッチドッグタイマはオフ #pragma config PWRTE = ON // パワーアップタイマーはオン #pragma config MCLRE = OFF // #pragma config BOREN = OFF // #pragma config LVP = OFF // #pragma config CPD = OFF // #pragma config WRT = OFF // F #pragma config CCPMX = RB3 // CCP1 はRB3から出力 #pragma config CP = OFF //コードプロテクトはオフ // CONFIG2 #pragma config FCMEN = OFF // #pragma config IESO = OFF // #define _XTAL_FREQ 1000000 //delay関数を使う為の設定 クロックは1MHz void main(void){ OSCCON =0b01000000;//クロックを1MHzに設定 ANSEL = 0b00000000;//AD設定はすべてデジタルで設定 TRISA = 0b00000000;//ポートAは全て出力に設定 TRISB = 0b00000000;//ポートBは全て出力に設定 PORTA = 0b00000000;//ポートをクリア PORTB = 0b00000000;//ポートクリア CCP1CON = 0b00001100; // PWMモードにする /*パルス周期はT2CONとPR2によって変わる。クロックが1MHzなので1命令で4クロック。 なので4usec*255(PR2)*16(プリスケーラー)=16320usec*/ T2CON = 0b00000110; // プリスケール16 PR2 = 255; // PWM周期 CCPR1L=25; // 中央 パルス幅はCCPR1Lの値を可変させる事で変更できる 今回10-40の間でパルス幅がちょうど0.6msec-2.3msecになる。 while (1) { CCPR1L=10;//中央の位置から右に90度移動 PORTBbits.RB1 = 1; __delay_ms(1500); PORTBbits.RB1 = 0; __delay_ms(500); CCPR1L=25;//中央にもどる PORTBbits.RB1 = 1; __delay_ms(1500); PORTBbits.RB1 = 0; __delay_ms(500); CCPR1L=40;//中央から左に90度移動 PORTBbits.RB1 = 1; __delay_ms(1500); PORTBbits.RB1 = 0; __delay_ms(500); CCPR1L=25;//中央にもどる PORTBbits.RB1 = 1; __delay_ms(1500); PORTBbits.RB1 = 0; __delay_ms(500); } return; } |
スポンサードリンク