51单片机中 定时器定时到了,进入中断

服务程序后,处理完后,是回到主程序吗?如果主程序中有延时函数,且比定时器的要长,当下次中断处理完后,回到主程序,从哪里开始执行?若在中断服务程序中加延时函数,且时间比定时... 服务程序后,处理完后,是回到主程序吗?如果主程序中有延时函数,且比定时器的要长,当下次中断处理完后,回到主程序,从哪里开始执行?若在中断服务程序中加延时函数,且时间比定时器长,那么延时函数下面的程序不就不能执行了吗?那也进不了主程序了? 展开
 我来答
Cindere鞡
推荐于2016-09-11 · TA获得超过7254个赞
知道大有可为答主
回答量:1148
采纳率:84%
帮助的人:512万
展开全部
记得在介绍51单片机对中断服务程序的处理时,说的是中断发生时不管在处理什么程序都会停下来转去处理中断服务程序,并保存当前pc地址,以能在中断服务程序处理完成之后能返回这个地址继续处理之前未处理完毕的程序。所以呢,若是在中断发生之前有一个比中断发生时间更长的延时函数,不外乎就两种情况,要么保存当前pc地址,待中断服务程序处理完成重新开始执行被中断处的函数,要么保存当前pc地址并记录程序状态,待处理完成后接着延时,不重新延时。
如果刚才所说的没帮到你,我建议你自己写一个实验程序,就用定时器产生中断,4.5s一次吧,在写一个简单的延时函数,多延时一些,尽量大于4.5s,然后延时函数中用到的变量使用全局变量以方便在主函数中读取值并显示。如果每次读取为0,那么就是重新开始延时,如果每次都不一样,说明保存了状态的,中断服务程序用来读取值。
希望我的回答能帮助到你。
追问
我认为执行中断服务程序后,是继续回到主程序中执行,这个可以理解。如果在中断服务程序中又有延时函数,并且比定时长,那么延时函数后的程序就永远不会执行,因为每次时间到,就重新执行中断服务程序。我想问下,执行中断服务程序,也保存中断服务程序中的pc值? 不是只保存主函数中的pc值吗?
追答
首先,我说的pc就是主程序的pc值,然后,中断发生后产生中断请求,这个期间如果有个很长的延时我的确还不知道会不会继续计数,可以写个程序实验一下,毕竟动手得出的结论比看到的要深刻得多,当然办法是人想的,如果你只是想解决这个问题,你可以在进入中断的时候关闭中断计数,TRx=0就行,如果你想弄清楚其中的原理,网上可以搜索,自己可以写实验程序。最后,愿你成功。
ywhjp
2013-04-26 · TA获得超过1299个赞
知道小有建树答主
回答量:1002
采纳率:60%
帮助的人:433万
展开全部
哪里进中断, 就回哪里去
更多追问追答
追问
若在中断服务程序中加延时函数,延时比定时器要长,那么每次进中断的时候,延时函数后的程序就不能执行了呀。每中断一次,不是执行一次服务程序吗?那延时后的程序就不能执行,因为每次延时还没完,就中断了。
追答
你说的是两个中断吗?

如果是, 他们之间有优先级的, 优先级高的先执行, 执行完了还是会返回原来的程序中运行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式