C语言定时中断程序
我要用51单片机C语言做报警系统,用的是keil。系统实现功能:ABCD四种警情,每种警情发生时点亮对应的灯(已解决),只要有一种警情发生就开启蜂鸣器(无源蜂鸣器,需要方...
我要用51单片机C语言做报警系统,用的是keil。系统实现功能:ABCD四种警情,每种警情发生时点亮对应的灯(已解决),只要有一种警情发生就开启蜂鸣器(无源蜂鸣器,需要方波驱动,驱动程序已用高低电平延时编好),一个撤警按钮可以随时撤销所有警情(关闭蜂鸣器和所有报警灯,点亮撤警灯)。现在的问题是:一旦蜂鸣器启动就不能再对其他警情或撤警键做出反应(因为蜂鸣器子程序中有while(1)导致程序出不来)。现在需要中断定时程序来控制蜂鸣器,当中断检测到撤警标志位时关闭蜂鸣器。
展开
3个回答
展开全部
“中有while(1)导致程序出不来”
程序出来就能对其他警情或撤警键做出反应了么?
既然如此,为什么不在while(1)中,而非要在中断中检测“撤警标志位”呢?
如果只能在中断中检测“撤警标志位”,可以在检测时设一全局变量,用作通信——所有各
子程序之间的通信媒介——,当“撤警标志位”是打开的情况下,全局变量设置为某值。
中断处理完毕,while(1)继续,while(1)首先读取此全局变量,决定是应该继续蜂鸣呢,还是
break或goto跳出循环。
程序出来就能对其他警情或撤警键做出反应了么?
既然如此,为什么不在while(1)中,而非要在中断中检测“撤警标志位”呢?
如果只能在中断中检测“撤警标志位”,可以在检测时设一全局变量,用作通信——所有各
子程序之间的通信媒介——,当“撤警标志位”是打开的情况下,全局变量设置为某值。
中断处理完毕,while(1)继续,while(1)首先读取此全局变量,决定是应该继续蜂鸣呢,还是
break或goto跳出循环。
追问
你可以帮我具体指导一下程序吗?1216251016 如果修改成功,再加财富值,谢谢
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
蜂鸣器程序这样做不好,不要用延时,而是将其放到中断程序里。(一次中断就相当于一个延时)。
其实,键盘扫描最好的方式也是放到中断里,这样就去掉了很多不必要的延时。(网上有现成代码)
延时子程序对于系统反应速度或者用户的体验,都会造成负面影响。
其实,键盘扫描最好的方式也是放到中断里,这样就去掉了很多不必要的延时。(网上有现成代码)
延时子程序对于系统反应速度或者用户的体验,都会造成负面影响。
追问
我同学也建议我用定时中断做蜂鸣器,但是比较麻烦,我不会写,查到的也没看懂。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询