找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1330|回复: 9
打印 上一主题 下一主题
收起左侧

有什么方法可以获得单片机中断服务函数中程序执行的时间?

[复制链接]
跳转到指定楼层
楼主
大家好!

请问有没有什么方法可以知道中断服务函数中程序执行的时间是多少?

比如我有一个单片机定时器中断,假设中断函数中有30行程序,那么从进入中断开始执行第一行程序,到最后一行结束跳出中断,这中间的时间如何获得?

现在主要是我定时器中断设置的是1ms进一次中断,而我的中断中的程序比较多(不确定执行时间是否超过1ms,不过按道理1ms也挺长了),想计算实际的程序执行时间,这样比较保险点。
希望各位大神赐教方法,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2022-5-23 04:01 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:776619 发表于 2022-5-23 05:13 | 只看该作者
好象Keil调试功能本来就有这个功能,点运行进中断程序之前的时间值减去之后的时间值就可以了。
回复

使用道具 举报

地板
ID:612392 发表于 2022-5-23 09:11 | 只看该作者
进中断加一个IO口电平变化,出中断时此IO口电平反转,用示波器看一下可以大概推算出来。
回复

使用道具 举报

5#
ID:891041 发表于 2022-5-23 09:55 | 只看该作者
找一个空闲的IO, 进出中断的时候置高低。 拿示波器看脉宽就好了。
回复

使用道具 举报

6#
ID:688692 发表于 2022-5-23 10:00 | 只看该作者
进中断,启动定时器,出中断,停止定时器,读取定时器的计数值,即可获得中断程序的执行时间。12MHz下,传统8051的定时器分辨率为1uS。STC的定时器,时钟可x12,分辨率约为0.1uS,如果主频设置到24Mhz,则分辨率可达0.05uS。这个分辨率应该够你用了。
回复

使用道具 举报

7#
ID:161164 发表于 2022-5-23 10:57 | 只看该作者
如果你用的是Keil+89C52单片机
可以用以下方法
1 点击目标选项 如图



2 输入模拟晶振频率,为方便计时,可输入12, 然后点击OK



3 点击中断内的第一行的边边,加上断点
4 在中断内的最后一行加上一段简单的代码 如图,并加上断点
5 按F7进行编译



6 进入Debug Mode 如图



7 如代码会受按键影响,可添加IO模拟 如图



8 点击左上角运行
9 代码框会出现蓝黄箭嘴,如图,代表准备运行该行
10 左边的states是运行步数,在11.0592Mhz晶振频率下,一步是1.085us
11 左边的sec是运行时间
12 计下此时的运行步数或运行时间然后点击左上角运行



13 从运行步数得知,我这段代码用了1740-1698 = 42 步 = 45.57us
14 从运行时间得知,我这段代码用了0.00188802 - 0.00184245 = 0.00004557s




回复

使用道具 举报

8#
ID:401564 发表于 2022-5-23 14:11 | 只看该作者
最好的办法就是示波器
如果没有,那就仿真,如果是STC的8051仿真的时间会比实际的时间长
回复

使用道具 举报

9#
ID:161164 发表于 2022-5-24 15:47 | 只看该作者
刚找到了一个更直观的方法(Keil V5.20)






























回复

使用道具 举报

10#
ID:997026 发表于 2022-5-25 22:35 | 只看该作者
lkc8210 发表于 2022-5-24 15:47
刚找到了一个更直观的方法(Keil V5.20)

我的是ARM M0 MCU, 方法应该差不多,我试下,非常感谢图文并茂的解释,辛苦了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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