疑惑…单片机进入中断后不能执行调延时程序?中断服务程序里已写延时程序…

疑惑…单片机进入中断后不能执行调延时程序?中断服务程序里已写延时程序…,第1张

通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。

但不知,你这提问是想帮你写程序昵,还是帮你分析中断程序的写法。

1) 使用debug单步端点确认程序流程是否有执行到delay处

2) 查看list文件或者汇编文件确认delay语句是否被编译器优化了

3) 不要再中断里使用软delay,在不考虑中断嵌套优先级的情况下,中断内的软delay会拉死cpu,考虑用硬件资源来取代软delay

首先我要告诉你,你的程序没有死循环,而且程序思路没有多少问题。

我把你的代码原封不动的试验了一遍,你的延时程序是对的,过了一定时间它能返回。

1.你用的是多少频率的晶振?如果是11.0592MHz,就是2.6秒,;如果是32.768KHz(注意K和M的区别),就是878秒。延时程序循环多少遍跟晶振频率很有关系的。

2.你是用实际电路测试的吗?如果你用电路测试的话,你有没有按着外中断上的按钮不放?按着按钮不放的话,则你的程序中断返回后,又立刻被触发了中断,看上去就跟没灭过一样。

解决方法:中断初始化部分加入SETBIT0(下降沿触发模式),可以让中断只响应一次。

3.你用软件测试过吗?延时程序用软件测试很方便。

方法(我用的是Keil Uv3):右键左侧的树状图最上面的Target文件夹,然后选“为目标...设置选项”(Options for...)。在页面上方设置晶振频率(注意单位MHz)。然后点击“调试(Debug)”选项卡,选左边的调试器,注意去掉“根据真实时间控制速度(Limit speed to realtime)”的勾。(为什么?你总不想等一年才知道这个程序要运行一年吧!)

设置完毕,点击菜单中的调试→启动/停止调试。这个菜单栏有很多功能,但有一个功能不在这里。当你进入延时程序时,右键延时程序末端,有一个“运行到光标行(Run to cursor line)”,点击后就直接运行到你点的这一行,右下的状态栏里会显示延时的时间。

我要讲的就这些了,希望能够帮到你。如果程序还有问题,你可以描述得更清楚些继续问。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7924436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存