• 追加された行はこの色です。
  • 削除された行はこの色です。
 閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)
 
 【目次】(項目をクリックすると、そこへ飛べます)
 #contents
 ~
 *インターバルタイマ(TMR0割込み利用) [#b9631c91]
 
 割り込み機能、Timer0の操作法の確認の為、基本機能だけのプログラムを作成し、稼働を
 確認した。
 また、HI-TECH C PRO(Lite mode)の割り込み機能のプログラミングの仕方を確認する為
 プログラムを作成し、動作を確認した。  08/08/15
 
 |&attachref(,zoom,150x150,button){新しい写真添付};|&attachref(,zoom,150x150,button){新しい写真添付};|
 
 **MikroCのプログラム [#f619acec]
 
  /**
  * 割り込み機能、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回カウンタ カウントアップ
      }
  }
 
 ★この情報は役に立ちましたか?
 #vote(はい[0],普通[0],いいえ[0])
 
 **HI-TECH C PRO(Lite mode)のプログラム [#c985a1d7]
 
  /**
  * 割り込み機能、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回カウンタ カウントアップ
      }
  }
 
 ★この情報は役に立ちましたか?
 #vote(はい[0],普通[0],いいえ[0])