//Timer0Interrupt #include #include #pragma config PLLDIV = 5 // (20MHz crystal) #pragma config CPUDIV = OSC1_PLL2 //「 主 発振 器 そのまま」「システム96MHzPLLソースを2 分 の 一 」 #pragma config USBDIV = 2 // Clock source from 96MHz PLL/2 #pragma config FOSC = HSPLL_HS //外付け振動子利用の高速クロック発振で、PLLを 使 う #pragma config FCMEN = OFF //フェイルセーフクロックモニターを 無効 #pragma config IESO = OFF //発振 器 の 内部 外部 切 り 替 えを 無効 #pragma config PWRT = OFF //電源オン時タイマーを使わない #pragma config BOR = ON //ハードだけでブラウンアウトリセット 機能 を使う #pragma config BORV = 3 //最小電圧設定 #pragma config VREGEN = ON //USB Voltage Regulator = ON #pragma config WDT = OFF //ウオッチドッグタイマを 無効 #pragma config WDTPS = 32768 //ウォッチドッグタイマーのプリスケーラが1:32,768 #pragma config MCLRE = ON //MCLRを 有効 にしてRE3入力端子は 無効 #pragma config LPT1OSC = OFF //タイマー1 発振 器 を 高電力 モードにする #pragma config PBADEN = OFF //リセット 時 にPORTB0〜4をデジタル 入出力 に 選択 する #pragma config CCP2MX = OFF //CCP2の入出力をRB3にマルチプレックスしない #pragma config STVREN = ON //スタック満杯あるいはアンダーフロー時にリセットする #pragma config LVP = OFF //ICSPモードでの単一書き込み電源は 使 わない #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming = OFF #pragma config XINST = OFF // Extended Instruction Set = OFF #pragma config CP0 = OFF //ブロック0(000800−001FFFh)のコードを保護しない #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF //ブロック0 (000800-001FFFh) の書込み保護しない #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF #pragma config WRTB = OFF // Boot block (000000-0007FFh)の書込み保護しない #pragma config WRTC = OFF //Configuration registers (300000-3000FFh) の書込み保護しない #pragma config WRTD = OFF //Data EEPROM の書込み保護しない #pragma config EBTR0 = OFF //Block 0 (000800-001FFFh) を他のブロック実行時のテーブル読み取りから保護しない #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF #pragma config EBTRB = OFF //Boot block (000000-0007FFh)を他のブロック実行時のテーブル読み取りから保護しない #define _XTAL_FREQ 48000000 //__delay_ms // プロトタイプ宣言 void InitInterTimer0 (void); void RUN1(void); void RUN2(void); void RUN3(void); void RUN4(void); unsigned short gB=0,gC=0,gT=0; // メイン関数 void main (void) { int i,j; // 入出力設定 ADCON1 = 0b00001111; //全チャンネルがデジタルに設定され、VDDとVSSが選択 TRISA = 0b00000000; TRISB = 0b00000001; TRISC = 0b00110000; //D-,D+(USB用)RC4とRC5を入力に設定 TRISD = 0b00000000; TRISE = 0b00000011; //SW1,2=INPUT LED=OUTPUT LATA = 0b00000000; LATB = 0b00000000; LATC = 0b00000000; LATD = 0b00000000; LATE = 0b00000000; // タイマ0割込み設定関数の呼び出し InitInterTimer0(); // 割込み全体の許可 GIE = 1; PORTBbits.RB1=1; for ( i = 0; i < 10; i++ ) { PORTDbits.RD0=1; PORTDbits.RD1=1; PORTDbits.RD2=1; PORTDbits.RD3=1; PORTDbits.RD4=1; PORTDbits.RD5=1; PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_us( 500 ); PORTDbits.RD0=0; PORTDbits.RD1=0; PORTDbits.RD2=0; PORTDbits.RD3=0; PORTDbits.RD4=0; PORTDbits.RD5=0; PORTDbits.RD6=0; PORTDbits.RD7=0; for ( j = 0; j < 2; j++ )__delay_ms( 10 ); } // 永久ループ while(1) { if(gT > 0X0020 && gT < 0x0028) { RUN1(); gT=0; } if(gT > 0X0010 && gT < 0X0015) { RUN2(); gT=0; } if(gT > 0X0009 && gT < 0X000D) { RUN3(); gT=0; } if(gT > 0X0001 && gT < 0X0006) { RUN4(); gT=0; } } } // 割込みサービスルーチン static void interrupt isr() { if(gB==1) { if(PORTBbits.RB0 == 1) { gC++;gB=1; } else { gT=gC;gB=0; } } else { if(PORTBbits.RB0 == 1) { gC=0;gB=1; } else { gC=0;gB=0; } } // タイマ0割込みフラグをクリア T0IF = 0; } // タイマ0割込み設定関数 void InitInterTimer0 (void) { // クロック源を内部クロックに設定 T0CS = 0; // プリスケーラをタイマ0に割り当て PSA = 0; // プリスケーラ値を64に設定 T0CONbits.T0PS0 = 1;//PIC18F4553 T0CONbits.T0PS1 = 0;//PIC18F4553 T0CONbits.T0PS2 = 1;//PIC18F4553 // TMR0レジスタをクリア TMR0 = 0x0000; // タイマ0割込みフラグをクリア T0IF = 0; // タイマ0割込みの許可 T0IE = 1; } void RUN1(void) { int i; for ( i = 0; i < 20; i++ ) { PORTDbits.RD3=1; PORTDbits.RD4=1; PORTDbits.RD5=1; __delay_ms( 1 ); PORTDbits.RD3=0; __delay_ms( 1 ); PORTDbits.RD4=0; PORTDbits.RD5=0; __delay_ms( 10 ); } for ( i = 0; i < 30; i++ ){__delay_ms( 10 );} for ( i = 0; i < 20; i++ ) { PORTDbits.RD0=1; PORTDbits.RD1=1; PORTDbits.RD2=1; __delay_ms( 1 ); PORTDbits.RD0=0; PORTDbits.RD2=0; __delay_ms( 1 ); PORTDbits.RD1=0; __delay_ms( 10 ); } for ( i = 0; i < 20; i++ ) { PORTDbits.RD3=1; PORTDbits.RD4=1; PORTDbits.RD5=1; __delay_ms( 1 ); PORTDbits.RD4=0; PORTDbits.RD5=0; __delay_ms( 1 ); PORTDbits.RD3=0; __delay_ms( 10 ); } for ( i = 0; i < 30; i++ ){__delay_ms( 10 );} for ( i = 0; i < 20; i++ ) { PORTDbits.RD0=1; PORTDbits.RD1=1; PORTDbits.RD2=1; __delay_ms( 1 ); PORTDbits.RD1=0; __delay_ms( 1 ); PORTDbits.RD0=0; PORTDbits.RD2=0; __delay_ms( 10 ); } } void RUN2(void) { int i; for ( i = 0; i < 30; i++ ) { PORTDbits.RD3=1; PORTDbits.RD4=1; PORTDbits.RD5=1; __delay_ms( 1 ); PORTDbits.RD3=0; __delay_ms( 1 ); PORTDbits.RD4=0; PORTDbits.RD5=0; __delay_ms( 10 ); } for ( i = 0; i < 30; i++ ){__delay_ms( 10 );} for ( i = 0; i < 30; i++ ) { PORTDbits.RD0=1; PORTDbits.RD1=1; PORTDbits.RD2=1; __delay_ms( 1 ); PORTDbits.RD1=0; __delay_ms( 1 ); PORTDbits.RD0=0; PORTDbits.RD2=0; __delay_ms( 10 ); } for ( i = 0; i < 30; i++ ) { PORTDbits.RD3=1; PORTDbits.RD4=1; PORTDbits.RD5=1; __delay_ms( 1 ); PORTDbits.RD4=0; PORTDbits.RD5=0; __delay_ms( 1 ); PORTDbits.RD3=0; __delay_ms( 10 ); } for ( i = 0; i < 30; i++ ){__delay_ms( 10 );} for ( i = 0; i < 30; i++ ) { PORTDbits.RD0=1; PORTDbits.RD1=1; PORTDbits.RD2=1; __delay_ms( 1 ); PORTDbits.RD0=0; PORTDbits.RD2=0; __delay_ms( 1 ); PORTDbits.RD1=0; __delay_ms( 10 ); } } void RUN3(void) { int i,j; for ( i = 0; i < 3; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); PORTDbits.RD6=0; __delay_ms( 1 ); PORTDbits.RD7=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 5; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_us( 500 ); PORTDbits.RD6=0; PORTDbits.RD7=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 3; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); PORTDbits.RD7=0; __delay_ms( 1 ); PORTDbits.RD6=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 5; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_us( 500 ); PORTDbits.RD6=0; PORTDbits.RD7=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } } void RUN4(void) { int i,j; for ( i = 0; i < 3; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_ms( 1 ); PORTDbits.RD7=0; PORTDbits.RD6=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 5; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_us( 500 ); PORTDbits.RD6=0; PORTDbits.RD7=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 3; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); PORTDbits.RD6=0; PORTDbits.RD7=0; __delay_ms( 1 ); for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } for ( i = 0; i < 5; i++ ) { PORTDbits.RD6=1; PORTDbits.RD7=1; __delay_ms( 1 ); __delay_us( 500 ); PORTDbits.RD6=0; PORTDbits.RD7=0; for ( j = 0; j < 5; j++ )__delay_ms( 10 ); } }