今日こそお勉強しまそ。
教材は
http://picdetukutte.toshi-ie.com/PIC16F84A.html
の
http://picdetukutte.toshi-ie.com/infoA.zip
の中にある84A_SAMPLE3ですよ。新しいところです。ささ頑張りましょう。
これは前のSAMPLE2をほんの少し進歩させた内容です。
SAMPLE2と同様に一定時間ごとに2個のLEDが交互に点灯するわけです。
しかし今回はRA1のスイッチを押すと止まってしまうというプログラムです。
でどこが違うかですが
CALL T3で飛んで行った先にT1があります。そこに
T1_LOOP
GOTO OFF_CHECK ;「OFF_CHECK」へ行く。
T1_0 ;「OFF_CHECK」から戻った。
DECFSZ TIMER1,F ;ここを通るたびに箱から「1」ずつ減っていく。
GOTO T1_LOOP ;まだ箱に数が残っていれば「T1_LOOP」へ戻る。
RETURN
ってなってて
GOTO OFF_CHECK
が前と違う箇所ですな。
OFF_CHECK って標識のところへ行けーー ってことです。
でそこへ行ってみると
OFF_CHECK
BTFSC PORTA,1 ;RA1のボタンが押されたかどうか?
GOTO T1_0 ;押されていない。「T1_0」へ戻る。
BCF PORTA,2 ;押された。RA2のLED消灯
BCF PORTA,3 ; RA3のLED消灯
GOTO MAIN0 ;「MAIN0」へ戻る。
RA1(PORTA,1)が押されたか?って命令の「BTFSC PORTA,1」がありまする。
押されていない、つまり「1」のときは・・・・(覚えてるか? 前やったぞ)
「GOTO T1_0」だ。つまりさっきの「GOTO OFF_CHECK」のすぐ下へ戻るってことね。
んでまたまた時間稼ぎを続ける。この時間稼ぎ中に何百回だか何千回もここでオフ用ボタンが押されてないかチェックするってわけよ。常に監視してる感じだね。
で もし押されていたら!
BCF PORTA,2 ;押された。RA2のLED消灯
BCF PORTA,3 ; RA3のLED消灯
GOTO MAIN0 ;「MAIN0」へ戻る。
RA2 RA3両方消して「MAIN0」へ行け。つまり振り出しだね。
でスタート用のボタンRA0が押されるタイミングを待つ ってことだね。
しかーーーし! このプログラムは本当はいけないのです。
もともと「CALL T3」でここへ飛んできているのだから「RETURN」で返って行かないとダメなんだよーーー。
振り出しに戻ってるからプログラム的には動いてるけど悪い見本ですな。
でもね こーゆーことやってるのを他で見たことはある。それはあの有名な「ブレークアウトゲーム」ブロック崩しですよ。でもあれも動いてるからOKだよね。
今日は新しい命令語はなかったね。
今度は84A_SAMPLE4でもやろうか。 またね~~