TOP>MPLAB 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 | 周波数
| 111 | 8MHz
| 110 | 4MHz
| 101 | 2MHz
| 100 | 1MHz
| 011 | 500KHz
| 010 | 250KHz
| 001 | 125KHz
| 000 | 31KHz
|
- 時間待ち
-
今回のプログラムでは、一定時間をプログラムループにより作っています。
アセンブラと違い、C言語ではどのような機械語になるか分かりませんので、実行ステップ数を計算する事ができません。
Cコンパイラが出力する逆アセンブルリストを参考に、後は試行錯誤する事になります。
より正確な時間が必要な場合は、タイマ割込みを使います。この後のページでTMR0割込みを使う方法を説明する予定です。
|