【タイマー3】
タイマー3はPIC18シリーズで新たに追加されたタイマでCCP用に使えるタイマとして
強化されました。
(1) タイマー1と同様に8ビットモードと16ビットモードがあります。
16ビットモード設定用のビット、RD16がT3CONレジスタにあります。
(2) タイマ−1の発振回路のクロックをタイマー3のクロックとすることが出来るよう
になっています。これによりリアルタイムクロックを2つにすることが可能となります。
(3) タイマー3をタイマー1と同じようにCCPの周期カウンタとして使うことが出来る
ようになっており、いずれか片方を指定して使うことになります。
つまりCCPのSpecial Event Triggerでクリアされます。
【タイマー3の構成】
タイマー3のブロック構成は下図のようになっています。
上側が通常モードで、下側が16ビットモードの構成となっています。
図のように発振回路はタイマー1と兼用になっていて、T3CONレジスタのTMR3CS
ビットにより指定して選択します。
16ビットモードの場合には、上位バイトはやはりTMR3Hレジスタでバッファリング
されていて、TMR3Lのリードライトと連動してTMR3Hとタイマの上位8ビットとの間で
データ授受を実行します。従って、上位バイトと下位バイトが同じタイミングで読書き
できるようになっています。
タイマー3もCCPのSpecial Event Triggerでクリアされますので、タイマー3を使っても
一定周期でCCPの割込みを発生させることができます。
この場合には、タイマー3は非同期モードにする必要があります。
このTriggerでクリアされた場合には、タイマー3の割込みは発生しません。
【T3CONレジスタ】
タイマ3の制御には下図のT3CONレジスタが使われます。
タイマ3はCCP用の2つめのクロック源として、追加されたので、CCP用のクロックとして、
タイマ1とタイマ3のどちらをCCP用に使うかの指定が出来るようになっています。
CCPも2つあるので、それぞれに指定ができます。
【アセンブラでの使用例】
【タイマー用Cライブラリ関数】
組込み関数書式 書式と内容 setup_timer_3(mode) タイマー3の初期設定を行う。
modeの値は下記をorでつなげて指定する。
T3_DISABLED
T3_INTERNAL
T3_EXTERNAL
T3_EXTERNAL_SYNC
T3_DIV_BY_1
T3_DIV_BY_2
T3_DIV_BY_4
T3_DIV_BY_8
《例》
setup_timer_1(T3_DISABLED);
setup_timer_1(T3_INTERNAL | T3_DIV_BY_4);
setup_timer_1(T3_INTERNAL | T3_DIV_BY_8);
get_timer3() 現在のTMR3の内容を返す。
16ビットなのでlongで扱う必要がある。
《例》 while (get_timer3( ) != 0)set_timer3(value) TMR3レジスタにvalueの値をセットする
《例》
if (get_timer3( )=1000)
set_timer3(0);
【実際の使用例】