TOPMPLAB C18編(PIC18F1320)> LEDを点滅させる

LEDを点滅させる

(PIC18F1320)

更新日2009.3.14

どのPICでも最初はいつもLEDの点滅実験から開始します。(簡単で動作が目に見えるので)

今回は0.5秒毎にLEDを点滅させるもので、待ち時間はプログラムのループにより作ります。

実験回路
今回の実験回路は非常にシンプルで、電源とLED2つだけです。
クロックは内部クロックを使い8MHz動作としました。

LEDと直列の抵抗は、300〜800Ω程度の範囲であれば明るさが変わるだけで点滅の確認はできます。

内部クロックを使いますのでOSC(15,16番)ピンは使いません。

また、MCLRを無効にしてMCLR(4番)ピンも使いません。

ブレッドボードに組んだ状態
右のピンヘッダ周りは、回路図には有りませんがICSP(In-Circuit Serial Programming)用です。秋月のPICライタなどを使う場合は不要です。

プログラム

今回のプログラムはこちらです。

2つのLEDを0.5秒毎に交互に点滅させるもので、0.5秒の時間はプログラムループにより作成します。
導入編の基本3パターンの中の、割込み無しパターンをベースにしています。

簡単なプログラムですので説明は省略しますが、クロックの設定と時間待ちについて補足しておきます。

config
#pragma config OSC = INTIO2

この設定により内部クロック動作とし、ピン15,16はOSCでは無く入出力ピン(RA6,7)として使用できます。

OSCCON
OSCCON = 0x72;

この設定で、内部クロック(8MHz)動作になります。

内部クロック動作時の周波数は、OSCCONのビット6〜4(IRCF2-0)で以下のように設定します。
IRCF2-0周波数
1118MHz
1104MHz
1012MHz
1001MHz
011500KHz
010250KHz
001125KHz
00031KHz

時間待ち
今回のプログラムでは、一定時間をプログラムループにより作っています。
アセンブラと違い、C言語ではどのような機械語になるか分かりませんので、実行ステップ数を計算する事ができません。
Cコンパイラが出力する逆アセンブルリストを参考に、後は試行錯誤する事になります。
より正確な時間が必要な場合は、タイマ割込みを使います。この後のページでTMR0割込みを使う方法を説明する予定です。