• 追加された行はこの色です。
  • 削除された行はこの色です。
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)~
 ~
 *インターバルタイマ(TMR0割込み利用) [#fcc8bd9b]
 
 タイマー0割込みを利用して「インターバルタイマ」を作ります。06/11/03
 
 ↓タイマー0割込みの使い方説明ページ
 http://picfun.com/pic09.html
 
 発光ダイオード(LED)を1秒点灯、1秒消灯
 例題:発光ダイオード(LED)を1秒点灯、1秒消灯
 
 【備忘メモ1】TMT0にカウントさせたい回数の設定法(0回〜256回)
 例:160回カウントしたい場合は TMR0 = -160;(マイナスを付ける) 
 理由:TMR0は「アップカウンタ」の為、160回カウントさせたい為には
 256(FF)-160=96で、TMR0 = 96;と設定する。
 しかしTMR0 = -160;と設定しても同意である為、視覚性の見地から
 TMR0 = -160;と書く事とする。
 
 【備忘メモ2】TMR0のプリスケーラ繰返し回数とOPTION_REG設定値の対照表を示しておきます。
 |プリスケーラ値|OPTION_REG設定値|
 |  2回|0x80|
 |  4回|0x81|
 |  8回|0x82|
 | 16回|0x83|
 | 32回|0x84|
 | 64回|0x85|
 |128回|0x86|
 |256回|0x87|
 |  1回|0x88|
 |    2回|   0x80|
 |    4回|   0x81|
 |    8回|   0x82|
 |   16回|   0x83|
 |   32回|   0x84|
 |   64回|   0x85|
 |  128回|   0x86|
 |  256回|   0x87|
 |    1回|   0x88|
 06/11/03
 
 |&attachref(P1010193.JPG,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
  * TMR0割込みで5.12msec、それを200回繰返し1秒にする
  * 4MHz=0.25usec
  * 5.12msec (=0.25usec * 4 * 32回 * 160回)
  * 約1秒 =1024msec (=5.12msec * 200回)
  */
  unsigned int 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