「天文屋のためのマイコン入門」プログラム解説
7セグメントLEDのプログラムの解説です。
まず、以前と比べてプログラミングスタイルをちょっと変えてみました。レジスタの番地は16進数の通し番地で記述してあります。これはPICのマニュアルの記載に合わせたからです。
次に、コメントを追加しました。セミコロン(;)から行末までは、コメントといって、プログラム上は何の影響もありません。プログラムが読みやすくなるようにコメントを入れます。
それでは解説に入ります。4行目から8行目までは初期化ですが、前回のプログラムとほぼ同じで、ポートBの出力方向の設定が新たに加わっています。
10行目から無限ループが始まります。最初に
BTFSC 5h,5
でスイッチの状態を見ています。スイッチがONなら、つまりRA5が0なら次のGOTO命令をスキップするので、GOTO以下の命令が実行されます。
GOTO以下の命令は
BSF 5h,4 ;ポートAの4ビットを1にセットLEDが光る
BSF 5h,6 ;ポートAの6ビット
MOVLW B'11011011'
MOVWF 6h ;ポートB出力
最初の一行目でLEDを光らせ、後の3行で7セグメントLEDをすべて光らせています。
そして最後に
GOTO 5 ;最初に戻る
で無限ループの先頭に戻ります。
20行目からは、スイッチOFFの場合の処理が記述されています。
BCF 5h,4 ;ポートAの4ビットを0にクリアLED消灯
BCF 5h,6 ;ポートAの6ビット
MOVLW B'00000000'
MOVWF 6h ;ポートB出力
スイッチONの場合とは逆にLED、7セグメントLEDをすべて消灯させています。
そして最後に
GOTO 5 ;最初に戻る
によって、無限ループの先頭に戻ります。
ポートの1ビットのみを操作する時は、BSFやBCFなどのビット操作命令が便利です。
一方、ポートの中の複数のビットを操作する場合は、数値を一旦、ワーキングレジスタに入れて、それをポートのレジスタに転送する方式が便利です。
以上、プログラムを簡単に説明しました。
次回は、ロータリースイッチの取り付けです。
| 固定リンク
コメント