2015-12-10 6 views
0

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

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

Спасибо :)

+1

http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf это техническое описание – heyjaynell

+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 
} 
+0

Должен ли я определять TIMER1_COMPA_vect? – heyjaynell

+0

Честно говоря, я не читал статью, однако я бы предположил, что TIMER1_COMPA_vect либо установлен в каком-либо другом файле, либо уже определен в этом файле в качестве прерывания для прерывания CTC на TIMSK. Как правило, как эти программы работают, вам необходимо каким-то образом информировать систему о том, какую функцию вызывать при прерывании (ISR). В некоторых случаях второй файл содержит всю таблицу прерываний. В других случаях существует некоторая функция вызова функции прерывания. Я предлагаю прочитать подробную статью для получения дополнительной информации. – arduic

+0

Выяснил это. Спасибо! Извините за новинку! – heyjaynell