找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11574|回复: 9
收起左侧

单片机中断函数是如何运行的,和主函数有冲突吗?

[复制链接]
ID:232206 发表于 2017-9-12 23:35 来自手机 | 显示全部楼层 |阅读模式
中断函数是如何运行的,和主函数有冲突吗?
回复

使用道具 举报

ID:164602 发表于 2017-9-13 08:34 | 显示全部楼层
中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一,是我们学习单片机必须要掌握的。很多初学者被困在中断中,学了很久仍然不知道中断究竟是个什么东西,大家千万不要认为它有多难,其实只要掌握正确的学习方法,没有哪个知识点是学不会的。
为了能让大家更容易理解中断概念,我们先来举一个生活事例:你打开火,烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。
对于单片机来讲,中断是指CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应),转去处理事件B(中断服务);待CPU将事件I.,处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
再回来看前面讲的生活事例,与单片机中断结合分析,你的主任务是洗衣服,水开报警这是一个中断请求,这一时刻相当于断点处,你响应中断去关火,然后将开水灌入暖水瓶中,这一动作实际上就是处理中断程序,灌完开水后再回去继续洗衣服,相当于处理完中断程序后再返回主程序继续执行主程序。这里需要注意的是,水开是随时都有可能的,但是无论什么时候开,只要一开你将立即去处理它,处理完后再回来继续接着洗刚才那件衣服。单片机在执行程序时,中断也随时有可能发生,但无论何时发生,只要一旦发生,单片机将立即暂停当前程序,赶去处理中断程序,处理完中断程序后再返回刚才暂停处接着执行原来的程序。单片机在执行程序时其程序流程图。
                              
引起CPU中断的根源,称为中断源,中断源向CPU提出中断请求,CPU暂时中断原来的事务A,转去处理事件B,对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
中断的开启与关闭、设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的,在以前的学习中我们仅对单片机内部的特殊功能寄存器IO口寄存器设置过,从下节起我们将会设置单片机内部更多的特殊功能寄存器。

当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当儿个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。

中断理解.jpg
回复

使用道具 举报

ID:89515 发表于 2017-9-13 09:05 | 显示全部楼层
至于怎么运行,楼上已经解释清楚
回复

使用道具 举报

ID:193818 发表于 2017-9-13 09:05 | 显示全部楼层
中断就是你一件事没有做完中间来了一件立即要处理的事,你先处理完这件事,处理完了然后返回来处理之前的事,而且是从你中断的地方开始。其实就是压栈出栈。不可能影响你的主函数,除非你的代码有问题
回复

使用道具 举报

ID:89515 发表于 2017-9-13 10:15 | 显示全部楼层
mengzhixinheng 发表于 2017-9-13 09:05
至于怎么运行,楼上已经解释清楚

影响是有的,这要看你怎么去杜绝!中断了主程序的执行,不就是在浪费主程序执行时间嘛。只是如果中断函数执行时间短,中断级数不深,这个影响被忽略罢了。如果你有一个时序要求很高的通信程序,这时候你中断试试麻烦大了。如果中断函数臃肿,你的程序效率会降低很多。
回复

使用道具 举报

ID:72333 发表于 2017-9-13 13:55 | 显示全部楼层
中断函数是被单片机系统硬件自动执行的,与主函数没关系,中断函数类似于高级语言的回调函数
回复

使用道具 举报

ID:215712 发表于 2017-9-13 21:04 | 显示全部楼层
没有冲突,有外部中断,定时器中断,运行不同
回复

使用道具 举报

ID:232971 发表于 2017-9-13 22:05 | 显示全部楼层
中断函数不要太长 不然会影响主函数的一些循环 但一般的冲突不大
回复

使用道具 举报

ID:917140 发表于 2021-5-21 03:32 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-9-13 08:34
中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片 ...

解析的非常透彻,对初学者大有益处
回复

使用道具 举报

ID:517951 发表于 2021-5-21 09:15 | 显示全部楼层
通俗一点: 你正在写作业的时候, 你的同学来找你去打球, 你可能需要中断你的作业, 把作业现场保存好, 然后和你的同学打了半小时后回来, 在保存好的作业现场继续把作业完成.  

和主函数的冲突就是会占用主函数的执行时间周期, 中断处理函数的事务不能太长,要尽可能精悍.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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