さて今日はこれで何回目だ?
まあいいや。つづきだぜ。
さっきの話をフマエタ上でT3から見て行くね。
T1 ;「CALL T1」より到着
MOVLW D'250' ;250という数を
MOVWF TIMER1 ;「TIMER1」という箱に入れる
T1_LOOP
NOP ;何もしないで下へ進む
DECFSZ TIMER1,F ;ここを通るたびに箱から「1」ずつ減っていく。
GOTO T1_LOOP ;まだ箱に数が残っていれば「T1_LOOP」へ戻る。
RETURN ;箱の数が0ならば「CALL T1」の下へ行く。③
T2 ;「CALL T2」より到着
MOVLW D'250' ;250という数を
MOVWF TIMER2 ;「TIMER2」という箱に入れる
T2_LOOP
CALL T1 ;T1へ行って「RETURN」でこの下へ戻ってくる。③
DECFSZ TIMER2,F ;ここを通るたびに箱から「1」ずつ減っていく。
GOTO T2_LOOP ;まだ箱に数が残っていれば「T2_LOOP」へ戻る。
RETURN ;箱の数が0ならば「CALL T2」の下へ行く。②
T3 ;「CALL T3」より到着
MOVLW D'10' ;10という数を <<<<<<時間の調整が出来ます。(数に比例)
MOVWF TIMER3 ;「TIMER3」という箱に入れる
T3_LOOP
CALL T2 ;T2へ行って「RETURN」でこの下へ戻ってくる。②
DECFSZ TIMER3,F ;ここを通るたびに箱から「1」ずつ減っていく。
GOTO T3_LOOP ;まだ箱に数が残っていれば「T3_LOOP」へ戻る。
RETURN ;箱の数が0ならば「CALL T3」の下へ行く。(MAIN1内)③
さあ行くよ。ついて来てね。
10をTIMER3へ入れる。
T2へ行ってまたここへ戻ってくる。(あ)
250をTIMER2へ入れる。
T1へ行ってまたここへ戻ってくる。(い)
250をTIMER1へ入れる。
NOPで何もしない。(c)
TIMER1の数字から1つ減らす。(a)
T1_LOOPへ行く(b)
※(a)(b)(c)を249回繰り返す。
で
TIMER1の数字から1つ減らす。
TIMER1がからっぽになった。
さっきのところへ戻っていく。
さっきのところってどこか?
(い)だよ。「CALL T1」ってところね。
その下から行くよ。
TIMER2の数字から1つ減らす。
T2_LOOPへ行って またT1へ行くよ。
で さっきTIMER1はからっぽになっちゃったのでまた250入れるよ。
感触わかる?
TIMER1に250入れて
からっぽになったらTIMER2を1つ減らす。
またTIMER1に250入れて・・・・
でTIMER2がからっぽになったら
TIMER3を1つ減らす・・・
でTIMER1も2も3も全部からっぽになったら
一番最初にいたところに戻る。
「CALL T3」
って書いてあったところの下へ戻るんだよ。
で 今までなにをしてたかと言うと ただの時間つぶしだよ。
この回路では10MHzってクロック(セラロック)を付けてるのだ。
で10MHzのときはこのプログラムを1行進むのに
なんと0.4マイクロ秒しか掛からないのだ。
わかるかい?1秒の1000分の1が1ミリ秒だよ。
その1000分の1が1マイクロ秒だよ。
で これは0.4マイクロ秒!
このプログラムでは約1秒 ひまをつぶしたことになるんだよ。
で全体の流れも理解できるよね。
スイッチを入れたら約1秒ごとにLEDが交互に点灯するってプログラムね。
少しづつわかった来たよね。
プログラムって こうやって進んで行くんだよ。
んじゃ また 明日ね。
忘れないで覚えておくんだぜ。 おやすみ。