発生した割り込みの数をどのように数えることができますか?

私は33ミリ秒ごとにオフになるタイマー割り込みをプログラムしようとしています。私は20MHzのクロックを持っているATtiny85でこれをやっています。私が設定できるプリスケーラの最大値は32なので、1回の割り込みが可能な限り最長の時間は408マイクロ秒です。

33ミリ秒に達する私の計画は、割り込みを81回実行するだけで、33ミリ秒の目標を得ることができます。しかし、割り込みが何回起こったのかを実際にどのように数えることができるかという手掛かりはありません。誰でもここでそれを行う方法を知っているか、何がうまくいくのかについて何か考えがありますか?

0

1 答え

はい、ISRステートメントの中に小切手を入れてください。

ISR(TIMER0_OVF_vect)
{
  static uint8_t postscale = 0;
  if (++postscale == 81) 
  {
    postscale = 0;
    do_stuff();
  }
  else
  {
    go_to_sleep();
  }
}

割込みが終わったら、いつでもISRメソッドに入る必要があります。そのif文を追加して、静的変数を使用して(その値を保持するようにして)、正しい数のループを作成したかどうかを確認してください。

2
追加された
else return; - 私はお勧めします。私はISRの中で寝ることはしません。
追加された 著者 Nick Gammon,
何もない。 return は単独でISRのようにvoidを返す関数で使用されます。実際には、あなたはelseとreturnを全く省略することができます。
追加された 著者 Nick Gammon,
それは何を返すだろうか?
追加された 著者 Gary,