---
			---
		
		16F1459には、3本のタイマーがあります。タイマー2は、8ビットタイマーカウンター(TMR2)と8ビットピリオドレジスター(PR2)から構成されています。それら2本のレジスターの値を常時比較しており、一致するとTMR2をリセットします。また、CCPと連携しPWM(Pulse Width Modulation)を行うことが特徴です。TMR2の前段と後段には、最大64分周のプリスケラー、最大16分周のポストスケラーが使用できます。下右表に書くプリスケラー設定値に対するTMR2 Outputの周期を示します。入力は、システムクロック(Fosc/4)のみで、外部入力をカウントすることはできません。
				| PS | Fosc/4 | ||
|---|---|---|---|
| 31k | 4M | 48M | |
| 1:1 | 33mS | 256μS | 21μS | 
| 1:4 | 131mS | 1024μS | 85μS | 
| 1:16 | 524mS | 4.1mS | 341μS | 
| 1:64 | 2.1 S | 16.4mS | 1.37mS | 
| レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | 
|---|---|---|---|---|---|---|---|---|
| INTCON | GIE | PEIE | TMR0IE | INTE | IOCIE | TMR0IF | INTF | IOCIF | 
| PIE1 | TMR1GIE | ADIE | RCIE | TXIE | SSP1IE | - | TMR2IE | TMR1IE | 
| PIR1 | TMR1GIF | ADIF | RCIF | TXIF | SSP1IF | - | TMR2IF | TMR1IF | 
| T2CON | - | T2OUTPS<3:0> | TMR2ON | T2CKPS<1:0> | ||||
| TMR2 | TMR2 Count | |||||||
| PR2 | Timer2 の Period Register | |||||||
| レジスタ | BIT | 名 | 説明 | 1 | 0 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| INTCON | 7 | GIE | 全インタラプトの使用許可 | 許可 | 否 | ||||||||||||
| 6 | PEIE | 周辺機能インタラプトの使用許可 | 許可 | 否 | |||||||||||||
| PIE1 | 1 | TMR2IE | タイマー2のインタラプト許可 | 許可 | 否 | ||||||||||||
| PIR1 | 1 | TMR2IF | タイマー2 オーバーフロー発生フラグ | 発生 | 未発生 | ||||||||||||
| T2CON | 6 | T2OUTPS3 | ポストスケラー分周比率 (規定値 0000)
  | 
					  1 | 0 | ||||||||||||
| 5 | T2OUTPS2 | 1 | 0 | ||||||||||||||
| 4 | T2OUTPS1 | 1 | 0 | ||||||||||||||
| 3 | T2OUTPS0 | 1 | 0 | ||||||||||||||
| 2 | TMR2ON | タイマー1 ON/OFF | ON | OFF | |||||||||||||
| 1 | T2CKPS1 | プリスケラー比率 00=1:1 (既定) 01=1:4, 10=1:16, 11=1:64  | 
					  1 | 0 | |||||||||||||
| 0 | T2CKPS0 | 1 | 0 | 
PortC - RC2 に接続されたLEDが点灯するプログラムを作成しました。
<プログラム>
//  File name: Timer2
//  Description: Timer2 example
//  Timer2のプリスケラでシステムクロック(4MHz/4)を1/4(250KHz)し、
//  PR2の値(249)でリセットを繰り返すと1KHzになる、
//  ポストスケラでさらに1/10で、100Hzになる。
//  毎秒100回のカウントオーバーを50回ごとにLEDを点滅させる。
//  Notes: 4MHz内部クロック
//    LED:      RC2
//    Language: MPLABX XC8
//    Target:   PIC16F1459
// -------------------------------------------------------------------------
#include <xc.h>
#define  LED   LATC2
#pragma config FOSC  = INTOSC, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP  = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO  = OFF, FCMEN = OFF
#pragma config WRT = OFF, CPUDIV = NOCLKDIV, USBLSCLK = 48MHz, PLLMULT = 3x
#pragma config PLLEN = DISABLED, STVREN = ON, BORV = LO, LPBOR = OFF, LVP = OFF
void main(void){
    char count =0;
    OSCCON = 0b00110110;      // 内部クロック4Mhz
    LATC   = 0;
    TRISC  = 0b11111011;      // 入出力設定
    T2CON  = 0b01001101;      // Timer 2 設定(10mSecごと)
                              // PS_1/4, Post 1/10
    PR2 = 249;                // Period Register設定 1/250
    while(1){                 // 繰り返しループ
       while(! TMR2IF);       // Timer2 のタイムアップを待つ
        TMR2IF = 0;           // キャリーフラッグをクリア
        if(++count >= 50){    // キャリーを50回数える
            count = 0;
            LED = ! LED;      // 500mSで点滅
        }
    }
}