
第五章 続続とりあえずやってみよう
![]()
では前回 レジスタやらの説明をしたので 本題の解説に入りましょう
前回話をしたように
LEDを全てつける(ポートBを全て出力にする)には これだけのプログラムが必要でしたね
| その1 | バンク1に切り替え(STATUSを 00100000 にする) |
| その2 | TRISBを全て出力にする(00000000 にする) |
| その3 | バンクを0に戻す(STATUSを 00000000 にする) |
| その4 | PORTBを全て出力にする(11111111 にする) |
では それをもとに プログラムを考えてみましょう
〜プログラム解説〜
LIST P=PIC16F84A BSF 03H,5 CLRF 06H BCF 03H,5 MOVLW 0FFH MOVWF 06H END |
では解説をします
| LIST P=PIC16F84A |
これは MPLABに 「このプログラムは PIC16F84A のプログラムです」 と教えるためのものです
これによって このMPLABは PIC16F84A用にアセンブルなんかを考えてくれます
| BSF 03H,5 |
TRISBを触るためには バンク1にする必要があるといいました
そしてバンク1にするには STATUSの5ビット目を 1にすればいいとも言いました
これが その バンク1への切り替えです
BSF は 決められたレジスタの 決められたビットを 1にする命令です
この場合 レジスタは 03H ビットは5です
03はSTATUSです だからSTATUSを操作するためには 03H と書きます
これ(03H)は 03っていう数字が 16進数だということを示すためです
MPLABでは数字を 0とHで囲むと 16進数として 数字が判断されます
だから 010H も16進数ですし 0FFH も16進数です
そして 03H は 03 ですから STATUSのことだというのが すぐに分かると思います
そして決められたビットは 5ビット目 だから
BSF 03H,5 は 03(STATUS)の5ビット目を1にする ということになります
5ビット目を1にするのだから 00000000 が 00100000 となって
バンク1への切り替えがこれで出来たことになります
| CLRF 06H |
多分 ”ぴん” ときたと思いますけど
バンク1へ切り替えたので 次は TRISB(06)を 全て出力にします
つまり TRISBを すべて0にします
ということで
CLRF は 指定したレジスタの内容を全て0にする ものです
そして 指定したレジスタは 06 つまり TRISBですので(今はバンク1だから バンク0なら06は PORTB)
TRISBが 全て0(00000000) になったので ポートBは 全て出力モードになったわけです
| BCF 03H,5 |
これは BSFの逆の BCF です 指定したレジスタの 指定したビットを0にします
この場合 STATUSの 5ビット目を0にしますから 00100000が 00000000 になって
バンクが0になったわけです
| MOVLW 0FFH |
これはちょっとややっこしいものです
PORTBをすべて1にしたいわけですが 全て0にするCLRFはあっても 全て1にする命令はないのです
それに 11111111を書きこみたいわけですが 数字を直接レジスタに書きこむ命令もありません
そこで 「1度 ワーキングレジスタ という 特殊なレジスタをすべて1にして
そのワーキングレジスタ(W と省略する)の内容を PORTB に書きこむ」 という風にしなければならないのです

こんな感じにね
そこで これは Wを全て1にするというものです
MOVLW は ワーキングレジスタに 数字を入力するというものです
この場合 数字は 0FFH これは2進数に直すと 11111111 となります
つまり8ビット全てが1になるので これを後でPORTBに書きこめばOKですね
| MOVWF 06H |
これは そのまま MOVWF は ワーキングレジスタの内容を 指定したレジスタに書き写す というものです
ここで 指定したレジスタは 06 つまりPORTB(バンクは0だから) そして ワーキングレジスタは
さっきFF(11111111)を書きこんだので それがPORTBに書かれるわけですから
PORTBは 11111111 つまり ポートBは全て出力になって 電気が流れたわけです
これで LEDが全てついたわけですね
| END |
これは MPLABに 「これでプログラムは終わりだよ」と 教えるためのものです
まぁ おまじないですね
どう? 分かりましたか?
こんな感じです
ためしに MOVLW 0FFH のところを MOVLW 01H にしたり MOVLW 0FH やMOVLW 011H のように
数字を変えて やってみてはどうでしょう? PORTB に書き込まれる数字が 00000001 のようになって
つくLEDが変わって面白いと思います
次は 03H などを STATUS のように書くための方法を紹介します
| まとめ〜 ワーキングレジスタ ・・・ レジスタに直接数字を書き込むときなどによく使う LIST P= ・・・ P=のところに 使うデバイス(PIC)の種類を書く BSF f,d ・・・ 指定したレジスタ(f)の指定したビット(d)を1にする BCF f,d ・・・ 指定したレジスタ(f)の指定したビット(d)を0にする CLRF f ・・・ 指定したレジスタ(f)をすべて0にする MOVLW k ・・・数字(k)をワーキングレジスタに書き込む MOVWF f ・・・指定したレジスタにワーキングレジスタの内容を書きこむ |