閲覧総計:20015 (本日:1 昨日:1)
【目次】(項目をクリックすると、そこへ飛べます)
割り込み機能とTimer0の操作法の確認の為、基本機能だけのプログラムを作成し、稼働を
確認した。
また、HI-TECH C PRO(Lite mode)の割り込み機能のプログラミングの仕方を確認する為
プログラムを作成し、動作を確認した。 08/08/15
/** * 割り込み機能、Timer0の操作法の確認 * インターバルタイマ(TMR0割込み利用) 発光ダイオード(LED)を1秒間隔で点滅 * * RC2: LED * PIC16F668 内臓発振器4MHz * * Device Flags: * _INTRC_OSC_NOCLKOUT _WDT_OFF _PWRTE_ON _MCLRE_OFF * _CP_OFF _CPD_OFF _BOR_OFF _IESO_ON _FCMEN_ON * _LVP_OFF _DEBUG_ON _BOR21V _WRT_OFF * * MikroC v8.1.0 * file name:timer0.c 08/08/15 */ //グローバル変数の定義 unsigned int cnt; //200回カウンタ void main(void) { //PICの初期化 TRISC = 0b00000000; //PORTC 8個全て0:出力に設定 OSCCON = 0b01100000; //内蔵発振器 4MHz使用に設定 // A/D利用PORTの設定 // ANALOG=1, DIGITAL=0 // ANSEL = 0b00000000; //AN4-0ピンはデジタルで使用 ANSELH = 0b00000000; //AN13-8ピンはデジタルで使用 PORTC = 0b00000000; //PORTCの中身をきれいにする //PICの初期化終わり OPTION_REG = 0b0100; //プリスケーラ値設定0b0100(=32回) TMR0 = -160; //TMR0カウント値設定 160回(アップカウンタ) INTCON.T0IE = 1; //タイマ割込み許可 INTCON.GIE = 1; //全体割込み許可 cnt = 0; //200回カウンタ値クリア while (1) { //点滅間隔1秒(=5msec * 200回) if (cnt == 200) { PORTC.F2 = ~PORTC.F2; //LED(RC2)点灯⇔消灯反転 cnt = 0; //200回カウンタ値クリア } } } void interrupt() //割込み関数 { //5msecインターバルタイマ if (INTCON.T0IF) //割込み種がTimer0割込みの場合 { INTCON.T0IF = 0; //割込みフラグクリア TMR0 = -160; //TMR0カウント値再設定 160回(アップカウンタ) cnt++; //200回カウンタ カウントアップ } }
★この情報は役に立ちましたか?
/** * 割り込み機能、Timer0の操作法の確認 * インターバルタイマ(TMR0割込み利用) 発光ダイオード(LED)を1秒間隔で点滅 * * RC2: LED * PIC16F668 内臓発振器4MHz * * HI-TECH C PRO PIC10/12/16 MCU Family(Lite mode) v9.60 * MPLAB v8.14 * file name:timer0.c 08/08/10 */ #include <htc.h> __CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS & DEBUGEN); __CONFIG(BORV21); //グローバル変数の定義 unsigned int cnt; //200回カウンタ void main(void) { //PICの初期化 TRISC = 0b00000000; //PORTC 8個全て0:出力に設定 OSCCON = 0b01100000; //内蔵発振器 4MHz使用に設定 // A/D利用PORTの設定 // ANALOG=1, DIGITAL=0 // ANSEL = 0b00000000; //AN4-0ピンはデジタルで使用 ANSELH = 0b00000000; //AN13-8ピンはデジタルで使用 PORTC = 0b00000000; //PORTCの中身をきれいにする //PICの初期化終わり OPTION = 0b0100; //プリスケーラ値設定0b0100(=32回) TMR0 = -160; //TMR0カウント値設定 160回(アップカウンタ) T0IE = 1; //タイマ割込み許可 GIE = 1; //全体割込み許可 cnt = 0; //200回カウンタ値クリア while (1) { //点滅間隔1秒(=5msec * 200回) if (cnt == 200) { PORTC = (~PORTC & 0b00000100); //LED(RC2)点灯⇔消灯反転 cnt = 0; //200回カウンタ値クリア } } } void interrupt timer0_isr(void) //割込み関数 { //5msecインターバルタイマ if (T0IF) //割込み種がTimer0割込みの場合 { T0IF = 0; //割込みフラグクリア TMR0 = -160; //TMR0カウント値再設定 160回(アップカウンタ) cnt++; //200回カウンタ カウントアップ } }
★この情報は役に立ちましたか?