閲覧総計:&counter(); (本日:&counter(today); 昨日:&counter(yesterday);)~ ~ *インターバルタイマ(TMR0割込み利用) [#fcc8bd9b] タイマー0割込みを利用して「インターバルタイマ」を作ります。06/11/03 ↓タイマー0割込みの使い方説明ページ http://picfun.com/ic09.html 発光ダイオード(LED)を1秒点灯、1秒消灯 |プリスケーラ値|OPTION_REG設定値| | 2回|0x80| | 4回|0x81| | 8回|0x82| | 16回|0x83| | 32回|0x84| | 64回|0x85| |128回|0x86| |256回|0x87| | 1回|0x88| 【16F628Aの場合】 |&attachref(,zoom,150x150,button){新しい写真添付};|&attachref(,zoom,150x150,button){新しい写真添付};| /** * インターバルタイマ(TMR0割込み利用) * 発光ダイオード(LED)を1秒点灯、1秒消灯 * * PIC 16F628A * 発信器:内臓4MHz * 電源:乾電池3本 (4.5V) * RB1: LED * * Device Flags: _BODEN_OFF _BOREN_OFF _CP_OFF _PWRTE_ON _WDT_OFF * _LVP_OFF _MCLRE_OFF _INTRC_OSC_NOCLKOUT * * 言語 MikroC v6.2 * *【1秒インターバルの作り方】 * TMR0割込みで5.12msec * 4MHz=0.25usec * 5.12msec (=0.25usec*4*32回*160回) * 約1秒 =1024msec (=5.12msec*200回) */ unsigned cnt; //変数定義:200回カウンタ void interrupt() { //割込み関数 //5msecインターバルタイマ INTCON.T0IF = 0; //割込みフラグクリア TMR0 = -160; //TMR0カウント値再設定 160回(アップカウンタ) cnt++; //200回カウンタ カウントアップ } void main() { PORTB = 0b00000000; //PORTBの中身をきれいにする TRISB = 0b00000000; //PORTB 8個全て0:出力に設定 OPTION_REG = 0x84; //プリスケーラ値設定0x84(=32回) TMR0 = -160; //TMR0カウント値設定 160回(アップカウンタ) INTCON.T0IE = 1; //タイマ割込み許可 INTCON.GIE = 1; //全体割込み許可 cnt = 0; //200回カウンタ値クリア do { //doとwhileの間を繰り返す //点滅間隔1秒(=5msec * 200回) if (cnt == 200) { PORTB.F1 = ~PORTB.F1; //LED点灯⇔消灯反転 cnt = 0; //200回カウンタ値クリア } } while(1); //doとwhileの間を繰り返す } #comment