2

タイマーについてよく理解していませんが、16 ビット モードで 1:64 のプリスケーラーを使用するように timer0 を変更しようとしていますか? マイクロチップ社からタイマー コードを入手しましたが、プリスケーラーなしで 8 ビット モードを使用しています。ファイルのダウンロード

これは、プリスケーラーを処理する必要があると思われるコードの一部です。

TMR_CON = 0b00000000 | CLOCK_DIVIDER_SETTING;
TMR_IP = 1;
TMR_IF = 0;
TMR_IE = 1;
TMR_ON = 1;

これは、プリスケーラに関するPIC18F87J11 データシートからの情報です。

T0PS2:T0PS0: Timer0 Prescaler Select bits   
111 = 1:256 Prescale value
110 = 1:128 Prescale value
101 = 1:64   Prescale value
100 = 1:32   Prescale value
011 = 1:16   Prescale value
010 = 1:8     Prescale value
001 = 1:4     Prescale value
000 = 1:2     Prescale value

1:64 プリスカラーを使用するには、コードを次のように変更する必要があると思いますが、正しいですか?

TMR_CON = 0b00000101 | CLOCK_DIVIDER_SETTING;
TMR_IP = 1;
TMR_IF = 0;
TMR_IE = 1;
TMR_ON = 1;

では、8ビットモードから16ビットモードに変更する方法を教えてください。私が言ったように、私は初心者なので、理解できるレベルで説明してください。

事前に感謝します!

4

1 に答える 1

0

マイクロチップのデータシートから:

T0CON: TIMER0 CONTROL REGISTER   

bit 7 TMR0ON: Timer0 On/Off Control bit
  1 = Enables Timer0
  0 = Stops Timer0
bit 6 T08BIT: Timer0 8-Bit/16-Bit Control bit
  1 = Timer0 is configured as an 8-bit timer/counter
  0 = Timer0 is configured as a 16-bit timer/counter
bit 5 T0CS: Timer0 Clock Source Select bit
  1 = Transition on T0CKI pin input edge
  0 = Internal clock (FOSC/4)
bit 4 T0SE: Timer0 Source Edge Select bit
  1 = Increments on high-to-low transition on T0CKI pin
  0 = Increments on low-to-high transition on T0CKI pin
bit 3 PSA: Timer0 Prescaler Assignment bit
  1 = TImer0 prescaler is not assigned; Timer0 clock input bypasses prescaler
  0 = Timer0 prescaler is assigned; Timer0 clock input comes from prescaler output
bit 2-0 T0PS<2:0>: Timer0 Prescaler Select bits
  111 = 1:256 Prescale value
  110 = 1:128 Prescale value
  101 = 1:64 Prescale value
  100 = 1:32 Prescale value
  011 = 1:16 Prescale value
  010 = 1:8 Prescale value
  001 = 1:4 Prescale value
  000 = 1:2 Prescale value
  1. 16 ビットモードを選択するには、T08BIT ビットをクリアします。
  2. 内部クロック (FOSC/4) を Timer0/Prescaler 入力として使用しない場合は、T0CS ビットをクリアします。
  3. プリスケーラを選択するには、PSA ビットをクリアします。
  4. プリスケーラ レートを選択するには、T0PS<2:0> を設定します。
  5. TMR0ON を 1 に設定して、timer0 を有効にします。

これは等しい:

T0CON =b'10000nnn' //where nnn is Prescaler value

Timer0 オーバーフローで割り込みが必要な場合は、Timer0 割り込みビット (GIE/GIEH、PEIE/GIEL、TMR0IE、TMR0IF) も有効にします。

于 2013-07-12T08:47:02.843 に答える