C言語でPIC18F、まずはLチカ (LED点滅)

C言語でPIC18F、まずはLチカ (LED点滅)

いまさらですが、いままでに使ったことがあるPICはPIC12FとPIC16Fだけでした。 これらのプログラムはいつもアセンブラで書いていました。  先日モノクロのグラフィックの液晶に表示させる際にもPIC16Fを使用しましたが、プログラムメモリ(Flash)が少ないと感じたので、今後のことを考えて、PIC18FをC言語で使ってみることにします。 PICはPIC18F26K22を秋月電子で購入。 値段は300円以下と安いし、Flashが64kbyteと割りと多め、シリアルも2chあるし、I/Oも25本、とりあえずいろいろ使えるんじゃないかなという感じです(実はあまり真剣には考えていません)。 C言語でPIC18Fを使うのは初めてなので、まずは1秒ON、1秒OFFのLチカ(LED点滅)を試し、うまく動きました。
C言語でPIC18F (PIC18F26K22)で Lチカ
環境はこんな感じで準備しました。
1. MPLAB X IDE をアップデート (v3.45 →v3.50、せっかくなので最新に)

2. MPLABR XC8 Compiler v1.40 (Cコンパイラ)をダウンロードしてインストール

以下、MPLAB X IDEで作業
3. MPLABで新規プロジェクト作成 (PIC18 C Templateを使う)

4. プロジェクトのデバイスを18F26K22に変更, PropertyのConf:は他のXC8_18FのをコピーしてXC8_18F26K22を追加(Conf:はそのままでもよかったのかも?)

以下、ファイル変更
5. configuration_bits.cのTODOのところに下記追加 (とりあえず最小限で)
#pragma config FOSC   = INTIO7  //Use internal ocsillator
#pragma config WDTEN  = OFF     //WDT off
#pragma config BOREN  = ON      //Enable brownout reset
#pragma config MCLRE  = INTMCLR //Use internal MCLR
#pragma config CPD    = OFF     //Flash not protected

6.system.hを下記の様に変更 (クロック 64MHz)
//#define SYS_FREQ        8000000L
#define SYS_FREQ        64000000L

7. system.cの void ConfigureOscillator(void) のTODOのところに、下記を追加 (内部発振16MHzを64MHzに逓倍)
OSCCONbits.IRCF     = 0b111;
OSCCONbits.SCS      = 0b00;
OSCTUNEbits.PLLEN   = 0b1;
OSCTUNEbits.INTSRC  = 0b00;

8. main.cのvoid main(void)の前に下記#defineを追加
#define _XTAL_FREQ  SYS_FREQ        //SYS_FREQ is defined in system.h
#define LAT_LED     LATAbits.LATA0

9.main.cのTODOのところに下記を追加 (LEDはRA0に680Ωと直列にして対GND接続)
TRISA   = 0b11111110;

while(1){
LAT_LED = 1;
__delay_ms(1000);
LAT_LED = 0;
__delay_ms(1000);
}

10. MPLAB X IDEでコンパイル(build)して、PICに書き込み起動

このPIC18FだとDebug Headerなしでデバッガが使える雰囲気です。 とりあえず、break pointは置けたので使えるかと思います。

全体 (電源は5V外部供給(万能基板に3端子レギュレータが載っています。) PICKIT3互換品使用
C言語でPIC18F (PIC18F26K22)で Lチカ のブレッドボード


関連記事
C言語でPIC18F、まずはLチカ (LED点滅)
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続2
C言語でPIC18F、SDカード読み書き
C言語でPIC18F、SDカードの画像ファイルをLCD(M028C9325TP)に表示

PIC18Fカテゴリの最新記事