Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ISR设置为每秒运行-C Atmega328p_C_Timer_Atmega_Atmel_Isr - Fatal编程技术网

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

如何将ISR设置为每秒运行-C Atmega328p,c,timer,atmega,atmel,isr,C,Timer,Atmega,Atmel,Isr,我正在写一个代码,需要每0.5秒检查一次传感器的输入。我希望使用ISR,因为我希望我的代码能够一直执行,直到传感器的输入发生变化 如何设置此ISR以每0.5秒执行一次 谢谢:)我建议使用定时器中断。举个例子 我还没有亲自测试过它,但这里有一段关于它的代码 #include #include int main (void) { DDRB |= (1 << 0); // Set LED as output TCCR1B |= (1 << WGM12); /

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

如何设置此ISR以每0.5秒执行一次


谢谢:)

我建议使用定时器中断。举个例子

我还没有亲自测试过它,但这里有一段关于它的代码

#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
}
#包括
#包括
内部主(空)
{

DDRB |=(1我建议使用定时器中断。例如,点击这里

我还没有亲自测试过它,但这里有一段关于它的代码

#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
}
#包括
#包括
内部主(空)
{

DDRB |=(1)这是数据表^^^^查阅数据表和/或用户手册。若要通知您的“代码”,请设置一些您必须轮询的标志,或者,如果您有操作系统,请发送信号灯。这是数据表^^^^^查阅数据表和/或用户手册。若要通知您的“代码”,请设置一些您必须轮询的标志,或者,如果您有操作系统,请发送信号灯。是否我必须定义TIMER1\u COMPA\u vect?老实说,我没有读过这篇文章,但是我会假设TIMER1\u COMPA\u vect要么在其他文件中设置,要么已经在该文件中定义为TIMSK上CTC中断的中断。通常,这些程序的工作方式需要以某种方式通知系统,当输入时调用什么函数中断被触发(ISR)。在某些情况下,第二个文件保存整个中断表。在另一些情况下,需要进行某种设置中断函数调用。我建议阅读详细的文章以了解更多信息。弄明白了。非常感谢!很抱歉,这是一个令人困惑的话题!无忧中断可能是最有价值的概念之一nd.如果你知道PWM是什么,你会明白它们是如何建立在定时器中断之上的。不管怎样,如果你觉得我在这里没有提到什么,请在下面的评论中列出它们,以便其他人可以找到答案。啊,数据表澄清:“OCR1A定义计数器的最高值。”计数器从0开始,而不是从1开始,因此必须从所需的频率中减去1。我非常喜欢在代码中以注释的形式记录这些细节,因为它们是模糊的事实,在数据表中很难找到。遗憾的是,大多数教程没有这样做。我必须定义TIMER1\u COMPA\u vect吗?老实说,我没有读过这篇文章,但是我假设TIMER1\u COMPA\u vect设置在其他文件中,或已在该文件中定义为TIMSK上CTC中断的中断。通常,这些程序的工作方式需要以某种方式通知系统在触发中断时调用什么函数(ISR)。在某些情况下,第二个文件保存整个中断表。在另一些情况下,需要进行某种设置中断函数调用。我建议阅读详细的文章以了解更多信息。弄明白了。非常感谢!很抱歉,这是一个令人困惑的话题!无忧中断可能是最有价值的概念之一nd.如果你知道PWM是什么,你会明白它们是如何建立在定时器中断之上的。不管怎样,如果你觉得我在这里没有提到什么,请在下面的评论中列出它们,以便其他人可以找到答案。啊,数据表澄清:“OCR1A定义计数器的最高值。”计数器从0开始,而不是从1开始,因此必须从所需的频率中减去1。我非常喜欢在代码中以注释的形式记录这些细节,因为它们是模糊的事实,在数据表中很难找到。可惜大多数教程没有这样做。