---
---
12F1822には、3本のタイマーがあります。タイマー1は、16ビットのカウンターで、その入力は内部クロックか外部からの信号を選ぶことができます。 内部クロックは、以下の3種類から選ぶことが可能です。
今までのTimer1の機能が強化され、特に入力信号をOn/Off出来るゲート機能の強化が特徴です。
*注意*
T1Gピンは、APFCON の T1GSEL ビットを「1」にすることで、RA4からRA3に変更することができます。
| Prescalerl | T1OSC | Fosc | Fosc/4 | ||||
|---|---|---|---|---|---|---|---|
| 32k | 31k | 4M | 32M | 31k | 4M | 32M | |
| 1:1 | 2 Sec | 2.1 S | 16mS | 2.0mS | 8.4 S | 66mS | 8.2mS |
| 1:2 | 4 Sec | 4.2 S | 33mS | 4.1mS | 16.8 S | 131mS | 16mS |
| 1:4 | 8 Sec | 8.4 S | 66mS | 8.2mS | 33.6 S | 262mS | 33mS |
| 1:8 | 16 Sec | 16.8 S | 131mS | 16mS | 67.1 S | 524mS | 66mS |
| レジスタ | 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
// Timer1で内部クロック(4MHz)をカウントし、
// カウントオーバー(262mS間隔)でLEDが点滅する。
//
// 1 VDD 8 VSS
// 2 RA5 7 RA0
// 3 RA4 6 RA1
// 4 MCLR 5 RA2 LED
//
// Language: MPLABX XC8
// Target: PIC12F1822
#include <xc.h>
#define LED LATA2
#pragma config FOSC = INTOSC, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF
#pragma config CPD = OFF, BOREN = ON, CLKOUTEN = OFF, IESO = OFF, FCMEN = OFF
#pragma config WRT = OFF, PLLEN = OFF, STVREN = ON, BORV = LO, LVP = OFF
void main(void){
OSCCON = 0b01101010; // 内部クロック4Mhz
TRISA = 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への出力を反転
}
}