Как настроить 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
}