avr单片机的中断函数是怎么执行的?

比如,一般的AVR单片机程序有中断函数,但是主程序里没有调用中断程序。那么中断程序只执行一次吗?还是怎么回事?尽量介绍的简单些,我是新手~... 比如,一般的AVR单片机程序有中断函数,但是主程序里没有调用中断程序。那么中断程序只执行一次吗?还是怎么回事?尽量介绍的简单些,我是新手~ 展开
 我来答
c3344c
推荐于2016-07-18 · TA获得超过2418个赞
知道小有建树答主
回答量:966
采纳率:57%
帮助的人:683万
展开全部
首先,中断程序是不被主程序调用的。所谓的中断顾名思义,就是打断正在执行的程序,将正在执行的程序暂时挂起。然后由硬件自动记录下程序被打断的位置(地址压栈),先去执行中断服务程序(就是你说的中断函数),等中断服务程序执行完后,回头再从被打断的程序处(地址出栈)继续上述正在执行的程序。

中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。

中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。

另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
齐霸王在江湖梦
推荐于2016-07-30 · TA获得超过3312个赞
知道小有建树答主
回答量:726
采纳率:75%
帮助的人:64.3万
展开全部
首先,中断程序是不被主程序调用的。所谓的中断顾名思义,就是打断正在执行的程序,将正在执行的程序暂时挂起。然后由硬件自动记录下程序被打断的位置(地址压栈),先去执行中断服务程序(就是你说的中断函数),等中断服务程序执行完后,回头再从被打断的程序处(地址出栈)继续上述正在执行的程序。

中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。

中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。

另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linnjing
2013-03-27 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:518万
展开全部
我们抛开书上的说法,打个比方来说这个事情
你可以把CPU看做一个人在做事情,如果它心无旁骛,事情就做的又好又快,如果随时需要分心去注意有没有事情发生,过一会儿看看门口有没有人(查询方式),那效率肯定要低一些。这时怎么办呢???我们关上门,不去管门口有没有人,专心做我们自己的事情,门口有人我们不管也不好,我们装个门铃,如果有人来那就让他按门铃好了(中断请求),CPU听到,才会停下手里的事情,去看是谁在按门铃,有什么事情要处理,处理完了,再回来继续工作。
各种单片机的中断处理过程都差不多,最多是有没有中断处理器的区别,就是门口要不要放个小秘给把门。没有小秘把门,那就是谁来都按门铃,有小秘,那就小秘帮着先看看,有事先找秘书,由秘书统一汇报。

以定时中断为例,主程序设置好定时器,配置好中断,就不需要再去管了。定时器的硬件会自动的工作,如果计数溢出,那么它会来汇报,注意是通过硬件向CPU汇报,不是向主程序汇报,CPU根据之前的配置会决定要不要处理,要怎么处理,通常是调用用户给出的中断函数,处理完成,CPU返回原来的工作。在整个中断过程中,是CPU受中断系统的控制自动的工作,主程序不会知道这一切曾经发生。

中断是一整套硬件上的处理机制,中断函数不是由主程序调用,可以说是由硬件触发,硬件调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beatorwin
2013-03-27 · TA获得超过332个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:119万
展开全部
当对应的中断触发源被触发后,若此时全局中断开始,则自动进入中断服务程序,当中断服务程序执行完毕,跳转到上一级程序。若同时中断的话,则按中断向量表上的优先级执行,AVR没有像51单片机那样的中断优先级,他是固定的。
追问
是不是说,程序运行的过程中,是会定时检查中断?比如,拿计数为例的话,那么程序运行的时候,是不是计数每加一次,就检查是否达到中断条件,如果没有的话继续重复?
但是main函数里没有调用中断啊!怎么会每次都进行中断检查呢?(如果理解有错请指正!)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友16daa76
2013-03-27
知道答主
回答量:9
采纳率:0%
帮助的人:3.7万
展开全部
看下中断有没有开,中断能执行就说明中断控制寄存器在某处开了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式