---
---
18F14K50には、4本のタイマーがあります。タイマー3は、タイマー1とほぼ同様な構成を持つ16ビットタイマーで、 タイマー3のクロック発信器からの出力、外部入力、システムクロックをカウントする16ビットタイマー・カウンタとして使用することができます。サンプルで作成したプログラムは、タイマー3でシステムクロックをカウントしLEDを点滅するこぐ単純なプログラムです。
*注意*
Timer3 の全16ビットを一括して読み出すために、下位バイトを読み出すタイミングで上位バイトの値を読み出しTMR3H(バッファ)に保存します。これによって、Timer3 の全16 ビットの値を同時に取得することができます。書き込みは、まず、TMR3H のバッファレジスタに上位バイトに書き込む値を保存した後で、TMR3L への書き込みが実行されると、TMR3H の内容によって上位バイトも更新されます。これによって、Timer3 の全16 ビットを同時に更新できます。
レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
TMR3L | TMR3 Count の下位 8 bit | |||||||
TMR3H | TMR3 Count の上位 8 bit | |||||||
RCON | IPEN | SBOREN | — | RI | TO | PD | POR | BOR |
INTCON | GIE/GIEH | PEIE/GIEL | TMR0IE | INTIE | RABIE | TMR0IF | INT0IF | RABIF |
PIR2 | OSCFIF | C1IF | C2IF | EEIF | BCLIF | USBIF | TMR3IF | CCP2IF |
PIE2 | OSCFIE | C1IE | C2IE | EEIE | BCLIE | USBIE | TMR3IE | CCP2IE |
IPR2 | OSCFIP | C1IP | C2IP | EEIP | BCLIP | USBIP | TMR3IP | CCP2IP |
T3CON | RD16 | — | T3CKPS1 | T3CKPS0 | T3CCP1 | nT3SYNC | TMR3CS | TMR3ON |
レジスタ | BIT | 名 | 説明 | 1 | 0 |
---|---|---|---|---|---|
RCON | 7 | IPEN | 2レベルのインタラプト優先度 | 使用 | 不 |
INTCON | 7 | GIEH | 高優先度インタラプトを使用許可 | 許可 | 不 |
6 | GIEL | 低優先度インタラプトを使用許可 | 許可 | 不 | |
PIR2 | 1 | TMR3IF | タイマー3 オーバーフロー発生フラグ | 発生 | |
PIE2 | 1 | TMR3IE | タイマー3 インタラプトを使用許可 | 許可 | 不 |
IPR2 | 1 | TMR3IP | タイマー3 インタラプト優先度 | 高 | 低 |
T3CON | 7 | RD16 | タイマー3 16Bit読書きモード | ON | OFF |
6 | - | ||||
5 | T3CKPS1 | プリスケラー分周比率 11=1:8, 10=1:4, 01=1:2, 00=1:1 |
|||
4 | T3CKPS0 | ||||
3 | T3CCP1 | CCP1の信号減選択 | Timer3 | Timer1 | |
2 | nT3SYNC | タイマー3 外部信号の内部クロック同期 | 非同期 | 同期 | |
1 | TMR3CS | タイマー3 クロック選択 | 外部 | 内部 | |
0 | TMR3ON | タイマー3 ON/OFF | ON | OFF |
Prescalerl | T1OSC | Fosc/4 | ||
---|---|---|---|---|
32.768k | 31k | 4M | 48M | |
1:1 | 2 Sec | 8.4 S | 66mS | 5.5mS |
1:2 | 4 Sec | 16.8 S | 131mS | 10.9mS |
1:4 | 8 Sec | 33.6 S | 262mS | 21.8mS |
1:8 | 16 Sec | 67.1 S | 524mS | 43.7mS |
クロック周波数とタイムアップ間隔
PPortC - RC0 に接続されたLEDが点滅するプログラムを作成しました。 Timer1で内部クロック(4MHz)をカウントし、262mSecでカウントアップする毎にLEDを点滅します。
<回路図>
<プログラム>
// File name: Timer1 // Description: Timer1 example // Timer1で内部クロック(4MHz)をカウントし、 // カウントオーバーでLEDを点滅させる。 // Notes: 4MHz内部クロック // LED RC0 // Language: MPLAB XC8 // Target: PIC18F14K50 #include <xc.h> #define LED LATCbits.LATC0 #pragma config FOSC = IRC // 内部クロック #pragma config USBDIV = OFF, CPUDIV = NOCLKDIV #pragma config IESO = OFF, FCMEN = OFF, PLLEN = ON #pragma config BORV = 30, BOREN = OFF, PWRTEN = OFF #pragma config WDTPS = 32768, WDTEN = OFF #pragma config MCLRE = OFF, HFOFST = OFF, XINST = OFF #pragma config BBSIZ = OFF, LVP = OFF, STVREN = ON #pragma config CP1 = OFF, CP0 = OFF, CPD = OFF, CPB = OFF #pragma config WRT1 = OFF, WRT0 = OFF, WRTB = OFF, WRTC = OFF #pragma config EBTR1 = OFF, EBTR0 = OFF, EBTRB = OFF void main(void){ OSCCON = 0b01010010; // 内部クロック4Mhz TRISC = 0b11111110; // 入出力設定 T1CON = 0b10100001; // Timer 1 設定(262mSecごと) // 16BITRW モード PS_1/4 // 内部クロックをカウント while(1){ // 繰り返しループ while(! PIR1bits.TMR1IF); // Timer 1 のタイムアップを待つ PIR1bits.TMR1IF = 0; // Timer 1 からのキャリーフラッグをクリア LED = ! LED; // LEDへの出力を反転 } }