如何设置ISR每秒运行 - C Atmega328p

时间:2015-12-10 20:06:05

标签: c timer atmega atmel isr

我编写的代码需要每0.5秒检查一次传感器的输入。我想使用ISR,因为我希望我的代码能够执行,直到传感器的输入发生变化。

如何将此ISR设置为每0.5秒执行一次?

谢谢:)

1 个答案:

答案 0 :(得分:0)

我建议使用定时器中断。举个例子去这里。 http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-timers?page=all

我自己还没有测试过,但这里有一段代码。

#include 
#include 

int main (void)
{
   DDRB |= (1 << 0); // Set LED as output

   TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode

   TIMSK |= (1 << OCIE1A); // Enable CTC interrupt

   sei(); //  Enable global interrupts

   OCR1A   = 15624; // Set CTC compare value to 1Hz at 1MHz AVR clock, with a prescaler of 64

   TCCR1B |= ((1 << CS10) | (1 << CS11)); // Start timer at Fcpu/64

   for (;;)
   {

   }
}

ISR(TIMER1_COMPA_vect)
{
   PORTB ^= (1 << 0); // Toggle the LED
}