单片机问题,帮我一下,谢谢!
我看很多程序都是主程序进入while(1),就死在while(1)里了,然后等待外中断。那么现在的问题是我想让它进入外中断完事后,跳过while(1),执行下边的程序,该...
我看很多程序都是主程序进入while(1),就死在while(1)里了,然后等待外中断。那么现在的问题是我想让它进入外中断完事后,跳过while(1),执行下边的程序,该怎么办?
while里边用break吗?不知道好使不好使,还有标志位我看是硬件自动清零,查询标志应该不能用吧,那该怎么办呢? 展开
while里边用break吗?不知道好使不好使,还有标志位我看是硬件自动清零,查询标志应该不能用吧,那该怎么办呢? 展开
展开全部
普通的前后台程序包括两部分:
1.前台程序
前台程序最终必须运行至一个while(1)里进行死循环的,否则你的程序指针会一直往下走,直至程序跑飞,导致复位。你可以用break跳出这个死循环,但要保证必须能进入下一个死循环。通常情况下,主循环里通常执行对时序不太敏感的功能。
2.后台程序
也就是中断服务程序,执行的是对时序或事件发生比较敏感的功能,以实现及时性。
你如果想从while里根据条件跳出,可以有以下写法
a.
while(条件不满足)
{
}
b.
while(1)
{
if(条件满足)
{
break;
}
}
通常情况下,标志位是不会自动清零的,有一些中断标志位可能会在进入中断服务程序后自动清零,这种情况你可以通过在中断服务程序内修改某个全局变量的值来实现条件的判断。
1.前台程序
前台程序最终必须运行至一个while(1)里进行死循环的,否则你的程序指针会一直往下走,直至程序跑飞,导致复位。你可以用break跳出这个死循环,但要保证必须能进入下一个死循环。通常情况下,主循环里通常执行对时序不太敏感的功能。
2.后台程序
也就是中断服务程序,执行的是对时序或事件发生比较敏感的功能,以实现及时性。
你如果想从while里根据条件跳出,可以有以下写法
a.
while(条件不满足)
{
}
b.
while(1)
{
if(条件满足)
{
break;
}
}
通常情况下,标志位是不会自动清零的,有一些中断标志位可能会在进入中断服务程序后自动清零,这种情况你可以通过在中断服务程序内修改某个全局变量的值来实现条件的判断。
展开全部
可以在中断函数里定义一个变量标志flag。主程序里查询这个变量有没有赋值就知道有没有中断触发了。可以用这个语句等待中断然后跳出while(!flag);
追问
非常感谢!还有,我的另一个主要问题是如果中断执行完成后,接着成功的跳出while循环了,程序继续向下执行,那当再一次外部中断时,怎么办,还要用到while循环吗?即:是不是有while循环,就可以进行多次中断,而跳出while循环后就不能再中断啦?
举个例子:
void main(){
while(1){}//中断完成后顺利跳出while循环
int a;
int b;//如果程序运行到此处了,发生中断,此时应该怎么办?
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询