目次PIC入門873ハード

PIC16F873のタイマー
PIC16F873には3種類のタイマーがあります。それぞれの仕様について以下に説明します。

タイマー0
    タイマー0の仕様はPIC16F84Aと同様です。以下のような機能があります。
8ビットタイマーカウンターTMR0(カウントアップタイマーで255までカウント可)
カウンターは読み書き可能
8ビットプログラマブルプリスケーラが使用可能
(ウォッチドッグタイマーと共用でいずれかに使用可)
内部クロック/外部クロックが選択可能
カウンタオーバーフロー(FFh→00h)で割り込み発生
外部クロックのカウントエッジ(立ち上がりか立ち下がりか)が選択可能




タイマー1
    タイマー1は16ビットのカウントエリア(TMR1H,TMR1L)を持っているタイマーです。実際には8ビットのカウンターを2つ使っています。また、独自のプリスケーラを持っており、1,2,4,8の4段階の設定が可能です。
    TMR1IEレジスタのPIEビットを1にセットすることによりカウントオーバーフロー割り込みが有効になり、カウンターがFFFFhから0000hになったときにTMR1IFにオーバーフロー表示がされ、割り込みが発生します。

    タイマー1はタイマーモードとしての使い方とカウンターモードとしての使い方があります。
    モードの切り替えはT1CONレジスタのTMR1CSビットにより指定します。TMR1CSビットが0の場合はタイマーとして使用し、1の場合はカウンターとしての使用になります。

    タイマーモード
    タイマーモードの場合にはカウンターは内部クロック信号(FOSC/4)によりカウントアップされます。
    タイマー1はT1CONレジスタのTMR1ONビットにより動作/停止を制御することができます。また、タイマー1は内部リセットが可能です。このリセットはCCPにより制御することができます。

    タイマー1専用の発振器を使う場合にはT1CONレジスタのT1OSCENビットを1にします。そして水晶などの発振器をピン11およびピン12に接続します。発振周波数は200KHzまで可能です。これらのピンはRC0およびRC1の入出力ピンを兼ねていますが、入出力ピンとしての機能は無効になり、TRISCレジスタの設定も無効になります。

    カウンターモード
    カウンターモードの場合には外部クロックの立ち上がりによりカウントアップされます。
    T1CONレジスタのT1OSCENビットが0の場合にはT1CKI(pin11)に入力される信号の立ち上がりでカウントアップされます。T1OSCENビットが1の場合にはT1OSI(pin12)に入力される信号の立ち上がりでカウントアップされます。
    細かなことですが、カウンターモードに設定した直後ではT1CKI(pin11)が一度立ち下がる必要があります。Lレベルからスタートした場合、最初の立ち上がりはカウントされません。
    T1CONレジスタのT1SYNCビットが0の場合、外部入力信号と内部信号の同期が行われます。同期動作はプリスケーラの動作で行われ、プリスケーラを出た信号は内部信号と同期しています。

    CCP(Capture/Compare/PWM)機能のキャプチャおよびコンペアの動作ではタイマー1を使用します。
    同期モードでない場合にはキャプチャーまたはコンペア動作でカウンターを使用することはできません。
    CCPの動作についてはPIC16F873のCCP機能を参照して下さい。




タイマー2
    タイマー2は8ビットのカウントエリア(TMR2)と周期レジスタ(PR2)を持っているタイマーです。タイマー2は独自のプリスケーラとポストスケーラというカウンタを持っています。プリスケーラとしては1,4,16の3段階の制御が可能であり、ポストスケーラは1〜16までの16段階の制御が可能です。

    タイマー2がカウントアップされ、周期レジスタと同じになると次のカウント時に00hになります。ですから、タイマー2は0から周期レジスタに設定された値までを繰り返しカウントすることになります。周期レジスタの初期値(電源投入直後)はFFhです。カウンターと周期レジスタが一致状態はポストスケーラに入力され、ポストスケーラの設定値により割り込みが発生します。ポストスケーラ値として5を設定した場合にはカウンタと周期レジスタの一致が5回発生した時点でPIR1レジスタのTMR2IFビットに1が立てられ、割り込みが発生します。タイマー2はT2CONレジスタのTMR2ONビットにより動作/停止を制御することができます。

    タイマー2の主な使い方はCCPでのPWM機能です。連続パルスの周期を制御するために使用されます。
    CCPの動作についてはPIC16F873のCCP機能を参照して下さい。