avr单片机的中断函数是怎么执行的?
比如,一般的AVR单片机程序有中断函数,但是主程序里没有调用中断程序。那么中断程序只执行一次吗?还是怎么回事?尽量介绍的简单些,我是新手~...
比如,一般的AVR单片机程序有中断函数,但是主程序里没有调用中断程序。那么中断程序只执行一次吗?还是怎么回事?尽量介绍的简单些,我是新手~
展开
5个回答
展开全部
首先,中断程序是不被主程序调用的。所谓的中断顾名思义,就是打断正在执行的程序,将正在执行的程序暂时挂起。然后由硬件自动记录下程序被打断的位置(地址压栈),先去执行中断服务程序(就是你说的中断函数),等中断服务程序执行完后,回头再从被打断的程序处(地址出栈)继续上述正在执行的程序。
中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。
中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。
另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。
中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。
另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
展开全部
首先,中断程序是不被主程序调用的。所谓的中断顾名思义,就是打断正在执行的程序,将正在执行的程序暂时挂起。然后由硬件自动记录下程序被打断的位置(地址压栈),先去执行中断服务程序(就是你说的中断函数),等中断服务程序执行完后,回头再从被打断的程序处(地址出栈)继续上述正在执行的程序。
中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。
中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。
另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
中断函数的执行是由硬件决定的,每一个中断都有一个硬件入口地址,单片机C语言用“中断号”来对应这些入口地址,一旦发生中断,程序会自动转向这些入口执行程序(中断函数)。
中断程序的执行可以一次,也可以无数次,只要程序中不关闭中断,那么中断就有可能一而再的发生,中断函数也一而再的执行。
另外,不仅AVR单片机的中断时如此,所有单片机,包括PC机的中断原理都是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我们抛开书上的说法,打个比方来说这个事情
你可以把CPU看做一个人在做事情,如果它心无旁骛,事情就做的又好又快,如果随时需要分心去注意有没有事情发生,过一会儿看看门口有没有人(查询方式),那效率肯定要低一些。这时怎么办呢???我们关上门,不去管门口有没有人,专心做我们自己的事情,门口有人我们不管也不好,我们装个门铃,如果有人来那就让他按门铃好了(中断请求),CPU听到,才会停下手里的事情,去看是谁在按门铃,有什么事情要处理,处理完了,再回来继续工作。
各种单片机的中断处理过程都差不多,最多是有没有中断处理器的区别,就是门口要不要放个小秘给把门。没有小秘把门,那就是谁来都按门铃,有小秘,那就小秘帮着先看看,有事先找秘书,由秘书统一汇报。
以定时中断为例,主程序设置好定时器,配置好中断,就不需要再去管了。定时器的硬件会自动的工作,如果计数溢出,那么它会来汇报,注意是通过硬件向CPU汇报,不是向主程序汇报,CPU根据之前的配置会决定要不要处理,要怎么处理,通常是调用用户给出的中断函数,处理完成,CPU返回原来的工作。在整个中断过程中,是CPU受中断系统的控制自动的工作,主程序不会知道这一切曾经发生。
中断是一整套硬件上的处理机制,中断函数不是由主程序调用,可以说是由硬件触发,硬件调用。
你可以把CPU看做一个人在做事情,如果它心无旁骛,事情就做的又好又快,如果随时需要分心去注意有没有事情发生,过一会儿看看门口有没有人(查询方式),那效率肯定要低一些。这时怎么办呢???我们关上门,不去管门口有没有人,专心做我们自己的事情,门口有人我们不管也不好,我们装个门铃,如果有人来那就让他按门铃好了(中断请求),CPU听到,才会停下手里的事情,去看是谁在按门铃,有什么事情要处理,处理完了,再回来继续工作。
各种单片机的中断处理过程都差不多,最多是有没有中断处理器的区别,就是门口要不要放个小秘给把门。没有小秘把门,那就是谁来都按门铃,有小秘,那就小秘帮着先看看,有事先找秘书,由秘书统一汇报。
以定时中断为例,主程序设置好定时器,配置好中断,就不需要再去管了。定时器的硬件会自动的工作,如果计数溢出,那么它会来汇报,注意是通过硬件向CPU汇报,不是向主程序汇报,CPU根据之前的配置会决定要不要处理,要怎么处理,通常是调用用户给出的中断函数,处理完成,CPU返回原来的工作。在整个中断过程中,是CPU受中断系统的控制自动的工作,主程序不会知道这一切曾经发生。
中断是一整套硬件上的处理机制,中断函数不是由主程序调用,可以说是由硬件触发,硬件调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当对应的中断触发源被触发后,若此时全局中断开始,则自动进入中断服务程序,当中断服务程序执行完毕,跳转到上一级程序。若同时中断的话,则按中断向量表上的优先级执行,AVR没有像51单片机那样的中断优先级,他是固定的。
追问
是不是说,程序运行的过程中,是会定时检查中断?比如,拿计数为例的话,那么程序运行的时候,是不是计数每加一次,就检查是否达到中断条件,如果没有的话继续重复?
但是main函数里没有调用中断啊!怎么会每次都进行中断检查呢?(如果理解有错请指正!)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看下中断有没有开,中断能执行就说明中断控制寄存器在某处开了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询