• 追加された行はこの色です。
  • 削除された行はこの色です。
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)~
 *インターバルタイマ(TMR0割込み利用 16F1827 XC8) [#n60ed82d]
 
 「割り込み」機能の使い方を確認する目的で、Timer0割り込み機能でLEDを
 1秒間隔で点滅させるプログラムを作成した。
 
 【ポイント】
 1.TMR0にカウントさせたい回数の設定法(0回〜256回)
 例:252回カウントしたい場合は TMR0 = -252;(マイナスを付ける)と記述する。
 理由:TMR0は「アップカウンタ」の為、252回カウントさせたい時は
 256(FF)-252=4で、TMR0 = 4;と設定する事になる。
 しかしTMR0 = -252;と記述しても同意である為、視認性の良い
 TMR0 = -252;と記述する事とする。
 2.プリスケーラーは最大の256に設定した
 Timer0は、他のタイマーと異なりプリスケーラーに大きな値が設定でき、
 制御時間範囲を大きく出来るのが特徴である。
 今回はプリスケーラーの設定最大値256に設定し、1秒タイマーを設計してみた。 2014/1/3
 
 |&attachref(1827led点灯画像.jpg,zoom,200x300,button){新しい写真添付};|&attachref(16F1827ピン配置.JPG,zoom,200x250,button){新しい写真添付};|
 
  /* 割り込み機能、Timer0の操作法の確認
   * インターバルタイマ(TMR0割込み利用) 発光ダイオード(LED)を1秒間隔で点滅
   * PIC16F1827
   * XC8 v1.20
   * LED:RA1,RA2
   */
  #include <xc.h>
  
  #pragma config FOSC = INTOSC, WDTE = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
  #pragma config PLLEN = OFF, STVREN = OFF, LVP = OFF
  
  //グローバル変数の定義
  unsigned char cnt; //1秒作成の31回カウンタ
  
  int main(void) {
      //PICの初期設定
      PORTA = 0b00000000; //PORTAの中身をきれいにする
      TRISA = 0b00000000; //PORTA全てを0:出力に設定
      OSCCON = 0b01110000; //PLL:OFF, 内部クロック8MHzで駆動
      ANSELA = 0b00000000; //AN0-AN4は全て0:デジタルI/Oとする
  
      //TMR0割り込みの初期設定
      //32.256ms=0.125us(8MHz)*4*プリスケーラー256*252カウント
      OPTION_REG = 0b0111; //プリスケーラ値設定0b0111(=256回)
      TMR0 = -252; //TMR0カウント値設定 252回(アップカウンタ)
      INTCONbits.TMR0IE =1; //タイマ割込み許可
      INTCONbits.GIE = 1; //全体割込み許可
  
      //メイン処理
      LATAbits.LATA2 = 1; //RA2:パワーオンを示すLED点灯
      cnt = 0; //31回カウンタ値クリア
      while(1) {
          //点滅間隔1秒(999.936msec = 32.256msec * 31回)
          if (cnt == 31) {
              LATAbits.LATA1 = ~LATAbits.LATA1; //LED(RA1)点灯⇔消灯反転
              cnt = 0; //31回カウンタ値クリア
          }
      }
  }
  
  static void interrupt isr(void) { //割り込み関数
      if(INTCONbits.TMR0IF == 1) {  //割込み種がTimer0割込みの場合
          INTCONbits.TMR0IF = 0; //Timer0割り込みフラグクリアー
          TMR0 = -252; //TMR0カウント値設定 252回(アップカウンタ)
  
          cnt++; //31回カウンタ カウントアップ
      }
  }
  
 ★この情報は役に立ちましたか?
 #vote(はい[18],普通[0],いいえ[0])
 #vote(はい[18],普通[0],いいえ[2])
 
 #comment_nospam