PIC18F14K50の基本動作から応用プログラムまでを学びます。

ホーム
16F18313
16F18325
16F18346
16F1619
Curiosity
---
---
    
12F1822
16F1455
16F1459
18F14K50
18F26J50
dsPIC
その他
タイマー1

18F26J50には、5本のタイマーがあります。タイマー1は、独自のクロック発信器を持つ16ビットタイマーです。タイマー1のクロック発信器に時計用水晶(クリスタル)を接続することで高精度のデジタルクロックが作成できます。さらに、今までのPICから、タイマーをON/OFFするGate機能が大幅に強化されています。外部からの入力、Timer0、Timer2からの信号でタイマーの動作をON/OFFすることが可能になりました。まず、内部クロックをカウントする16ビットタイマーとして使用し、タイマーがカウントアップするとインタラプトが発生する仕様について説明します。

*注意*
T1Gピンは、Peripheral Pin Select (PPS)機能でプログラムで、物理的に接続するピンを指定します。

*注意*
Timer1 の全16ビットを一括して読み出すために、下位バイトを読み出すタイミングで上位バイトの値を読み出しTMR1H(バッファ)に保存します。これによって、Timer1 の全16 ビットの値を同時に取得することができます。書き込みは、まず、TMR1H のバッファレジスタに上位バイトに書き込む値を保存した後で、TMR1L への書き込みが実行されると、TMR1H の内容によって上位バイトも更新されます。これによって、Timer1 の全16 ビットを同時に更新できますす。

レジスタ bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
TMR1L TMR1 Count の下位 8 bit
TMR1H TMR1 Count の上位 8 bit
RCON IPEN SBOREN RI TO PD POR BOR
INTCON GIE/GIEH PEIE/GIEL TMR0IE INTIE RABIE TMR0IF INT0IF RABIF
PIR1 - ADIF RCIF TXIF SSP1IF CCP1IF TMR2IF TMR1IF
PIE1 - ADIE RCIE TXIE SSP1IE CCP1IE TMR2IE TMR1IE
IPR1 ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP
T1CON TMR1CS1 TMR1CS0 T1CKPS1 T1CKPS0 T1OSCEN T1SYNC RD16 TMR1ON
T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/
T1DONE
T1GVAL T1GSS1 T1GSS0
TCLKCON     T1RUN       T3CCP2 T3CCP1
レジスタ BIT 説明 1 0
RCON 7 IPEN 2レベルのインタラプト優先度 使用
INTCON 7 GIEH 高優先度インタラプトを使用許可 許可
6 GIEL 低優先度インタラプトを使用許可 許可
PIR1 0 TMR1IF タイマー1 オーバーフロー発生フラグ 発生  
PIE1 0 TMR1IE タイマー1 インタラプトを使用許可 許可
IPR1 0 TMR1IP タイマー1 インタラプト優先度
T1CON 7 TMR1CS タイマー1 クロック選択   10 = T1OSCまたは T1CKI pin
             01 = FOSC   00 = FOSC/4
6 TMR1CS
5 T1CKPS1 プリスケラー分周比率
 11=1:8, 10=1:4, 01=1:2, 00=1:1
4 T1CKPS0
3 T1OSCEN タイマー1 入力およびT1OSC制御 (注1) ON OFF
2 T1SYNC タイマー1 外部信号の内部クロック同期 非同期 同期
1 RD16 タイマー1 16Bit読書きモード ON OFF
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/
T1DONE
シングル・パルスモードの状態 待機 終了
2 T1GVAL ゲートの状態を反映(Read Only)
1 T1GSS1 ゲートの信号源  00 = 外部信号ピン
            01 = Timer0   10 = Timer2
0 T1GSS0
TCLKCON 4 T1RUN タイマー1 クロック源 (Read Only) OSC
1 T3CCP2 ECCP信号源
10 = ECCP1 、ECCP2 ともにTimer3/Timer4
01 = ECCP1は Timer1/Timer2、 ECCP2はTimer3/ Timer4
00 = ECCP1、 ECCP2ともに Timer1 / Timer2
0 T3CCP1

クロック周波数とタイムアップ間隔

Prescaler 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

T1OSCEN と TMR1CS 関係

T1OSCEN TMR1CS<1:0>
10 0x
1 T1OSCに電源を供給し、
T1OSCからの信号をカウント
T1OSCに電源を供給
0 T1OSCをOFFにし、
T1CKIからの信号をカウント
T1OSCをOFF

タイマー1のプログラム例

PPortC - RC0 に接続されたLEDが点滅するプログラムを作成しました。 Timer1で内部クロック(4MHz)をカウントし、262mSecでカウントアップする毎にLEDを点滅します。

<回路図>

<プログラム>

//  File name: Timer1
//  Description: Timer1 example
//  Timer1で内部クロック(4MHz)をカウントし、
//  カウントオーバーでLEDを点滅させる。
//  Notes:  4MHz内部クロック
//        SW  RA5
//        LED RB0
//        LED RB1
//        LED RB2
//        LED RB3
//    Language: MPLAB xc8
//    Target: PIC18F26J50

#include <xc.h>
//
     #pragma config WDTEN = OFF, PLLDIV = 2, STVREN = ON, XINST = OFF
     #pragma config CPUDIV = OSC1, CP0 = OFF
     #pragma config OSC = INTOSC, T1DIG = OFF
     #pragma config LPT1OSC = OFF, FCMEN = OFF, IESO = OFF
     #pragma config WDTPS = 32768
     #pragma config DSWDTOSC = INTOSCREF, RTCOSC = T1OSCREF
     #pragma config DSBOREN = OFF, DSWDTEN = OFF, DSWDTPS = 8192
     #pragma config IOL1WAY = OFF, MSSP7B_EN = MSK7
     #pragma config WPFP = PAGE_1, WPEND = PAGE_0, WPCFG = OFF
     #pragma config WPDIS = OFF

void main(void){
    OSCCON = 0b01100010;       // 内部クロック4Mhz
    LATB = 0;                  // PortCのすべてのビットを「0」
    TRISB = 0b11110000;        // LEDの接続されているポートを出力に設定
	T1CON = 0b00100011;        // Timer1
	                           // FOSC/4 PS_1/4 OSC1_OFF SYNC_ON 6BIT_RW
	T1GCON = 0;                // ゲート機能を無効

    LATB = 0x03;                    // LED 2個を点灯
    while(1){                       // 繰り返しループ
        while(!PIR1bits.TMR1IF);    // Timer 1 のタイムアップを待つ
        PIR1bits.TMR1IF = 0;        // キャリーフラッグをクリア
        LATB ^= 0x0F;               // LED 4個の出力を反転
    }
}