Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

MPLABX XC8 PIC16F84 例題3

$
0
0
 MPLABX XC8 PIC16F84を使った例題3です。

 今回は、TMR0のオーバーフロー割り込みを利用してRB3に接続したLEDを0.5秒ごとに点滅させます。

 回路図です。

イメージ 1

 ブレッドボードは省略

 プログラムです。「PICで遊ぶ電子工作」というサイトからのコピペです。参考にしたのは、こちらのページ。ありがとうございました。
 クロックが10MHzなので、それに合わせてプリスケーラの値を変更しました。


#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define XTAL_FREQ 10000000

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

unsigned char T500mS; // 500mS経過フラグ
unsigned char cnt500mS; // 500mSカウンタ

void main() {
 TRISB = 0b11110111; // RB3:output
    /* クロックが10MHzなので、命令サイクル=1/10MHz*4=0.4us
     * プリスケーラを1:32とするとTMRのオーバーフローは、
     * 0.4*32*256=3276.8us=3.2768ms
     */
 OPTION_REG = 0x84; // TMR0のクロックソースは、命令サイクルクロック、プリスケーラ1:32
 TMR0 = 0x00;        //TMR0クリア
 INTCONbits.T0IE = 1;// TMR0割り込み許可
 INTCONbits.GIE = 1; // 全体割り込み許可
 PORTB = 0x00;
 cnt500mS = 153; // 3.2768mS*153=501mS
 T500mS = 0;     // 500mS経過フラッグクリア
 while(1) {
  if  (T500mS) {
   T500mS = 0;
   PORTB ^= 0x08; // RB3のLEDを点滅
  }
 }

//割り込みサービスルーチン 
}
void interrupt isr(void){
    INTCONbits.T0IF = 0; // TMR0割り込みクリア
 cnt500mS--;             //counter ディクリメント
 if (cnt500mS == 0) {
  cnt500mS = 153; // 3.2768mS*153=501mS
  T500mS = 1;  // 500mSフラグセット
 }
}

今回のトラブルシューティング

 今回のプログラムをコンパイル(build)しようとすると割り込みサービスルーチン

 void interrupt isr(void){
}

 で、エラーが発生して、buildできません。

 Webサイトを検索したり、福島マイコン愛好会のメーリングリスト(FMCA ML)で問い合わせても、原因が良く分かりませんでした。

 2,3日MLでやりとりしていると、メンバーの一人から、「buildできたよ」という報告がありました。環境は、MPLAB X IDE v3.61XC8 V1.42とのこと。

 エラー発生時の私の環境は、MPLABX v5.05とXC8 v2.0でした。

 ひょっとしてと思い、XC8のバージョンをv1.45に下げて、buildを試みました。

 なんと、エラーも出ず、すんなりbuildできました。めでたしめでたし。

 XC8 v2.0の不具合と思われます。こんなことってあるんですね。何でも新しけりゃ良いってものではないようです。

Viewing all articles
Browse latest Browse all 440

Trending Articles