单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。
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本回答被提问者采纳
以上是关于单片机中,有一个定时中断函数,在中断里有很长的循环程序,这里问题来了。的主要内容,如果未能解决你的问题,请参考以下文章