« 「天文屋のためのマイコン入門」タイマーを使いこなそう | トップページ | 「理想のポタ赤を作る」製図完成 »

2014年6月30日 (月)

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

それでは実際にプログラムを作って見ましょう。

1406301

このプログラムをビルドして、書き込むと、LEDが一秒間隔で点滅します。

●初期化部

OPTION_REGのうち、クロック源の選択で、命令のクロックをクロック源とするため、ビット5をクリアします。また、プリスケーラーをウオッチドッグタイマーではなくタイマー0で使用するため、ビット3を0にクリアします。

よって次の2命令を初期化部分に加えます。

BCF   81h,5
BCF   81h,3

●メイン部

LEDを点灯する命令と消灯する命令を交互に実行しますが、間に1秒待つサブルーチンを呼び出しています。

●サブルーチン部

1秒待つサブルーチンです。タイマーレジスタTMR0に入力されるクロックは次のようになります。

1406302

プリスケーラーの分周比ですが、特に設定していないので、デフォルトの1/256になります。したがって、TMR0に入力されるクロック周波数は30Hzになります。

つまりTMR0が30カウントしたら1秒ということです。これを利用して1秒を作り出します。つまり、TMR0に-30を代入して、

MOVLW  -30
MOVWF  1h

次にTMR0の値をワーキングレジスタに読み込んで

MOVF     1h,W

0かどうか判定でします。0ならSTATUS(3番地)レジスタのビット2がセットされています。

BTFSS    3h,2

0なら、GOTOをスキップしてサブルーチンからリターンします。0でないなら、まだ一秒たっていないので、ループの先頭に戻って同じことを繰り返します。

GOTO    Wait1s_LOOP
RETURN

いかだでしょうか、タイマーの機能をわかっていたただけたでしょうか?次回このプログラムを少し改良するのと、問題点を検討してみます。

|

« 「天文屋のためのマイコン入門」タイマーを使いこなそう | トップページ | 「理想のポタ赤を作る」製図完成 »

コメント

コメントを書く



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




« 「天文屋のためのマイコン入門」タイマーを使いこなそう | トップページ | 「理想のポタ赤を作る」製図完成 »