找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6293|回复: 11
收起左侧

单片机外部中断执行完后,可以不返回到中断点吗?

  [复制链接]
ID:185015 发表于 2017-12-23 14:27 | 显示全部楼层 |阅读模式
在一个控制气囊循环充放气的单片机程序中,我用的是按键外部中断使程序退出循环,但目前情况是这样的:当气囊在循环时,按下执行外部中断的按钮,气袋停止循环,但隔2秒后期待又接着执行剩下的循环,完成剩下的循环后,才完全停止,想问一下大神这是什么原因?同时也想请教一下:在执行完外部中断后,可以不回到中断点,而是回到主函数的开头可以吗?怎样设置?
回复

使用道具 举报

ID:237442 发表于 2017-12-26 17:21 | 显示全部楼层
不管是内部还是外部中断执行完后都应该回到中断点,不回的话,你多中断几次堆栈都溢出了

你的这个问题看起来都不是中断的问题,猜你应该有一个控制循环次数的变量,在中断处理中把这个变量清掉应该就可以了。

个人认为按键这种操作中断中最好只打个标记,在主循环中查看标记去做中断处理

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:192235 发表于 2017-12-23 16:21 | 显示全部楼层
你可以去查一下   goto语句的用法
回复

使用道具 举报

ID:205526 发表于 2017-12-23 16:23 | 显示全部楼层
我觉得执行完中断后是不能回到主函数再开始运行,中断就是:执行中断函数然后再返回到中断前的位置!
回复

使用道具 举报

ID:185015 发表于 2017-12-25 11:02 | 显示全部楼层
军师祭酒 发表于 2017-12-23 16:21
你可以去查一下   goto语句的用法

标号和GOTO语句好像必须在一个函数内,但中断函数和主函数不是一个函数呀
回复

使用道具 举报

ID:266526 发表于 2017-12-25 14:52 | 显示全部楼层
你可以中断完后加条件判断或者用switch语句和break
回复

使用道具 举报

ID:220961 发表于 2017-12-25 16:08 | 显示全部楼层
可以设置一个标志位,判断是否执行了中断,再决定程序走向
回复

使用道具 举报

ID:266627 发表于 2017-12-25 17:00 | 显示全部楼层
同意我上一楼的说法,我也是通过设置标志位来完成的。
即使可以不返回上级程序,你的这个功能也完成了。但将来扩充功能也会困难。所以要用一种类似操作系统的方法来解决。
一个WHILE(1)主函数,里面有多个函数。比如函数1用来充气,函数2用来检测是否有按下或者释放,再一个函数3用来根据函数2设置标志位,最后一个函数用来产生时基,比如50ms中断一次,供以上三个函数使用用来计时。一个函数只管少量的,相对独立的事,这样增删功能比较简单

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:266649 发表于 2017-12-25 17:33 | 显示全部楼层
可以的  不回中断
回复

使用道具 举报

ID:97438 发表于 2017-12-26 10:28 | 显示全部楼层
编程思路问题。
回复

使用道具 举报

ID:185015 发表于 2017-12-27 14:29 | 显示全部楼层
arsenalcn 发表于 2017-12-26 17:21
不管是内部还是外部中断执行完后都应该回到中断点,不回的话,你多中断几次堆栈都溢出了

你的这个问题看 ...

没有设置循环次数的变量,是设置按键按住的时间超过一定值时,就开始循环,所以就设置了一个按键外部中断使循环能立刻停下来;这个外部中断可以使循环立刻停下来,但是停下来后好像又循环了一下才完全停下来(假设在循环程序执行了1/3时按外部中断键,循环立刻停顿一下,接着又把接下来的2/3剩下的循环程序执行完;)。
回复

使用道具 举报

ID:267766 发表于 2017-12-27 15:25 | 显示全部楼层
可以的 退出不就完了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表