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

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

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

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

中断服务程序里调用延时程序不违背语法,无论汇编还是C都可以,

可是绝大部分用人单位都不愿意招聘在中断服务程序里调用延时程序的人...........

要实现闪灯,亮灭的动作在中断服务程序里面实现倒是未尝不可,但不要在中断服务程序里等下一个状态,而是在每次进入中断服务程序后判断要不要改变灯的状态。

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

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

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/11319523.html

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

发表评论

登录后才能评论

评论列表(0条)

保存