« 「天文屋のためのマイコン入門」7セグメントLEDを付ける | トップページ | 「天文屋のためのマイコン入門」ラベルの使用 »

2014年6月10日 (火)

「天文屋のためのマイコン入門」プログラム解説

7セグメントLEDのプログラムの解説です。

1406096 

まず、以前と比べてプログラミングスタイルをちょっと変えてみました。レジスタの番地は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などのビット操作命令が便利です。

一方、ポートの中の複数のビットを操作する場合は、数値を一旦、ワーキングレジスタに入れて、それをポートのレジスタに転送する方式が便利です。

以上、プログラムを簡単に説明しました。

次回は、ロータリースイッチの取り付けです。

|

« 「天文屋のためのマイコン入門」7セグメントLEDを付ける | トップページ | 「天文屋のためのマイコン入門」ラベルの使用 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 「天文屋のためのマイコン入門」7セグメントLEDを付ける | トップページ | 「天文屋のためのマイコン入門」ラベルの使用 »