閲覧総計:&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