PIC16F1619の基本動作から応用プログラムまでを学びます。

ホーム
12F1822
16F1455
16F1459
18F14K50
18F26J50
dsPIC
その他
    
16F18313
16F18325
16F18346
16F1619
Curiosity
---
---
タイマー2 HLT
2020-04-05

P16F1619には、3種のタイマーがあります。タイマー2は、8ビットタイマーカウンター(TMR2)と8ビットピリオドレジスター(PR2)から構成されています。それら2本のレジスターの値を常時比較しており、一致するとTMR2をリセットします。さらに、外部信号と組み合わせて、ワンショットおよび単安定動作モードで、タイマーの開始、実行、停止、およびリセット制御することができます。また、CCPと連携しPWM(Pulse Width Modulation)を行うことが特徴です。TMR2の前段と後段には、最大64分周のプリスケラー、最大16分周のポストスケラーが使用できます。

目次

タイマー2/4/6モジュール

Hardware Limit Timer (HLT)機能を備えたこのタイマは、今までの Timer2 モジュールに非同期外部リセット機能とワンショット機能を追加した拡張バージョンです。リセット信号は、外部入力ピンまたは内部のコアから独立した周辺モジュール (CLCやゼロクロス検出(ZCD)モジュール等)から供給でき、外部イベントに基づいてタイマーを開始/停止/リセットすることができます。予期していたイベントが発生しなかった時に割り込み信号を生成することもできます。

タイマーの機能は次のとおりです。

HLTは複数の動作モードを備え、多様なクロック源が選択できるため、柔軟な設計が可能です。動作モードは、TxHLT レジスタの MODE ビットにより制御し、Timer2/4/6モジュールは、開始、実行、フリーズ、およびリセットを制御する外部信号と組み合わせて動作できる8ビットタイマーです。

クロック周波数とタイムアップ周期

PS Fosc/4
31k 1M 32M
 1:1 33mS 1024μS 32μS
 1:4 131mS 4.1mS 128μS
 1:16 524mS 16.4mS 512μS
 1:64 2.1 S 66mS 2048uS

1 Timer2の動作

Timer2は、次の3つの主要なモードで動作します。

各モードには、開始、停止、およびリセットのオプションがあります。表23-1に、オプションを示します。

すべてのモードで、TMR2カウントレジスタは、プログラム可能なプリスケーラからのクロック信号の立上りエッジでインクリメントされます。TMR2がT2PRと等しい場合、Highレベルがポストスケーラーカウンターに出力されます。TMR2は、次のクロック入力でクリアされます。

ハードウェアからの外部信号を設定して、タイマー動作をゲートしたり、TMR2カウントを強制的にリセットしたりすることもできます。ゲートモードでは、ゲートが無効になるとカウンタが停止し、ゲートが有効になるとカウンタが再開します。リセットモードでは、TMR2カウントは、外部ソースからのレベルまたはエッジのいずれかでリセットされます。

TMR2レジスタは、直接読み取りおよび書き込みが可能です。TMR2レジスタは、デバイスのリセット時にクリアされます。T2PRレジスタはダブルバッファリングされ、デバイスのリセット時に0xFFに初期化されます。SFRは直接読み取りおよび書き込み可能ですが、実際の周期バッファーは、次のイベントが発生した場合にのみSFR値で更新されます。

プリスケーラとポストスケーラの両方のカウンタは、次のイベントでクリアされます。

*注意* T2CONに書き込みをしても、TMR2 はクリアされません。

1.1 フリーランニング周期モード

TMR2の値は、各クロックサイクルで周期レジスタT2PRの値と比較されます。2つの値が一致すると、コンパレータは次のサイクルでTMR2の値を00hにリセットし、出力ポストスケーラカウンタをインクリメントします。ポストスケーラカウントがTMRxCON1レジスタのOUTPS <4:0>ビットの値と等しい場合 TMR2_postscaled 出力に1クロック周期幅のパルスが発生し、ポストスケーラカウントがクリアされます。

基本機能フリーランモードの設定

最新のTimer2は、機能が豊富になったため設定するレジスターの数が多くなり初期設定に注意が必要です。ただ、よく使われる基本的(伝統的)な使い方であるフリーラン機能は、Reset後のデフォルトのままで、多くの設定が完了しています。下右表に各プリスケラー設定値に対するTMR2 Outputの周期を示します。入力は、システムクロック(Fosc/4)の他、外部入力など多彩な信号をカウントすることができます。

Power ON Reset後の動作Power ON Reset後のレジスター設定
  • Timer2 OFF
  • Free Run mode
  • Softwear gate
  • Clock : Fosc/4
  • Prescaller : 1:1
  • Postscaller : 1:1
  • T2CON = 0x00
  • PR2 = 0xFF
  • T2HLT = 0x00
  • T2RST = 0x00
  • T2CLKCON = 0x00
1.2 ワンショットモード

ワンショットモードは、ONビットがクリアされ、TMR2がT2PRと一致するとタイマーが停止し、T2ONビットがオフとオンを繰り返すまで再起動しないこと以外は、フリーランニング周期モードと同じです。0 以外のポストスケーラOUTPS <4:0>値は、タイマーが最初の周期イベントで停止し、タイマーが再起動されるとポストスケーラがリセットされるため、このモードでは意味がありません。

1.3 モノスタブルモード

単安定モードは、ONビットがクリアされず、外部リセットイベントによってタイマーを再起動できることを除いて、ワンショットモードに似ています。

表23-1:TIMER2の動作モード
ModeMODE出力動作動作Timer 制御
<4:3><2:0>StartResetStop
フリーラン00000周期パルスソフトウエア制御 (図23-4)ON = 1ON = 0
001ハード制御, 正論理
(図23-5)
ON = 1 and
TMRx_ers = 1
ON = 0 or
TMRx_ers = 0
010ハード制御, 負論理ON = 1 and
TMRx_ers = 0
ON = 0 or
TMRx_ers = 1
011周期パルス
with
ハードリセット
両エッジ リセットON = 1TMRx_ers ↕ON = 0
100立上り リセット (図23-6)TMRx_ers ↑
101立下り リセットTMRx_ers ↓
110"0" レベル リセットTMRx_ers = 0ON = 0 or
TMRx_ers = 0
111"1" レベル リセット
(図23-7)
TMRx_ers = 1ON = 0 or
TMRx_ers = 1
ワンショット01000ワンショットソフトウエア制御 (図23-8)ON = 1ON = 0 or
TMRx = PRx
の次のclock
(Note 2)
001エッジトリガ
スタート
(Note 1)
立上りスタート
(図23-9)
ON = 1 and
TMRx_ers ↑
010立下りスタートON = 1 and
TMRx_ers ↓
011両エッジスタートON = 1 and
TMRx_ers ↕
100エッジトリガ
スタート
and
ハードリセット
(Note 1)
立上りスタート and
立上りリセット (図23-10)
ON = 1 and
TMRx_ers ↑
TMRx_ers ↑
101立下りスタート and
立下り リセット
ON = 1 and
TMRx_ers ↓
TMRx_ers ↓
110立上りスタート and
"0" レベル リセット
(図23-11)
ON = 1 and
TMRx_ers ↑
TMRx_ers = 0
111立下りスタート and
"1" レベル リセット
ON = 1 and
TMRx_ers ↓
TMRx_ers = 1
単安定10000Reserved
001エッジトリガ
スタート
(Note 1)
立上りスタート (図23-12)ON = 1 and
TMRx_ers ↑
ON = 0 or
TMRx = PRx
の次のclock
(Note 3)
010立下りスタートON = 1 and
TMRx_ers ↓
011両エッジスタートON = 1 and
TMRx_ers ↕
Reserved100Reserved
Reserved101Reserved
ワンショット110レベルトリガ
スタート
and
ハードリセット
"1" レベル スタート &
"0" レベル リセット
ON = 1 and
TMRx_ers = 1
TMRx_ers = 0ON = 0 or
Held in Reset
(Note 2)
111"0" レベル スタート &
"1" レベル リセット
ON = 1 and
TMRx_ers = 0
TMRx_ers = 1
Reserved11 - - -Reserved

Note 1:  ON = 0の場合、ON = 1の後にタイマーを再起動するためのTMRx_ersエッジが必要です。
Note 2:  TMRx = PRxの場合、次のクロックでONをクリアし、00hでTMRxを停止します。
Note 3:  TMRx = PRxの場合、次のクロックは00hでTMRxを停止しますが、ONはクリアしません。

2 PRx周期レジスタ

PRx周期レジスタはダブルバッファリングされています。ソフトウェアはPRxレジスタの読み取りと書き込みを行います。ただし、タイマーはバッファリングされたPRxレジスタを使用して動作します。ソフトウェアは、バッファリングされたPRxレジスタに直接アクセスできません。PRxレジスタの内容は、次のいずれかのイベントによってバッファに転送されます。

3 タイマー2出力

Timer2モジュールのプライマリ出力は TMR2_postscaledであり、ポストスケーラカウンタが TMR2xCONレジスタのOUTPSビットの値と一致すると、単一のTMR2_clk周期分のパルスを出力します。T2PRポストスケーラは、TMR2値がT2PR値と一致するたびにインクリメントされ、この信号は、他のいくつかの入力モジュールへの入力として選択できます。

さらに、Timer2は、PWMモードでのパルス生成のためにCCPモジュールによっても使用されます。実際のTMR2値と他の内部信号の両方がCCPモジュールに送信され、PWM信号の周期とパルス幅の両方を適切にクロックします。CCPで使用するTimer2の設定の詳細については、「CCP/PWMのページ」を参照してください。

4 外部リセットソース

クロックソースに加えて、Timer2は外部リセットソースも取り込みます。この外部リセットソースは、Timer2、Timer4、およびTimer6に対してそれぞれT2RST、T4RST、およびT6RSTレジスタで選択されています。このソースは、タイマーがどのモードにあるかに応じて、タイマーの開始と停止、およびタイマーのリセットを制御します。タイマーのモードは、TMRxHLTレジスタのMODE <4:0>ビットによって制御されます。エッジトリガーモードでは、外部トリガー間に6つのタイマークロック周期が必要です。レベルトリガーモードでは、トリガーレベルが少なくとも3タイマークロック周期分の長さである必要があります。デバッグフリーズモードでは、外部トリガーは無視されます。

5 Timer2割り込み

Timer2はデバイス割り込みを生成することもできます。割り込みは、ポストスケーラカウンタがT2CONレジスタのポストスケーラ制御ビットOUTPS <3:0>で選択された16のポストスケールオプション(1:1から1:16)と一致したときに生成されます。割り込みは、PIE1レジスタのTMR2IE割り込みイネーブルビットをセットすることで有効になります。割り込みタイミングを図23-3に示します。

図23-3:TIMER2のプリスケーラ、ポストスケーラ、および割り込みタイミング図

TMRxIF

注1:2:

(1)(2)(1)

割り込みフラグの設定は、命令クロックと同期しています。同期には2命令サイクルかかる場合がありますソフトウェアによってクリアされます。

6 操作例

特に指定のない限り、次の注は次のタイミング図に適用されます。

-prescaleとpostscalerの両方が1:1(TxCONレジスタのCKPSビットとOUTPSビットの両方がクリアされます)。

-Fosc/4を除く任意のクロックの図は、ONとTimer2_ersの両方で少なくともクロック2つ分の同期遅延を示しています。Fosc/4を使用する場合、クロック同期遅延は、Timer2_ersの少なくとも命令周期1つ分です。ONは次の命令周期に適用されます。

-PWMDutyCycleとPWM出力は、セクション26.4「CCP/PWMクロックの選択」で説明されているようにタイマーがCCPモジュールのPWM機能に使用されると仮定して示されています。信号はTimer2モジュールの一部ではありません。

6.1 ソフトウェアゲートモード

このモードは、従来のTimer2操作に対応します。タイマーは、ON = 1の場合はクロック入力ごとにインクリメントし、ON = 0の場合はインクリメントしません。TMRxカウントがPRx周期カウントと等しい場合、タイマーは次のクロックでリセットされ、0からカウントを継続します。図23-4に示されています。PRx = 5の場合、カウンタはTMRx = 5まで進み、次のクロックでゼロになります。

図23-4:ソフトウェアゲートモードのタイミング図(モード= 00000)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.2 ハードウェアゲートモード

ハードウェアゲートモードは、TMRx_ers外部信号がタイマーをゲートできることを除いて、ソフトウェアゲートモードと同じように動作します。CCPとともに使用すると、ゲーティングはPWM周期を延長します。PWM出力がハイのときにタイマーが停止すると、デューティサイクルも延長されます。

MODE <4:0> = 00001の場合、外部信号がハイになるとタイマーが停止します。MODE <4:0> = 00010の場合、外部信号がローになるとタイマーが停止します。

図23-5は、MODE <4:0> = 00001のハードウェアゲーティングモードを示しています。このモードでは、High入力レベルでカウントが開始されます。

図23-5:ハードウェアゲートモードのタイミング図(モード= 00001)

6.3 エッジトリガーハードウェア制限モード

ハードウェア制限モードでは、タイマーが周期カウントに達する前に、TMRx_ers外部信号によってタイマーをリセットできます。3種類のリセットが可能です。

タイマーをPWMモードのCCPと組み合わせて使用​​すると、早期リセットにより周期が短縮され、2クロックの遅延後にPWMパルスが再開されます。図23-6を参照してください。

図23-6:エッジトリガーハードウェア制限モードのタイミング図(モード= 00100)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.4 レベルトリガーハードウェア制限モード

レベルトリガーハードウェア制限タイマーモードでは、図23-7に示すように、カウンターは外部信号TMRx_ersのHighレベルまたはLowレベルによってリセットされます。

MODE <4:0> = 00110を選択すると、タイマーはLowレベルの外部信号でリセットされます。MODE <4:0> = 00111を選択すると、タイマーはHighレベルの外部信号でリセットされます。

この例では、TMRx_ers = 1のときにカウンターがリセットされます。ONは、BSFおよびBCF命令によって制御されます。ON = 0の場合、外部信号は無視されます。

CCPがタイマーをPWMタイムベースとして使用する場合、タイマーがカウントを開始するとPWM出力がハイに設定され、タイマーカウントがCCPRx値と一致する場合にのみローに設定されます。タイマーは、タイマーカウントがPRx値と一致するか、外部リセット信号が真になって真のままになってから2クロック周期後にリセットされます。

PRxが一致した後のクロック、または外部リセット信号がリセットを放棄した後の2クロックのいずれかで、タイマーがカウントを開始し、PWM出力がハイに設定されます。PWM出力は、タイマーがCCPRxパルス幅値と一致するようにカウントアップするまでハイのままになります。PWM出力がハイのときに外部リセット信号が真になると、リセット信号が解放されるまでPWM出力はハイのままになり、タイマーがCCPRx値に一致するようにカウントアップできるようになります。

図23-7:レベルトリガーハードウェア制限モードのタイミング図(モード= 00111)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.5 ソフトウェアスタートワンショットモード

ワンショットモードでは、タイマーがリセットされ、タイマー値がPRx周期値と一致すると ONビットがクリアされます。別のタイマーサイクルを開始するには、ソフトウェアで ONビットをセットする必要があります。

MODE <4:0> = 01000に設定すると、図23-8に示すワンショットモードが選択されます。この例では、ONはBSFおよびBCF命令によって制御されます。最初のケースでは、BSF命令がオンに設定され、カウンターが完了まで実行され、オンがクリアされます。2番目のケースでは、BSF命令がサイクルを開始し、BCF/BSF命令がサイクル中にカウンターをオフおよびオンにしてから、実行して完了します。

ワンショットモードをCCPPWM動作と組み合わせて使用​​すると、PWMパルスドライブはONビットのセットと同時に開始します。PWMドライブがアクティブなときにONビットをクリアすると、PWMドライブが拡張されます。PWMドライブは、タイマー値がCCPRxパルス幅値と一致すると終了します。ソフトウェアがONビットをセットして別のサイクルを開始するまで、PWMドライブはオフのままになります。ソフトウェアがCCPRxの一致後、PRxの一致前にONビットをクリアすると、PWMドライブはONビットがクリアされたままの時間だけ延長されます。別のタイミングサイクルは、PRx周期カウントの一致によってクリアされた後にONビットをセットすることによってのみ開始できます。

図23-8:ソフトウェア開始ワンショットモードのタイミング図(モード= 01000)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.6 エッジトリガーワンショットモード

エッジトリガーワンショットモードは、ONビットがセットされた後、外部信号入力からのエッジでタイマーを開始し、タイマーがPRx周期値と一致したときにONビットをクリアします。次のエッジがタイマーを開始します。

ONビットをクリアしてタイマーを停止した場合、カウントを再開するようにONビットをセットした後、別のTMRx_ersエッジが必要になります。図23-9に、立上りエッジのワンショットモードでの動作を示します。

エッジトリガーワンショットモードをCCPと組み合わせて使用​​すると、エッジトリガーはPWMドライブをアクティブにし、タイマーがCCPRxパルス幅値と一致するとPWMドライブは非アクティブになり、タイマーがで停止すると非アクティブのままになります。 PRx周期のカウントマッチ。

図23-9:エッジトリガーワンショットモードのタイミング図(モード= 01001)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

3

BSFおよびBCFは、CPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。

6.7 エッジトリガーハードウェア制限ワンショットモード

エッジトリガーハードウェア制限ワンショットモードでは、タイマーはONビットがセットされた後、最初の外部信号エッジでカウントを開始し、後続のすべてのエッジでリセットされます。タイマーを開始するには、ONビットがセットされた後の最初のエッジのみが必要です。カウンタは、後続のすべての外部リセットエッジでは、2クロック後に、自動的にカウントを再開します。エッジトリガーは次のとおりです。

タイマ値がPRx周期値と一致すると、タイマはリセットされ、ONビットをクリアします。ソフトウェアがONビットをセットするまで、外部信号エッジは効果がありません。図23-10は、立上りエッジのハードウェア制限のワンショット操作を示しています。

このモードをCCPと組み合わせて使用​​すると、最初の開始エッジトリガー、および後続のすべてのリセットエッジがPWMドライブをアクティブにします。PWMドライブは、タイマーがCCPRxパルス幅値と一致すると非アクティブになり、一致が発生する前に外部信号エッジがタイマーをリセットしない限り、タイマーがPRx周期の一致で停止するまで非アクティブのままになります。

図23-10:エッジトリガーハードウェア制限ワンショットモードタイミング図(モード= 01100)

注意1:BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.8 レベルリセット、エッジトリガーハードウェア制限ワンショットモード

レベルトリガーワンショットモードでは、タイマーカウントは外部信号レベルでリセットされ、ONビットがセットされている間、リセットレベルからアクティブレベルへの遷移の立上り/立下りエッジでカウントを開始します。リセットレベルは次のように選択されます。

タイマカウントがPRx周期カウントと一致すると、タイマがリセットされ、ONビットがクリアされます。PRx一​​致またはソフトウェア制御のいずれかによってONビットがクリアされると、ONビットがカウンタを開始するようにセットされた後に、新しい外部信号エッジが必要になります。

レベルトリガーリセットワンショットモードをCCPPWM動作と組み合わせて使用​​すると、PWMドライブはタイマーを開始する外部信号エッジでアクティブになります。タイマーカウントがCCPRxパルス幅カウントと等しくなると、PWMドライブは非アクティブになります。PRx周期カウントの一致でタイマーカウントがクリアされると、PWMドライブはアクティブになりません。

図23-11:Lowレベルリセット、エッジトリガーハードウェア制限ワンショットモードタイミング図(モード= 01110)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.9 エッジトリガーモノスタブルモード

エッジトリガー単安定モードは、ONビットがセットされた後、外部リセット信号入力からのエッジでタイマーを開始し、タイマーがPRx周期値と一致するとタイマーのインクリメントを停止します。次のエッジがタイマーを開始します。

エッジトリガー単安定モードをCCPPWM動作と組み合わせて使用​​すると、PWMドライブはタイマーを開始する外部リセット信号エッジでアクティブになりますが、タイマーがPRx値と一致するとアクティブになりません。タイマーがインクリメントしている間、外部リセット信号の追加のエッジはCCPPWMに影響を与えません。

図23-12:立上りエッジでトリガーされるモノスタブルモードのタイミング図(モード= 10001)

注1 : BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

6.10 レベルトリガーハードウェア制限ワンショットモード

レベルトリガーハードウェア制限ワンショットモードは、タイマーを外部リセットレベルのリセットに保持し、ONビットがセットされて外部信号がリセットレベルにないときにカウントを開始します。外部信号のいずれかがリセットされていないか、ONビットがセットされている場合、設定/アクティブ化されているもう一方の信号がタイマーを開始します。リセットレベルは次のように選択されます。

タイマカウントがPRx周期カウントと一致すると、タイマがリセットされ、ONビットがクリアされます。PRx一​​致またはソフトウェア制御のいずれかによってONビットがクリアされると、ONビットがセットされ、外部信号がリセットレベルにならなくなるまで、タイマーはリセットのままになります。

レベルトリガーハードウェア制限ワンショットモードをCCPPWM動作と組み合わせて使用​​すると、PWMドライブは外部信号エッジまたはONビットのセットのいずれかでアクティブになり、どちらかがタイマーを開始します。

図23-13:レベルトリガーハードウェア制限ワンショットモードタイミング図(モード= 10110)

注意1:BSFおよびBCFは、TxCONのONビットをセットまたはクリアするためにCPUによって実行されるBit-SetFileおよびBit-ClearFile命令を表します。CPUの実行は、タイマークロック入力と非同期です。

7 スリープ中のTimer2の動作

PSYNC = 1の場合、プロセッサがスリープモードのときはTimer2を操作できません。プロセッサがスリープモードになっている間、TMR2およびT2PRレジスタの内容は変更されません。

PSYNC = 0の場合、選択したクロックソースも実行されている限り、Timer2はスリープ状態で動作します。LFINTOSC、MFINTOSC、またはHFINTOSCオシレータをタイマークロックソースとして選択すると、選択したオシレータがスリープ中に動作し続けます。

8 レジスタ定義:Timer2/4/6制御

ここで示しているレジスターのビット名の多くは、いわゆる Short Bit Name です。

タイマー名Bit Name Prefix
タイマー2T2
タイマー4T4
タイマー6T6

プログラミングでこれらのビットを指定するためには、レジスター名も指定する必要があります。例えば、T2CONレジスターの ONビットをセットするには、T2CONbits.ON = 1 と指定します。

第2の指定方法として、Short Bit Name に、Bit Name Prefix を付けるとレジスター名を省略することができます。例えば、T2CONレジスターの ONビットは。T2ON = 1 と指定します。

CS<3:0> Timer Clock Sourcss
1011AT1_perclk0101MFINTOSC 31.25 kHz
1010LC4_out0100ZCD1_output
1001LC3_out0011LFINTOSC
1000LC2_out0010HFINTOSC 16 MHz
0111LC1_out0001Fosc
0110Pin T2INPPS0000Fosc/4
RSEL<3:0> External Rest Sourcss
1111Reserved0111TMR6_postscaled
1110PWM4_out0110TMR4_postscaled
1101PWM3_out0101Reserved
1100LC4_out0100CCP2_out
1011LC3_out0011CCP1_out
1010LC2_out0010C2OUT_sync
1001LC1_out0001C1OUT_sync
1000ZCD1_out0000Pin T2INPPS
表23-1:TIMER2の動作モード
ModeMODE出力動作動作Timer 制御
<4:3><2:0>StartResetStop
Free
Running
Period
00000Period
Pulse
Software gate (図23-4)ON = 1ON = 0
001Hardware gate, active-high
(図23-5)
ON = 1 and
TMRx_ers=1
ON = 0 or
TMRx_ers=0
010Hardware gate, active-lowON = 1 and
TMRx_ers=0
ON = 0 or
TMRx_ers=1
011Period
Pulse
with
Hardware
Reset
Rising or falling edge ResetON = 1TMRx_ers ↕ON = 0
100立上りリセット (図23-6)TMRx_ers ↑
101Falling edge ResetTMRx_ers ↓
110Low level ResetTMRx_ers=0ON = 0 or
TMRx_ers=0
111High level Reset
(図23-7)
TMRx_ers=1ON = 0 or
TMRx_ers=1
One-shot01000One-shotSoftware start (図23-8)ON = 1ON = 0 or
Next clock
after
TMRx = PRx
(Note 2)
001Edge
triggered
start
(Note 1)
Rising edge start
(図23-9)
ON = 1 and
TMRx_ers ↑
010Falling edge startON = 1 and
TMRx_ers ↓
011Any edge startON = 1 and
TMRx_ers ↕
100Edge
triggered
start
and
hardware
Reset
(Note 1)
Rising edge start and
Rising edge Reset
(図23-10)
ON = 1 and
TMRx_ers ↑
TMRx_ers ↑
101Falling edge start and
Falling edge Reset
ON = 1 and
TMRx_ers ↓
TMRx_ers ↓
110Rising edge start and
Low level Reset
(図23-11)
ON = 1 and
TMRx_ers ↑
TMRx_ers=0
111Falling edge start and
High level Reset
ON = 1 and
TMRx_ers ↓
TMRx_ers=1
Mono-stable10000Reserved
001Edge
triggered
start
(Note 1)
Rising edge start
(図23-12)
ON = 1 and
TMRx_ers ↑
ON = 0 or
Next clock
after
TMRx
= PRx
(Note 3)
010Falling edge startON = 1 and
TMRx_ers ↓
011Any edge startON = 1 and
TMRx_ers ↕
Reserved100Reserved
Reserved101Reserved
One-shot110Level
triggered
start
and
hardware
Reset
Hight level start &
Low level Reset
ON = 1 and
TMRx_ers=1
TMRx_ers=0ON = 0 or
Held in Reset
(Note 2)
111Low level start &
High level
Reset
ON = 1 and
TMRx_ers=0
TMRx_ers=1
Reserved11xxxReserved
レジスタ bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF
PIE1 TMR1GIE ADIE RCIE TXIE SSP1IE CCP1IE TMR2IE TMR1IE
PIR1 TMR1GIF ADIF RCIF TXIF SSP1IF CCP1IF TMR2IF TMR1IF
PIE2 OSFIE C2IE C1IE BCL1IE TMR6IE TMR4IE CCP2IE
PIR2 OSFIF C2IF C1IF BCL1IF TMR6IF TMR4IF CCP2IF
TMR2 TMR2 Count
PR2 Timer2 の Period Register
T2CON ON CKPS<2:0> OUTPS<3:0>
T2CLKCON CS<3:0>
T2RST RSEL<3:0>
T2HLT PSYNC CKPOL CKSYNC MODE<4:0>
レジスタ BIT 説明 1 0
INTCON 7 GIE 全インタラプトの使用許可 許可
6 PEIE 周辺機能インタラプトの使用許可 許可
PIE1 1 TMR2IE タイマー2のインタラプト許可 許可
PIR1 1 TMR2IF タイマー2 オーバーフロー発生フラグ 発生 未発生
PIE2 2 TMR6IE タイマー6のインタラプト許可 許可
1 TMR4IE タイマー4のインタラプト許可 許可
PIR2 2 TMR6IF タイマー6 オーバーフロー発生フラグ 発生 未発生
1 TMR4IF タイマー4 オーバーフロー発生フラグ 発生 未発生
T2CON 7 ON タイマー2 ON/OFF ON OFF
6 CKPS1 プリスケラー比率 000=1:1 (既定)
000=1:1010=1:4100=1:16110=1:64
001=1:2011=1:8101=1:32111=1:128
1 0
5 CKPS0 1 0
4 CKPS0 1 0
3 OUTPS3 ポストスケラー分周比率 (規定値 0000)
0000=1:10011=1:4 1101=1:14
0001=1:20100=1:5•• 中略 ••1110=1:15
0010=1:30101=1:6 1111=1:16
1 0
2 OUTPS2 1 0
1 OUTPS1 1 0
0 OUTPS0 1 0
T2CLKCON <3:0> CS Clock選択 上表参照
T2RST <3:0> RSEL 外部リセット信号選択 上表参照
T2HLT 7 PSYNC プリスケラー同期 同期 非同期
6 CKPOL クロックの極性 負論理 正論理
5 CKSYNC ON/OFF信号の同期 同期 非同期
<4:0> MODE MODE選択 上表参照

タイマー2のプログラム例

PortC - RC2 に接続されたLEDが点灯するプログラムを作成しました。
<回路図>

<プログラム>

/*********************************************************************
*  File name: Timer 2
*  Notes: 1MHz内部クロック PLLはOFF
*        LED    RC5
* PIC16F1619  MPLAB X IDE with XC8
* 2020-4-4
* Copyright (c) 2017 iwamoto All Rights Reserved
* *******************************************************************/
#include <xc.h>

#define _XTAL_FREQ 1000000
#define LED LATC5

// CONFIG
#pragma config FOSC = INTOSC, PWRTE = OFF, MCLRE = ON, CP = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO = ON, FCMEN = ON
#pragma config WRT = OFF, PPS1WAY = ON, ZCD = OFF, PLLEN = OFF
#pragma config STVREN = ON, BORV = LO, LPBOR = OFF, LVP = ON
#pragma config WDTCPS = WDTCPS1F, WDTE = OFF, WDTCWS = WDTCWSSW, WDTCCS = SWC

/*********************************************************
                         Main application
 *********************************************************/
void main(void)
{
    OSCCON = 0b01011000;	// PLL disabled; 1MHz_HF; FOSC;
    TRISC5 = 0;         // Outputs RC5
    // --------------------------------------------
    // Timer2 は、Fosc/4を
    // PreScalerで 1/64 8bit(1/256)でカウント
    // さらに、PostScalerで 1/2してTMR2IFが「1」になる
    // TMR2IFを常時モニタしLED(RC0)を131mSごとに反転
    // --------------------------------------------
    T2CON  = 0b01100001;     // Timer2 Post1/2 Pre1/64設定
    PR2    = 0xFF;           // Timer2 Period Register設定
    T2CLKCON = 0x00;          // クロックはFosc/4
    T2HLT    = 0x00;          // Free Runモード
    T2RST    = 0x00;          // Free Runなので該当せず
    T2ON     = 1;             // Timer2 ON

    while(1){
        if(TMR2IF){         // Timer1ウントアップを待つ
            TMR2IF=0;
            LED = !LED;     // LEDを反転
        }
    }
}