//****************************************************************************************** // PIC10F322 Sample Program // Project : // Program Name : // Programer : // Create date : Version 1.0 H24.10.10 // Replace date : // History : // Laungage : HI_TECH PICC C Laungage Version 9.83 //****************************************************************************************** // Description // OSC : Internal OSC 1MHz // 平均律音階 // 中心の“ラ”の音の周波数が440Hz,その1オクターブ低い“ラ”の音が220Hz // 音階の周波数=220×2^(n/12) nは,1から12の整数 // 周波数   NCO値() 16進数 // ド :261.6256Hz (548.6686) 0225 // レ :293.6648Hz (615.8597) 0268 // ミ :329.6276Hz (691.2791) 02B3 // ファ:349.2282Hz (732.3847) 02DC // ソ :392.9954Hz (882.0740) 0336 // ラ :440 Hz (922.7469) 039B // シ :493.8833Hz (1035.748) 040C // ド :523.2511Hz (1097.337) 0449 // //****************************************************************************************** #include __CONFIG( FOSC_INTOSC & BOREN_OFF & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & LVP_OFF & LPBOR_OFF & BORV_HI & WRT_OFF); void Init_NCO(void); void Init_CLC(void); void Set_NCO(unsigned char, unsigned char); void Wait01(unsigned int); void Timer(void); #define PI___H 0x00 #define PI___L 0x01 #define PI_DO_H 0x02 #define PI_DO_L 0x25 #define PI_RE_H 0x02 #define PI_RE_L 0x68 #define PI_MI_H 0x02 #define PI_MI_L 0xB3 #define PI_FA_H 0x02 #define PI_FA_L 0xDC #define PI_SO_H 0x03 #define PI_SO_L 0x36 #define PI_RA_H 0x03 #define PI_RA_L 0x9B #define PI_SI_H 0x04 #define PI_SI_L 0x0C #define PI_DO1_H 0x04 #define PI_DO1_L 0x49 void main() { // ******************************** // 1.Initialized Segment // ******************************** // (1)Define OSC (Internal OSC 1MHz) // OSCCON = 0b01110000; //OSC 16MHz OSCCON = 0b00110000; //OSC 1MHz // (2)Define CLKRCON (Clock output disable) CLKRCONbits.CLKROE = 0; // (3)Define ANSELA Register (All Degital port) ANSELA = 0b00000000; // (4)Define WPUA Register (All Pull-UP disable) WPUA = 0b00000000; // (5)Define I/O interrupt (All interrupt disable) IOCAP = 0b00000000; IOCAN = 0b00000000; IOCAF = 0b00000000; // (6)Define I/O PORT PORTA = 0b00000000; TRISA = 0b00111101; //CLC // TRISA = 0b00111011; //NCO LATA = 0b00000000; // (7)Initialized NCO Module Init_NCO(); // (9)Initialized CLC Module Init_CLC(); // ******************************** // 2.Program main // ******************************** while(1){ // ドレミファソラシド Set_NCO(PI_DO_H, PI_DO_L); Set_NCO(PI_RE_H, PI_RE_L); Set_NCO(PI_MI_H, PI_MI_L); Set_NCO(PI_FA_H, PI_FA_L); Set_NCO(PI_SO_H, PI_SO_L); Set_NCO(PI_RA_H, PI_RA_L); Set_NCO(PI_SI_H, PI_SI_L); Set_NCO(PI_DO1_H, PI_DO1_L); Set_NCO(PI___H, PI___L); Set_NCO(PI___H, PI___L); // ドシラソファミレド Set_NCO(PI_DO1_H, PI_DO1_L); Set_NCO(PI_SI_H, PI_SI_L); Set_NCO(PI_RA_H, PI_RA_L); Set_NCO(PI_SO_H, PI_SO_L); Set_NCO(PI_FA_H, PI_FA_L); Set_NCO(PI_MI_H, PI_MI_L); Set_NCO(PI_RE_H, PI_RE_L); Set_NCO(PI_DO_H, PI_DO_L); Set_NCO(PI___H, PI___L); Set_NCO(PI___H, PI___L); } } //******************************************************************************************* // Function Name : Init_NCO     // Function : Initialize NCO Module // Input : // Output : // Description : //******************************************************************************************* void Init_NCO(void) { // ********************************** // 1.NCOxCON: NCOx 制御レジスタの定義 // NCOxCON[7] NxEN: NCOx イネーブルビット // 1 = NCOx モジュールを有効にする // 0 = NCOx モジュールを無効にする // NCOxCON[6] NxOE: NCOx 出力イネーブルビット // 1 = NCOx 出力ピンを有効にする // 0 = NCOx 出力ピンを無効にする // NCOxCON[5] NxOUT: NCOx 出力ビット // 1 = NCOx 出力がHigh である // 0 = NCOx 出力がLow である // NCOxCON[4] NxPOL: NCOx 極性ビット // 1 = NCOx 出力信号をアクティブHigh にする // 0 = NCOx 出力信号をアクティブLow にする // NCOxCON[3-1] 未実装: 「0」として読み出し // NCOxCON[0] NxPFM: NCOx パルス周波数モードビット // 1 = NCOx をパルス周波数モードで動作させる // 0 = NCOx を固定デューティ サイクル モードで動作させる // ********************************** NCO1CON = 0b11000000; // ********************************** // 2.NCOxCLK: NCOx 入力クロック制御レジスタの定義 // NCOxCLK[7-5] NxPWS<2:0>: NCOx 出力パルス幅選択ビット(1, 2) // 111 = NCOx クロック128 周期 // 110 = NCOx クロック64 周期 // 101 = NCOx クロック32 周期 // 100 = NCOx クロック16 周期 // 011 = NCOx クロック8 周期 // 010 = NCOx クロック4 周期 // 001 = NCOx クロック2 周期 // 000 = NCOx クロック1 周期 // NCOxCLK[4-2] 未実装: 「0」として読み出し // NCOxCLK[1-0] NxCKS<1:0>: NCOx クロック源選択ビット // 11 = LC1OUT // 10 = HFINTOSC // 01 = Fosc // 00 = NCO1CLK // ********************************** NCO1CLK = 0b00000001; // ********************************** // 3.NCOxACCU: NCOx アキュムレータ レジスタ - 最上位バイトの定義 // NCOxACCU[3-0] NCOx アキュムレータ、最上位バイト NCOxACC<19:16> // NCOxACCH: NCOx アキュムレータ レジスタ - 上位バイトの定義 // NCOxACCH[7-0] NCOx アキュムレータ、上位バイト NCOxACC<15:8> // NCOxACCL: NCOx アキュムレータ レジスタ - 下位バイトの定義 // NCOxACCL[7-0] NCOx アキュムレータ、下位バイト NCOxACC<7:0> // ********************************** NCO1ACCU = 0x00; NCO1ACCH = 0x00; NCO1ACCL = 0x00; // ********************************** // 4.NCOxINCH: NCOx インクリメント レジスタ - 上位バイトの定義 // NCOxINCH[7-0] NCOxINC<15:8>: NCOx インクリメント レジスタ - 上位バイト // NCOxINCL: NCOx インクリメント レジスタ - 下位バイトの定義 // NCOxINCL[7-0] NCOxINC<7:0>: NCOx インクリメント レジスタ - 下位バイト // 注)NCOxINCレジスタは、NCOxINCH=>NCOxINCLの順に設定する必要がある!!! // ********************************** // F(Hz)=16MHz*(NCO1INCL)/(2^21) ==> F(Hz)=(NCO1INCL)*7.629394531 ==> NCO1INCL=F(Hz)/7.629394531 // F(Hz)=1MHz *(NCO1INCL)/(2^21) ==> F(Hz)=(NCO1INCL)*0.4768371582 ==> NCO1INCL=F(Hz)/0.4768371582 // F(Hz):50Hz 50Hz /7.629394531=>0d6.5536 =>0x0006 // F(Hz):100Hz 100Hz /7.629394531=>0d13.1072=>0x000D // F(Hz):1KHz 1KHz /7.629394531=>0d131.072=>0x0083 // F(Hz):10KHz 10KHz /7.629394531=>0d1310.72=>0x051F // F(Hz):100KHz 100KHz/7.629394531=>0d13107.2=>0x3333 // F(Hz):500KHz 500KHz/7.629394531=>0d65536 =>0x10000 // F(Hz):1KHz 1KHz /0.4768371582=>0d2097 =>0x0831 // F(Hz):20Hz 20Hz /0.4768371582=>0d2097 =>0x0831 // NCO1INCH = 0x08; // NCO1INCL = 0x31; } //******************************************************************************************* // Function Name : Set_NCO     // Function : // Input : // Output : // Description : //******************************************************************************************* void Set_NCO(unsigned char NCO_H, unsigned char NCO_L) { NCO1INCH = NCO_H; NCO1INCL = NCO_L; Wait01((unsigned int)2); NCO1INCH = 0; NCO1INCL = 1; Wait01((unsigned int)3); } //******************************************************************************************* // Function Name : Init_CLC     // Function : Initialize CLC Module // Input : // Output : // Description : //******************************************************************************************* void Init_CLC(void) { // ********************************** // 1.CLCxGLS0: ゲート1 ロジック選択レジスタ // CLCxGLS0[7] LCxG1D4T: ゲート1 データ4 True ( 非反転) ビット // 1 = lcxd4T をlcxg1 にゲーティングする // 0 = lcxd4T をlcxg1 にゲーティングしない // CLCxGLS0[6] LCxG1D4N: ゲート1 データ4 Negated ( 反転) ビット // 1 = lcxd4N をlcxg1 にゲーティングする // 0 = lcxd4N をlcxg1 にゲーティングしない // CLCxGLS0[5] LCxG1D3T: ゲート1 データ3 True ( 非反転) ビット // 1 = lcxd3T をlcxg1 にゲーティングする // 0 = lcxd3T をlcxg1 にゲーティングしない // CLCxGLS0[4] LCxG1D3N: ゲート1 データ3 Negated ( 反転) ビット // 1 = lcxd3N をlcxg1 にゲーティングする // 0 = lcxd3N をlcxg1 にゲーティングしない // CLCxGLS0[3] LCxG1D2T: ゲート1 データ2 True ( 非反転) ビット // 1 = lcxd2T をlcxg1 にゲーティングする // 0 = lcxd2T をlcxg1 にゲーティングしない // CLCxGLS0[2] LCxG1D2N: ゲート1 データ2 Negated ( 反転) ビット // 1 = lcxd2N をlcxg1 にゲーティングする // 0 = lcxd2N をlcxg1 にゲーティングしない // CLCxGLS0[1] LCxG1D1T: ゲート1 データ1 True ( 非反転) ビット // 1 = lcxd1T をlcxg1 にゲーティングする // 0 = lcxd1T をlcxg1 にゲーティングしない // CLCxGLS0[0] LCxG1D1N: ゲート1 データ1 Negated ( 反転) ビット // 1 = lcxd1N をlcxg1 にゲーティングする // 0 = lcxd1N をlcxg1 にゲーティングしない // ********************************** // CLC1GLS0 = 0b00001010; CLC1GLS0 = 0b00000110; // CLC1GLS0 = 0b00010110; // CLC1GLS0 = 0b00000010; // ********************************** // 2.CLCxGLS1: ゲート2 ロジック選択レジスタ // CLCxGLS1[7] LCxG2D4T: ゲート2 データ4 True ( 非反転) ビット // 1 = lcxd4T をlcxg2 にゲーティングする // 0 = lcxd4T をlcxg2 にゲーティングしない // CLCxGLS1[6] LCxG2D4N: ゲート2 データ4 Negated ( 反転) ビット // 1 = lcxd4N をlcxg2 にゲーティングする // 0 = lcxd4N をlcxg2 にゲーティングしない // CLCxGLS1[5] LCxG2D3T: ゲート2 データ3 True ( 非反転) ビット // 1 = lcxd3T をlcxg2 にゲーティングする // 0 = lcxd3T をlcxg2 にゲーティングしない // CLCxGLS1[4] LCxG2D3N: ゲート2 データ3 Negated ( 反転) ビット // 1 = lcxd3N をlcxg2 にゲーティングする // 0 = lcxd3N をlcxg2 にゲーティングしない // CLCxGLS1[3] LCxG2D2T: ゲート2 データ2 True ( 非反転) ビット // 1 = lcxd2T をlcxg2 にゲーティングする // 0 = lcxd2T をlcxg2 にゲーティングしない // CLCxGLS1[2] LCxG2D2N: ゲート2 データ2 Negated ( 反転) ビット // 1 = lcxd2N をlcxg2 にゲーティングする // 0 = lcxd2N をlcxg2 にゲーティングしない // CLCxGLS1[1] LCxG2D1T: ゲート2 データ1 True ( 非反転) ビット // 1 = lcxd1T をlcxg2 にゲーティングする // 0 = lcxd1T をlcxg2 にゲーティングしない // CLCxGLS1[0] LCxG2D1N: ゲート2 データ1 Negated ( 反転) ビット // 1 = lcxd1N をlcxg2 にゲーティングする // 0 = lcxd1N をlcxg2 にゲーティングしない // ********************************** CLC1GLS1 = 0b00000000; // ********************************** // 3.CLCxGLS2: ゲート3 ロジック選択レジスタ // CLCxGLS2[7] LCxG3D4T: ゲート3 データ4 True ( 非反転) ビット // 1 = lcxd4T をlcxg3 にゲーティングする // 0 = lcxd4T をlcxg3 にゲーティングしない // CLCxGLS2[6] LCxG3D4N: ゲート3 データ4 Negated ( 反転) ビット // 1 = lcxd4N をlcxg3 にゲーティングする // 0 = lcxd4N をlcxg3 にゲーティングしない // CLCxGLS2[5] LCxG3D3T: ゲート3 データ3 True ( 非反転) ビット // 1 = lcxd3T をlcxg3 にゲーティングする // 0 = lcxd3T をlcxg3 にゲーティングしない // CLCxGLS2[4] LCxG3D3N: ゲート3 データ3 Negated ( 反転) ビット // 1 = lcxd3N をlcxg3 にゲーティングする // 0 = lcxd3N をlcxg3 にゲーティングしない // CLCxGLS2[3] LCxG3D2T: ゲート3 データ2 True ( 非反転) ビット // 1 = lcxd2T をlcxg3 にゲーティングする // 0 = lcxd2T をlcxg3 にゲーティングしない // CLCxGLS2[2] LCxG3D2N: ゲート3 データ2 Negated ( 反転) ビット // 1 = lcxd2N をlcxg3 にゲーティングする // 0 = lcxd2N をlcxg3 にゲーティングしない // CLCxGLS2[1] LCxG3D1T: ゲート3 データ1 True ( 非反転) ビット // 1 = lcxd1T をlcxg3 にゲーティングする // 0 = lcxd1T をlcxg3 にゲーティングしない // CLCxGLS2[0] LCxG3D1N: ゲート3 データ1 Negated ( 反転) ビット // 1 = lcxd1N をlcxg3 にゲーティングする // 0 = lcxd1N をlcxg3 にゲーティングしない // ********************************** CLC1GLS2 = 0b00000000; // ********************************** // 4.CLCxGLS3: ゲート4 ロジック選択レジスタ // CLCxGLS3[7] LCxG4D4T: ゲート4 データ4 True ( 非反転) ビット // 1 = lcxd4T をlcxg4 にゲーティングする // 0 = lcxd4T をlcxg4 にゲーティングしない // CLCxGLS3[6] LCxG4D4N: ゲート4 データ4 Negated ( 反転) ビット // 1 = lcxd4N をlcxg4 にゲーティングする // 0 = lcxd4N をlcxg4 にゲーティングしない // CLCxGLS3[5] LCxG4D3T: ゲート4 データ3 True ( 非反転) ビット // 1 = lcxd3T をlcxg4 にゲーティングする // 0 = lcxd3T をlcxg4 にゲーティングしない // CLCxGLS3[4] LCxG4D3N: ゲート4 データ3 Negated ( 反転) ビット // 1 = lcxd3N をlcxg4 にゲーティングする // 0 = lcxd3N をlcxg4 にゲーティングしない // CLCxGLS3[3] LCxG4D2T: ゲート4 データ2 True ( 非反転) ビット // 1 = lcxd2T をlcxg4 にゲーティングする // 0 = lcxd2T をlcxg4 にゲーティングしない // CLCxGLS3[2] LCxG4D2N: ゲート4 データ2 Negated ( 反転) ビット // 1 = lcxd2N をlcxg4 にゲーティングする // 0 = lcxd2N をlcxg4 にゲーティングしない // CLCxGLS3[1] LCxG4D1T: ゲート4 データ1 True ( 非反転) ビット // 1 = lcxd1T をlcxg4 にゲーティングする // 0 = lcxd1T をlcxg4 にゲーティングしない // CLCxGLS3[0] LCxG4D1N: ゲート4 データ1 Negated ( 反転) ビット // 1 = lcxd1N をlcxg4 にゲーティングする // 0 = lcxd1N をlcxg4 にゲーティングしない // ********************************** CLC1GLS3 = 0b00000000; // ********************************** // 5.CLCxSEL0: マルチプレクサ データ1/2 選択レジスタ // CLCxSEL0[7] 未実装: 「0」として読み出し // CLCxSEL0[6-4] LCxD2S<2:0>: 入力データ2 選択制御ビット(1) // 111 = lcxd2 にCLCxIN[7] を選択する // 110 = lcxd2 にCLCxIN[6] を選択する // 101 = lcxd2 にCLCxIN[5] を選択する // 100 = lcxd2 にCLCxIN[4] を選択する // 011 = lcxd2 にCLCxIN[3] を選択する // 010 = lcxd2 にCLCxIN[2] を選択する // 001 = lcxd2 にCLCxIN[1] を選択する // 000 = lcxd2 にCLCxIN[0] を選択する // CLCxSEL0[3] 未実装: 「0」として読み出し // CLCxSEL0[2-0] LCxD1S<2:0>: 入力データ1 選択制御ビット(1) // 111 = lcxd1 にCLCxIN[7] を選択する // 110 = lcxd1 にCLCxIN[6] を選択する // 101 = lcxd1 にCLCxIN[5] を選択する // 100 = lcxd1 にCLCxIN[4] を選択する // 011 = lcxd1 にCLCxIN[3] を選択する // 010 = lcxd1 にCLCxIN[2] を選択する // 001 = lcxd1 にCLCxIN[1] を選択する // 000 = lcxd1 にCLCxIN[0] を選択する // ********************************** // CLC INPUT // CLCxIN[0] 000 CLCx // CLCxIN[1] 001 CLCxIN1 // CLCxIN[2] 010 CLCxIN2 // CLCxIN[3] 011 PWM1 // CLCxIN[4] 100 PWM2 // CLCxIN[5] 101 NCOx // CLCxIN[6] 110 FOSC // CLCxIN[7] 111 LFINTOSC // ********************************** // CLC1SEL0=0b00100001; //Input CLCxIN2 and CLCxIN1 // CLC1SEL0=0b01100101; //Input FOSC and NCOx // CLC1SEL0=0b00010101; //Input CLCxIN1 and NCOx // CLC1SEL0=0b00110101; //Input PWM1 and NCOx // CLC1SEL0=0b00000110; //Input FOSC CLC1SEL0=0b01100101; //Input FOSC and NCOx // ********************************** // 6.CLCxSEL1: マルチプレクサ データ3/4 選択レジスタ // CLCxSEL1[7] 未実装: 「0」として読み出し // CLCxSEL1[6-4] LCxD4S<2:0>: 入力データ4 選択制御ビット(1) // 111 = lcxd4 にCLCxIN[7] を選択する // 110 = lcxd4 にCLCxIN[6] を選択する // 101 = lcxd4 にCLCxIN[5] を選択する // 100 = lcxd4 にCLCxIN[4] を選択する // 011 = lcxd4 にCLCxIN[3] を選択する // 010 = lcxd4 にCLCxIN[2] を選択する // 001 = lcxd4 にCLCxIN[1] を選択する // 000 = lcxd4 にCLCxIN[0] を選択する // CLCxSEL1[3] 未実装: 「0」として読み出し // CLCxSEL1[2-0] LCxD3S<2:0>: 入力データ3 選択制御ビット(1) // 111 = lcxd3 にCLCxIN[7] を選択する // 110 = lcxd3 にCLCxIN[6] を選択する // 101 = lcxd3 にCLCxIN[5] を選択する // 100 = lcxd3 にCLCxIN[4] を選択する // 011 = lcxd3 にCLCxIN[3] を選択する // 010 = lcxd3 にCLCxIN[2] を選択する // 001 = lcxd3 にCLCxIN[1] を選択する // 000 = lcxd3 にCLCxIN[0] を選択する // ********************************** CLC1SEL1 =0b00000000; // CLC1SEL1 =0b00000001; //CLCxIN1 // ********************************** // 7.CLCxPOL: 信号極性制御レジスタ // CLCxPOL[7] LCxPOL: LCOUT 極性制御ビット // 1 = ロジックセルの出力を反転する // 0 = ロジックセルの出力を反転しない // CLCxPOL[6-4] 未実装: 「0」として読み出し // CLCxPOL[3] LCxG4POL: ゲート4 出力極性制御ビット // 1 = ロジックセルへの入力時にゲート4 の出力を反転する // 0 = ゲート4 の出力を反転しない // CLCxPOL[2] LCxG3POL: ゲート3 出力極性制御ビット // 1 = ロジックセルへの入力時にゲート3 の出力を反転する // 0 = ゲート3 の出力を反転しない // CLCxPOL[1] LCxG2POL: ゲート2 出力極性制御ビット // 1 = ロジックセルへの入力時にゲート2 の出力を反転する // 0 = ゲート2 の出力を反転しない // CLCxPOL[0] LCxG1POL: ゲート1 出力極性制御ビット // 1 = ロジックセルへの入力時にゲート1 の出力を反転する // 0 = ゲート1 の出力を反転しない // ********************************** // CLC1POL = 0b00000000; // CLC1POL = 0b00000001; CLC1POL = 0b10000000; // ********************************** // 8.CLCxCON: 構成可能なロジックセル制御レジスタ // CLCxCON[7] LCxEN: 構成可能なロジックセル イネーブルビット // 1 = 構成可能なロジックセルを有効にして入力信号を組み合わせる // 0 = 構成可能なロジックセルを無効にしてロジック0 を出力する // CLCxCON[6] LCxOE: 構成可能なロジックセル出力イネーブルビット // 1 = 構成可能なロジックセルのポートピン出力を有効にする // 0 = 構成可能なロジックセルのポートピン出力を無効にする // CLCxCON[5] LCxOUT: 構成可能なロジックセル データ出力ビット // 読み出し専用: LCxPOL による操作後のロジックセル出力データ(lcx_out 配線よりサンプリング) // CLCxCON[4] LCxINTP: 構成可能なロジックセル立ち上がりエッジ割り込みイネーブルビット // 1 = lcx_out に立ち上がりエッジが発生した場合にCLCxIF をセットする // 0 = CLCxIF をセットしない // CLCxCON[3] LCxINTN: 構成可能なロジックセル立ち下がりエッジ割り込みイネーブルビット // 1 = lcx_out に立ち下がりエッジが発生した場合にCLCxIF をセットする // 0 = CLCxIF をセットしない // CLCxCON[2-0] LCxMODE<2:0>: 構成可能なロジックセル機能モードビット // 111 = セルを1 入力のセット/ リセット付き透過ラッチに設定する // 110 = セルをリセット付きJ-K フリップフロップに設定する // 101 = セルをリセット付き2 入力D フリップフロップに設定する // 100 = セルをセット/ リセット付き1 入力D フリップフロップに設定する // 011 = セルをセット/ リセットラッチに設定する // 010 = セルを4 入力AND に設定する // 001 = セルをOR-XOR に設定する // 000 = セルをAND-OR に設定する // ********************************** CLC1CON = 0b00000001; //OR // ********************************** // 9.CLCをイネーブルにする // ********************************** CLC1CONbits.LC1OE = 1; CLC1CONbits.LC1EN = 1; } //****************************************************************************************** // Function Name : Wait01 // Title : Wait 0.1[s] // Input : // Output : //****************************************************************************************** void Wait01(unsigned int n) { unsigned int lp; for(lp=0;lp: プリスケーラ比選択ビット // 000 1 : 2 // 001 1 : 4 // 010 1 : 8 // 011 1 : 16 // 100 1 : 32 // 101 1 : 64 // 110 1 : 128 // 111 1 : 256 OPTION_REG = 0b00000111; // ******************************************************* // 2.TIMER0:モジュール // ******************************************************* // TMR1 data ( OSC:1MHz, 1:256 Prescale value, 0.1[S];10Hz ) // 10mS(100Hz): 1MHz / 4(PIC) / 256(Prescale) / 10(10Hz)==> 0d98(Count) // TMR1 = 0d255(0xFF) - 0d98 ==> 0d157 // TMR0 = 157; // ******************************************************* // 3.INTCON: 割り込み制御レジスタ // ******************************************************* // INTCON[7] GIE: グローバル割り込みイネーブルビット // 1 = 全てのアクティブな割り込みを有効にする // 0 = 全ての割り込みを無効にする // INTCON[6] PEIE: 周辺機能割り込みイネーブルビット // 1 = 全てのアクティブな周辺機能割り込みを有効にする // 0 = 全ての周辺機能割り込みを無効にする // INTCON[5] TMR0IE: Timer0 オーバーフロー割り込みイネーブルビット // 1 = Timer0 割り込みを有効にする // 0 = Timer0 割り込みを無効にする // INTCON[4] INTE: INT 外部割り込みイネーブルビット // 1 = INT 外部割り込みを有効にする // 0 = INT 外部割り込みを無効にする // INTCON[3] IOCIE: 状態変化割り込みイネーブルビット // 1 = 状態変化割り込みを有効にする // 0 = 状態変化割り込みを無効にする // INTCON[2] TMR0IF: Timer0 オーバーフロー割り込みフラグビット // 1 = TMR0 レジスタがオーバーフローした // 0 = TMR0 レジスタはオーバーフローしていない // INTCON[1] INTF: INT 外部割り込みフラグビット // 1 = INT 外部割り込みが発生した // 0 = INT 外部割り込みは発生していない // INTCON[0] IOCIF: 状態変化割り込みフラグビット(1) // 1 = 状態変化割り込みピンの少なくとも1 つの状態が変化した // 0 = 状態変化割り込みピンの状態は変化していない INTCONbits.TMR0IF = 0; while(1){ if(INTCONbits.TMR0IF != 0 )break; } }