主函数中,没有调用中断子程序,中断子程序为什么能被执行?何时执行?
2个回答
展开全部
我现在也在迷惑这个问题,看单片机的程序里,中断程序明明没有被主程序调用,然而中断程序却可以运行……按照C语言的规则,子函数必须要被主函数调用才能发挥作用,然而在52单片机里,主函数并没有调用中断函数
…………然后我查到了这个:
程序中断和调用子程序有何区别:
1.子程序调用是预先安排好的,程序中断是随机发生的;
2.调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3.子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
看到这个,大概意思应该是:
中断程序不同于子程序,不需要主函数main调用就能执行。
中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系
这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解
…………然后我查到了这个:
程序中断和调用子程序有何区别:
1.子程序调用是预先安排好的,程序中断是随机发生的;
2.调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3.子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
看到这个,大概意思应该是:
中断程序不同于子程序,不需要主函数main调用就能执行。
中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系
这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解
2016-01-11
展开全部
只要进入中断,该硬件清零的就自动清零,但强行跳回主程序,单片机会认为一直在执行中断程序,因此以后有中断发生时也不会再进入中断程序。
所以不能这样做,用RETI就会跳回主程序。
所以不能这样做,用RETI就会跳回主程序。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询