单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。相关的知识,希望对你有一定的参考价值。

假如这个中断是定时中断,时间为10ms的中断,每隔10ms中断一次,但是每次执行这个中断却要耗费30ms的时间,那么在执行这个中断里的程序时,执行到20ms时,程序还在里面执行,还没有跳出中断,那么CPU的这个10ms中断会怎么办?忽略还是?
-------------------------------是不是一定要把这个30ms执行完才会去响应那个10ms的中断?
虽然这种程序没有什么实用的意义,但是从原理上来分析的话,会出现什么情况?

在中断程序中,不退出,又出现了本中断的申请,
单片机,是不会再一次进入该中断程序的。

只有高级的中断,才能中断本次中断。

当退出本次中断后,回到主程序执行了一条指令,在处于主程序期间,单片机才会顾及已经出现的申请。

但是,如果,该申请标志,已经消失,单片机就不会发生中断。

这个过程,有些书,讲的很详细。有些书,就没有讲。
参考技术A 的确,这种程序没有什么实用的意义,从原理上分析,更不会有人这么做的。你非要这么做,也没有人管,但不符合逻辑。既然采用中断的方式,就是为了充分利用单片机的时间。像你说的这个问题一种解决的办法是延长中断的时间,中断的时间要长于执行中断程序的时间,因每次中断的执行任务需要30ms,而中断时间是10ms,这根本就不能完成中断的任务吗,当然了,中断时,没有从中断返回,就不会再响应同一个中断的。因此,从中断返回后,已经少响应中断两次了,也就是少执行两次中断任务。可是中断一次执行中断任务就却需要3倍的时间,你自己想想,这么做合乎逻辑吗,所以,根本就不会有人这么做,只有瞎想才能这么想的。 参考技术B 中断只有在无同级或更高级中断发生时才能进入,中断会延迟,为什么要在中断里执行这么长的程序,而且中断时间选的这么短,这样做单片机做不了其他的事了。 参考技术C 那是当然的,没有RETI也就是中断返回,是不会继续响应中断的。 参考技术D 中断标志位会置位,但会继续执行完程序再响应追答

你确定??我一直以为是又重新重中断开始执行

可以试一下,中断有中断优先级同等级的不会中断嵌套

求教怎么在C语言中使用定时器

是51单片机吗? 如果是51单片机,你可以使用TMOD设置两个定时器,然后使用TR0、TR1分别启动两个定时器。PT0置为“1”,就可以中断定时器1的服务函数,相反,如果PT1置为“1”就可以中断定时器0的服务函数。 如果不设置PT的值,默认为“0”,这样的话,T0和T1谁也不能中断谁。 参考技术A 简单使用,比如初始化,回读计数值,可以通过访问定时器的寄存器的方式完成
如果需要定时器中断服务,要编写中断服务程序,并设置中断向量表
参考技术B 使用回调函数,代码如下:

void SetTimer(void interrupt (*handle)())

oldhandle=getvect(TIMER);
disable();
setvect(TIMER,handle);
enable();


void CloseTimer()

disable();
setvect(TIMER,oldhandle);
enable();


上面代码的编译环境:TC2.0本回答被提问者采纳

以上是关于单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。的主要内容,如果未能解决你的问题,请参考以下文章

求51单片机中,用C语言写的五个中断源的中断函数的书写规则,就是进入中断函数时的那个函数名,并说明...

请问单片机定时器中断是怎么样的过程啊

51单片机外部中断0函数执行时,又来了个外部中断0信号

单片机学习 中断定时器优先级的一些理解

单片机C语言如何满足条件就立即退出中断函数

51单片机定时器中断