目次>9章 PIC18F1320編 (02)スイッチでLEDを点滅させる
スイッチでLEDを点滅させる
更新日2008.6.28
PIC18F1320の初回は、スイッチでLEDを点滅させると言うものです。
使用している命令は、PIC16のものに限定していますので、設定部分を変えればPIC16F84Aなどでも動作します。
実験回路
|
・ |
2つのLEDをRB0/RB1に接続し、RB4のスイッチでON/OFFさせます。
同じ18ピンPICでも、PIC16とはピン配置が異なりますので注意して下さい。
-
| |
680Ωの抵抗3本は、300Ω〜1KΩの範囲であれば何でもOKです。
同様に100KΩの抵抗は、1KΩ〜500KΩ程度の範囲であればOKです。
RB4の680Ωは保護抵抗です。この抵抗無しで、誤ってRB4を出力モードにし、1をセットしてスイッチを押すとPICが壊れます。(たぶん)
|
クロックは、10MHzのセラミックレゾネータを使います。
(20MHzでも使えますが、新たに購入するのであれば10MHzも買っておいて下さい。理由は後のページで分かります。)
- こちらは、ブレッドボードに組んだ状態です。
-
| | 回路図に無いもの(右上の6ピンヘッダ周り)が有りますが、これはICSP(In-Circuit Serial Programming)用の回路です。
秋月のPICライタを使うのであれば不要です。
|
|
仕様
|
|
電源ON時は、RB0のLEDを点灯しRB1のLEDは消灯します。
スイッチを押すと、点灯状態を逆転し、スイッチを離すと元に戻すと言う動作です。
-
スイッチの状態 | RB4の状態 | RB0(LED) | RB1(LED)
| OFF | 1 | 1 | 0
| ON | 0 | 0 | 1
|
|
プログラム
|
|
今回のプログラムは、以下のように非常に単純です。
PIC18で追加された命令は使っていませんので、PIC16F84Aなどでも若干の変更で動作できます。
-
LIST P=18F1320
INCLUDE P18F1320.INC
__CONFIG _CONFIG1H, _HS_OSC_1H
; ******** リセットベクタ *************************
ORG 0x0000
MOVLW 0xFC
MOVWF TRISB ;RB0,1:Output(LED)
MOVLW 0x7F
MOVWF ADCON1 ;A/D未使用
; ******** メイン処理 *****************************
main
BTFSS PORTB,RB4 ;スイッチの状態チェック
GOTO main2
BSF PORTB,RB0
BCF PORTB,RB1
GOTO main
main2
BCF PORTB,RB0
BSF PORTB,RB1
GOTO main
END
|
最初の3行はPICの機種に依存しますので、PIC16F84AとPIC16F88との違いなどと同様です。
このプログラムで注目する点は、TRISBやADCON1をバンク切り替えせずに使っている事です。これがPIC18の大きな利点の1つです。
また、使っている命令はPIC16でもそのまま使えます。このように、PIC16の命令はPIC18でもそのまま使えます。(RRF,RLFを除き)
|
PIC18の勧め(Vol.1)
|
|
- その1. PIC16と命令の互換性がある
-
PIC18ファミリーはPIC16ファミリーよりも命令数が多いですが、下位互換があり、追加された命令を使わなければPIC16と同様に使えます。
ただし、RRF,RLF命令のみRRCF,RLCFに変更が必要です。
- その2. バンク切り替えが不要
-
PIC18F1320の場合、GPR(汎用RAM)の使用を128バイトまでとすれば、SFR(特殊レジスタ)を含めバンク切り替えが不要で非常に使いやすくなっています。(ちなみに、PIC16F84AのGPRは68バイトです。)
このバンク切り替えは、PIC16F84A以外のPIC16を使っていると(特に割込みを使う場合)良く考えて設計しておく必要があります。
この考慮が不要と言うだけでもPIC18を使う価値があります。
尚、128バイトを超えてGPRを使う場合はバンクの意識が必要になります。
|