---
			---
		 
		16F1455には、3本のタイマーがあります。タイマー1は、16ビットのカウンターで、その入力は内部クロックか外部からの信号を選ぶことができます。 ここでは、内部クロックをカウントするタイマーとして使用し、タイマーがカウントアップする仕様について説明します。サンプルで作成したプログラムは、タイマー1がカウントアップするとLEDを点滅するものです。Timer1の機能が強化され、特に入力信号をOn/Off出来るゲート機能の強化が目立ちます。
*注意*
T1Gピンは、APFCON の T1GSEL ビットを「1」にすることで、RA4からRA3に変更することができます。
 
				| Prescalerl | T1OSC | Fosc | Fosc/4 | ||||
|---|---|---|---|---|---|---|---|
| 32k | 31k | 4M | 48M | 31k | 4M | 48M | |
| 1:1 | 2 Sec | 2.1 S | 16mS | 1.4mS | 8.4 S | 66mS | 5.5mS | 
| 1:2 | 4 Sec | 4.2 S | 33mS | 2.7mS | 16.8 S | 131mS | 10.9mS | 
| 1:4 | 8 Sec | 8.4 S | 66mS | 5.5mS | 33.6 S | 262mS | 21.8mS | 
| 1:8 | 16 Sec | 16.8 S | 131mS | 10.9mS | 67.1 S | 524mS | 43.7mS | 
| レジスタ | 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 | 
| APFCON | RXDTSEL | SDOSEL | SSSEL | T1GSEL | TXCKSEL | P1BSEL | CCP1SEL | |
| T1CON | TMR1CS<1:0> | T1CKPS<1:0> | T1OSCEN | nT1SYNC | - | TMR1ON | ||
| T1GCON | TMR1GE | T1GPOL | T1GTM | T1GSPM | T1GGO_ nDONE | T1GVAL | T1GSS<1:0> | |
| TMR1H | TMR1 Count の上位 8 bit | |||||||
| TMR1L | TMR1 Count の下位 8 bit | |||||||
| レジスタ | BIT | 名 | 説明 | 1 | 0 | 
|---|---|---|---|---|---|
| INTCON | 7 | GIE | 全インタラプトの使用許可 | 許可 | 否 | 
| 6 | PEIE | 周辺機能インタラプトの使用許可 | 許可 | 否 | |
| PIE1 | 7 | TMR1GIE | ゲート インタラプトを使用許可 | 許可 | 否 | 
| 1 | TMR1IE | タイマー1 インタラプトを使用許可 | 許可 | 否 | |
| PIR1 | 7 | TMR1GIF | ゲート インタラプト フラグ | 発生 | 未発生 | 
| 1 | TMR1IF | タイマー1 オーバーフロー発生フラグ | 発生 | 未発生 | |
| APFCON | 3 | T1GSEL | T1GのPin配置の指定 | RA3 | RA4 | 
| T1CON | 7 | TMR1CS1 | タイマー1 クロック選択  00=FOSC/4(既定) 01=FOSC, 10=T1CKI or T1OSC, 11=CPSOSC | 1 | 0 | 
| 6 | TMR1CS1 | 1 | 0 | ||
| 5 | T1CKPS1 | プリスケラー比率 00=1:1(既定) 01=1:2, 10=1:4, 11=1:8 | 1 | 0 | |
| 4 | T1CKPS2 | 1 | 0 | ||
| 3 | T1OSCEN | タイマー1 発振器 | ON | OFF | |
| 2 | nT1SYNC | タイマー1 外部信号の内部クロック同期 | 非同期 | 同期 | |
| 0 | TMR1ON | タイマー1 ON/OFF | ON | OFF | |
| T1GCON | 7 | TMR1GE | ゲート機能 ON/OFF(TMR1ON=0 のときは無効) | 有効 | 無効 | 
| 6 | T1GPOL | ゲート極性 | 正論理 | 負論理 | |
| 5 | T1GTM | ゲート・トグルモード(立上りでトグルされる) | ON | OFF | |
| 4 | T1GSPM | シングル・パルスモード | ON | OFF | |
| 3 | T1GGO_ nDONE | シングル・パルスモードのセットおよびモニタ | 待機 | 終了 | |
| 2 | T1GVAL | ゲートの状態を反映(Read Only) | 開 | 閉 | |
| 1 | T1GSS1 | ゲートの信号源  00 = 外部信号ピン (初期値) 01 = Timer0 10 = C1 11 = C2 | 1 | 0 | |
| 0 | T1GSS0 | 1 | 0 | 
PortC - RC2 に接続されたLEDが点灯するプログラムを作成しました。 Gate機能は使用していません。
<回路図>
 
			 
			<プログラム>
//  File name: Timer1
//  Description: Timer1 example
//  Timer0で内部クロック(4MHz)をカウントし、
//  カウントオーバーでLEDを点滅させる。
//  Notes: 4MHz内部クロック
//    LED:      RC2
//    Language: MPLABX XC8
//    Target:   PIC16F1455
#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){
    OSCCON = 0b00110100;      // 内部クロック4Mhz
    LATC   = 0;
    TRISC  = 0b11111011;      // 入出力設定
    T1CON  = 0b00100001;      // Timer 1 設定(262mSecごと)
                              // 内部クロック(FOSC/4)をカウント
                              // PS_1/4
    T1GCON = 0b00000000;      // Timer 1 Gate設定(使用せず)
    while(1){                 // 繰り返しループ (132mSecごと)
        while(! TMR1IF);      // Timer 1 のタイムアップを待つ
        TMR1IF = 0;           // キャリーフラッグをクリア
        LED = ! LED;          // LEDへの出力を反転
    }
}