---
---
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への出力を反転 } }