Как настроить ISR для запуска каждую секунду - C Atmega328p

Я пишу код, который должен проверять вход датчика каждые 0,5 с. Я хочу использовать ISR, потому что я хочу, чтобы мой код выполнялся, пока не изменится вход датчика.

Как бы настроить этот ISR для выполнения каждые 0,5 с?

Спасибо:)

1 ответ

Решение

Я бы предложил использовать прерывание от таймера. Для примера иди сюда. 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
}
Другие вопросы по тегам