1

私はPIC18F87J11デバイスを持っており、以下を作成することになっています:
1) 100ms ごとにトリガーされる優先度の高い ISR
2) 10ms ごとにトリガーされる優先度の低い ISR

プリスケーラーの構成に関する基本的な知識があります。たとえば、Timer0 の場合です。

movlw b'00000010'
movwf T0CON

マニュアル ページを読むと、Timer0 を 16 ビット カウンタ、プリスケーラ 1:8 に設定する必要があります (デバイスのマニュアル ページ 179)。問題は、100 ミリ秒間隔が必要な場合に正しいプリスケーラー設定を決定する方法がわからないことです。どんな助けでも感謝します。

編集:
さて、今、私は自分が何をしているのかについて、思っていたよりもずっと少ない考えを持っていることに気付きました. マニュアルに関連情報が見つかりません(そして、そこにあると確信しています)。Timer0を 100ms に、Timer1を 10msに設定する必要があります。

4

1 に答える 1

1

ここに、TMR0 の ISR 優先度の高い開始ルーチンがあります。

MCPU 開始コードの最初で、定義する必要があります...

;Init TMR0 as 8 bit timer, overflow every 1024 CPU cycles if TMRxPrescaler4 is set
;{
TMRxPrescaler2      equ 0
TMRxPrescaler4      equ 1
TMRxPrescaler8      equ 2
TMRxPrescaler16     equ 3
TMRxPrescaler32     equ 4
TMRxPrescaler64     equ 5
TMRxPrescaler128    equ 6
TMRxPrescaler256    equ 7

    movlw   (1<<TMR0ON) + (1<<T08BIT) + TMRxPrescaler4
    movwf   T0CON
    bsf INTCON, TMR0IE       ;enable TMR0 overflow interrupt 
;};

MCPU の開始後、割り込みをオンにすることを忘れないでください...

    bsf     INTCON, GIE

ISRルーチン:

ISR
    bcf INTCON, TMR0IF              ;demask TMR0 overflow interrupt
;your ISR code
    retfie  1

ISR rutune では、TMR0 オーバーフローのカウント数は、CPU クロックが 10MHz の場合、1 秒間に 10000000 / 4 / 1024 = 2441.4 オーバーフローします。

両方のイベントを処理する ISR ルーチンを 1 つだけ使用することをお勧めします。

于 2011-11-21T12:24:02.257 に答える