行为异常的中断处理程序

时间:2019-08-10 15:28:00

标签: c arduino interrupt-handling

我正在使用所示的代码。我有一个连接到引脚14的蜂鸣器。“ Sound_Play()”功能(产生声音0.5秒钟)仅在循环中第二次遇到时才起作用。

void loop() { 
inside_loop=1;
TCCR1A=0;        //initialize Timer1 for 1sec duration
TCCR1B=0X0D;
OCR1A=15624;
TIMSK1=0X02;

Sound_Play();      //This does not seem to work

block1=1; block2=0;
while(timer1_value>0)
{digitalWrite(13,HIGH);}
block1=0; block2=1;

Sound_Play();        //This works

while(timer2_value>0)
{digitalWrite(13,LOW);}
timer1_value=time1_sec;
timer2_value=time2_sec;
}

ISR(TIMER1_COMPA_vect)
{ if (block1==1) {timer1_value--;}
else if (block2==1) {timer2_value--;}
}

void Sound_Play(){ //activate timer2 for producing sound for 0.5 secs
TCCR2B=0x07;
TCCR2A=0x02;
OCR2A=35;
TIMSK2=0x02;
counting=110;
}

ISR(TIMER2_COMPA_vect)
{ if(inside_loop)
{
if(counting>0){
digitalWrite(14,HIGH);
counting = counting-1;
}
else{
TIMSK2=0x00;     //deactivate timer2 on completing the time
digitalWrite(14,0);
}}

我尝试在循环内部使用一次函数。仅在第二次遇到时,它仍然使蜂鸣器响起。我认为中断的优先级一定不会造成这种情况。 请问有人可以解释为什么每次遇到此功能都不会发出声音吗? 谢谢! 布冯内斯

0 个答案:

没有答案