---
			---
		 
		16F1455には、3本のタイマーがあります。タイマー0は、8ビットのカウンターで、その入力は内部クロックか外部からの信号を選ぶことができます。 ここでは、内部クロックをカウントするタイマーとして使用し、タイマーがカウントアップする仕様について説明します。サンプルで作成したプログラムは、タイマー0がカウントアップするとLEDを点滅するものです。
*注意*
汎用ピンをデジタルで使用する場合は、デジタルの入出力をTRISで設定するだけでなく、アナログ併用ピンかを調べ、併用ピンであれば、ANSELAxでデジタル設定にする必要があります。ANSELxは、デフォルトの設定が、アナログのため、デジタル入力で使用するには、必ず該当ピンをデジタルに設定(ANSx = 0)する必要があります。
 
				| Prescaler | 8bitモード | ||
|---|---|---|---|
| 31k | 4M | 48M | |
| なし | 33mS | 256μS | 21μS | 
| 1:4 | 132mS | 1024μS | 85μS | 
| 1:32 | 1 S | 8.2mS | 682μS | 
| 1:256 | 8.5 | 66mS | 5.5mS | 
| レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | 
|---|---|---|---|---|---|---|---|---|
| INTCON | GIE | PEIE | TMR0IE | INTE | IOCIE | TMR0IF | INTF | IOCIF | 
| OPTION_REG | nWPUEN | INTEDG | TMR0CS | TMR0SE | PSA | PS<2-0> | ||
| TMR0 | Holding Register for the 8-bit Timer0 Count | |||||||
| レジスタ | BIT | 名 | 説明 | 1 | 0 | 
|---|---|---|---|---|---|
| INTCON | 7 | GIE | 全インタラプトの使用許可 | 許可 | 否 | 
| 5 | TMR0IE | タイマー0 インタラプトを使用許可 | 許可 | 否 | |
| 2 | TMR0IF | タイマー0 オーバーフロー発生フラグ | 発生 | 否 | |
| OPTION_REG | 5 | TMR0CS | タイマー0 クロック選択 | 外部 | 内部 | 
| 4 | TMR0SE | タイマー0 クロックエッジ選択 | UP | DN | |
| 3 | PSA | タイマー0 プリスケラー使用 | 否 | 使用 | |
| 2 | PS2 | プリスケラー比率 111=1:256(既定), 110=1:128, 101=1:64, 100=1:32, 011=1:16, 010=1:8, 001=1:4, 000=1:2 | 1 | 0 | |
| 1 | PS1 | 1 | 0 | ||
| 0 | PS0 | 1 | 0 | 
PortC - RC2 に接続されたLEDが点灯するプログラムを作成しました。Timer0で内部クロック(4MHz)をカウントし、カウントオーバー(66mS間隔)でLEDが点滅する。
 
			 
			プログラム
//  File name: Timer0
//  Description: Timer0 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;      // 入出力設定
    OPTION_REG = 0b00000111;  // Timer 0 設定(66mSecごと)
                              // 内部クロックをカウント
                              // PS_1/256
    while(1){                 // 繰り返しループ (132mSecごと)
        while(! TMR0IF);      // タイムアップを待つ (66mSec)
        TMR0IF = 0;           // キャリーフラッグをクリア
        while(! TMR0IF);      // タイムアップを待つ (66mSec)
        TMR0IF = 0;           // キャリーフラッグをクリア
        LED = ! LED;          // LEDへの出力を反転
    }
}