忍者ブログ

PICのド素人のブログ

10年ほど前にヤフーブログにあった記録をここへ移しました。「PIC16F84Aで作ってみました 」というホームページも運営していました。今はそこも消滅し   http://picdetukutte.toshi-ie.com/PIC16F84A.html   にすべてではありませんが引っ越しています。あわせてご覧いただければ幸いです。

PIC16F84Aなんか怖くない

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

PIC16F84Aなんか怖くない

こんばんわ。石野真子です。
というわけでタイトルを変えてみた。
石野真子の30年ぐらい前の曲で「オオカミなんか怖くない」っつーのがあったので
石野真子と名乗ってみました。別にオレがオカマバー勤務なわけではない。
でまたまたPICのお勉強 始めましょう。
教材は
http://picdetukutte.toshi-ie.com/infoA.zip


の84A_SAMPLE1.ASMでごんす。 ふんがーふんがー。
昨日はたった2行の説明で終わってしまったので今晩は頑張るぜ。 っおーーっ!
いよいよ「動作プログラム」だ。

MAIN1 ;「MAIN1」という名前の道しるべだと思ってください。
BTFSC PORTA,0 ;RA0のボタンが押されたかどうか?
GOTO MAIN1 ;押されてない。MAIN1へ戻る(押されるのをぐるぐる回りながら待つ)
BSF PORTA,2 ;押された。RA2のLEDを点灯  
BCF PORTA,3

まあ説明が書いてあるのでその通りなんだけど記号の意味を説明しましょ。
MAIN1 ってのはここの地点の名前。電柱に「ここは1丁目」って書いてあるようなモンだ。これがあると大いに助かるのだよ。
で 次、
BTFSC PORTA,0 ;RA0のボタンが押されたかどうか?
GOTO MAIN1
のBTFSC PORTA,0は
PORTA,0ってのはRA0の足がオンかオフかどっち?って聞いてる命令語なのさ。
話がちょっと戻るけど初期設定でTRISAってあっただろ?そのときにRA0とRA1は入力に設定したよな。んでSAMPLE.bmpって絵を見るとスイッチ(押しボタン)が付いてるのわかるよね。だからこのスイッチがオンオフどっち?って意味なのだ。配線の仕方はPICではこのようなツナギ方が一般的なのさ。10kオームの抵抗はプルアップ抵抗って言うんだよ。
この抵抗で普段は弱い電気で電源側(5V)に引きつけらててこのピン(RA0とRA1)は5Vになってるのさ。でスイッチを押すとマイナス側(0V)につながってピンは0Vになるのだよ。0Vになってもショートすることはない。この抵抗が無かったらショートするよ。でまたまたややこしいことを言うからよく聞けよ。このスイッチは押すとマイナス側(0V)につながるので「スイッチON!=0」なのだよ。入力の考え方は0Vにつながったときが「0」でそうでないとき、つまりここではプルアップ抵抗によって5Vになっている状態は「1」なのだよ。わかるか?「スイッチオン!=1では無い!!」のだ。
で さっきのBTFSCには追加の話があって 「もし1なら下の行へ行け!。そうじゃないとき(つまり0のとき)は2行目へ行け!。」という意味なんだよ。
だからRA0が1のときは「GOTO MAIN1」 。MAIN1って書いたよなさっき。電柱の標識だよ。覚えてるか? 「MAIN1へ行け!」ってことね。つまり振り出しに戻ってるわけだよ。このクログラムではぐるぐる回りながら「いつ押してくれるかなぁ」って待ってるってことなんだよ。PICのプログラムって同じところでじっと待ってることはしないんだよ。いつも1行ずつ動いてるのさ。基本的には下の方へ動こうとしてる。でもさっきのGOTOで上へ戻ったりBTFSCなんかで飛んだりするんだよ。
 話を進めるぜ。
で RA0のスイッチが押された!つまり「0」になった。さあどうなるか?
その下のプログラムがこれだあ。
BSF PORTA,2 ;押された。RA2のLEDを点灯  
BCF PORTA,3 ;     RA3のLEDを消灯
もうわかるよな。説明はもうしない。(疑問があると思うけど あとで話すよ)
で次の行がこれだあ。
 
MAIN2 ;「MAIN2」という名前の道しるべだと思ってください。

BTFSC PORTA,1 ;RA1のボタンが押されたかどうか?
GOTO MAIN2 ;押されてない。MAIN2へ戻る(押されるのをぐるぐる回りながら待つ)
BCF PORTA,2 ;押された。RA2のLEDを消灯
BSF PORTA,3 ;     RA3のLEDを点灯

一緒だしょ?
RA1のスイッチが押されていない(1)のときはMAIN2へ戻ってぐるぐる押されるタイミングを待っている。そのときも出力は先ほどの命令を保持したママなのだよ。
で押されたら(0になる)BTFSCから見て2行目、つまり
BCF PORTA,2 ;押された。RA2のLEDを消灯
BSF PORTA,3 ;     RA3のLEDを点灯
と降りて行く。
で その次が。
GOTO MAIN1 ;MAIN1へ戻る
最初の振り出しへ戻るのだ。
で さっきの疑問が解けただろ?最初はオンしていないのになんでオフの命令があるの?
って思っただろ?。 戻ったときに必要なのさ。 オフなのにオフしろって命令をしても全然構わないからね。
で 最後に 「END」と書く。 これがないとエラーになるぞ。
END から下は何を書いてもPICにはばれないので悪口を書いても気付かれないぞ。
どーだ。これでプログラムが完成だ。
RA0のスイッチを押すとRA2のLEDのみ点灯!
RA1のスイッチを押すとRA3のLEDのみ点灯!
ってプログラムだ。

今日のとどめ。
とどめではない参考事項だ。
BTFSCの逆説でBTFSSって命令もある。
0のときは下の行へ行け。0じゃないとき(つまり1のとき)は2行目へ行け。ってことだ。
BTFSS XXX,6
0のときはここ;←注目!
1のときはここ

ってことな。
でここからがとどめだ。
注目したところだけど このままじゃ次の行の「1のときはここ」へ行ってしまうから注意しろよ。
そーゆー時は

BTFSS XXX,6
GOTO AAA
GOTO BBB
AAA
0のときはここへ来るぜ
       つづく

BBB
1のときはここへ来るぜ
       つづく 

と するのだ。
んじゃ またね。
質問があるときは最新のページに書いてね。
ここに書かれたら埋もれちゃってわからないからね。

明日は 何しようかな?

拍手[0回]

PR

コメント

プロフィール

HN:
waewax
性別:
非公開

P R