0

アセンブリと AVR マイクロコントローラーを使用して、特定の周波数 (10 Hz など) で割り込みを処理するプログラムを作成したいと考えています。まず、スタックとタイマーを設定します。

.cseg

.org jmp restart;

.org 0x002E tjmp timer_fun


restart:
cli
ldi R16, HIGH(RAMEND)
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16
sei

ldi R17, 1<<CSOO
out TCCR0, R17
ldi R16, 1<<TOIE0
out TIMSK, R16

しかし、今、私はこの周波数を設定する方法がわかりませんか?

4

1 に答える 1

2

これは、トリガーされた割り込みの数をカウントすることで実行できます。タイマーの入力周波数に依存します(通常、CPU周波数と同じであると思います)。

入力周波数が 16000000 Hz だとします。

カウント 0 (0TCNT0に設定) から開始し、プリスケーラを 256 (TCCR0に設定1<<CS02) すると、16000000/256 == 62500 Hz でタイマー オーバーフローが発生します。

タイマー割り込みサービスルーチンは、次のようなことを行うことができます (ここでは C を使用していますが、アイデアはわかります)。

counter++;
if (counter == 6250) {
    // We should end up in here approximately 10 times/second
    counter = 0;
}
于 2013-05-24T08:43:48.887 に答える