找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2205|回复: 4
收起左侧

单片机定时器T1连续触发中断的问题

[复制链接]
ID:482935 发表于 2020-5-16 04:45 来自手机 | 显示全部楼层 |阅读模式
假设一个单片机定时器定时20微秒溢出一次,可是它的中断服务函数需要50微秒才能完成。这时候在中断函数内又产生了了一次定时器溢出,即中断请求。那么当前一次中断做完了,跳回主函数之后,是马上进入下一次中断函数呢?还是说同级的中断请求因为在执行中断函数时申请的,不能发生,被忽视了?

百度说有个中断标志,是说TF1吗,如果在中断服务函数结束后,标志还在,就会马上进入下一次中断函数?(假设在恰巧中断服务函数的正中间申请,不在开头发生)

但是据我了解TF1是硬件清0,而且是中断产生后TF1等于1,在进入了中断服务函数之后,马上就TF1置0,也就是说在中断服务函数的开头执行硬件清0。所以如果同级的第二次中断请求(或者说标志)在此处触发,被清0了,就不会在退出中断服务函数时,还存在中断标志了吗? 也就是说同级中断被无视了一次申请?能这样理解吗
回复

使用道具 举报

ID:213173 发表于 2020-5-16 06:44 | 显示全部楼层
《假设一个单片机定时器定时20微秒溢出一次,可是它的中断服务函数需要50微秒才能完成》如果定时器1被打开,20微秒后溢出发生中断请求TF1=1,CPU响应此请求后硬件置TF1=0,执行中断服务函数。在此期间发生任何同级中断请求都不会得到响应,包括自身。直到完成此中断任务CPU才能响应其它中断请求。如果执行中断服务函数所需时间大于或等于自身定时周期就会发生自身中断丢失和其它中断请求不能及时响应或丢失。这是编程的逻辑错误,必须避免发生执行中断服务函数所需时间接近自身定时周期,更不能大于或等于自身定时周期。否则CPU根本没有时间执行其它任务。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:482935 发表于 2020-5-16 09:40 | 显示全部楼层
wulin 发表于 2020-5-16 06:44
《假设一个单片机定时器定时20微秒溢出一次,可是它的中断服务函数需要50微秒才能完成》如果定时器1被打开 ...

那么在执行中断服务函数期间虽然不会执行/响应“请求”(即重头执行中断函数),但是这个请求会被“保留“”吗? 也就是说在执行完一次中断后立刻再进入中断服务函数。 还是说这个请求就被无视了,之后直接做main里的内容了?
回复

使用道具 举报

ID:213173 发表于 2020-5-16 11:34 | 显示全部楼层
13681878016 发表于 2020-5-16 09:40
那么在执行中断服务函数期间虽然不会执行/响应“请求”(即重头执行中断函数),但是这个请求会被“保留 ...

你提这个问题是没有理解上文的意思。按你假设的条件发生3次中断请求只能有1次被执行。
回复

使用道具 举报

ID:482935 发表于 2020-5-16 14:25 来自手机 | 显示全部楼层
wulin 发表于 2020-5-16 11:34
你提这个问题是没有理解上文的意思。按你假设的条件发生3次中断请求只能有1次被执行。

我有点不懂。因为中断标志TF1会被置1,才会进中断服务函数(响应)。那么之后发生的新的同级中断,是不会让TF1置1吗? 我的意思是会不会发生中断标志的堆积(即做完一次马上又做一次),不是指打断中断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表