概要:短い期間でのインターバルタイマーなどに利用できる。
タイマー0は8ビットのタイマーカウンタ で、
1命令サイクル毎に+1されます。(プリスケーラで変更できます)
最初に設定した値からカウントアップが始まります。
最大256のプリスケーラを併用すると65,535までのクロックをカウントすることができる
プリスケーラとは、カウント周波数を遅くする回路のこと。
クロックは外部入力と内部発生を選択することができる
TMR0(タイマーカウンタ)のカウント値がFFH(255)から00Hに戻る(オーバフロー)時TMR0割込みが発生する。
基本的にはアップカウンタ
カウント開始からFFHを過ぎて割り込みが発生するまでのインターバル時間を調整するために、
TMR0に初期値を書き込む操作を行ないます。
TMR0の初期値とプリスケーラ値の設定によって割り込み発生までに必要なカウント値が決まります。
タイマーカウンタTMR0はSFR(スペシャルファンクションレジスタ)として読み書きが可能で、プリスケーラ値やクロックの外部/内部の選択、および外部クロック時の立上り/立下りタイミングの設定などの、TMR0の動作設定はOPTIONレジスタによって行ないます。
内部クロック
周期 = 1/システムクロック周波数 x 4
システムクロックが20MHzの場合は、1/20MHz x 4 = 0.2μSということになります。
TMR0のカウントアップ周期 = 内部クロック周期 x プリスケーラ設定値
実際のタイマーカウンタTMR0は、
プリスケーラを経由した後のクロック周期でカウントアップされます。
プリスケーラは1:2~1:256の8段階から選択できますので、
上記の通りシステム クロックが20MHzの場合、
プリスケーラが1:2の時は0.4μS、
1:256の時は51.2μSのカウントアップ周期となります。
システムクロックが20MHzの場合、TMR0を使ったタイマー動作では、51.2μS x 255カウント = 13.056mS が計測できる最長時間ということになります。
TMR0に200がセットされていると、56命令サイクル(255-200+1)でTMR0割込みが発生します。
クロックとして20MHzを使用していますので、1命令サイクルは0.2μSです。
プリスケーラが1:2の時は0.4μS
22.4μS(0.4μS×56サイクル)でTMR0割込みが発生します。
16ビットタイマーの場合
8ビットタイマーは256カウントが限界でした。
16ビットタイマーは256x256で65,536カウントが限界になります。
このコメントは投稿者によって削除されました。
返信削除