但不知,你这提问是想帮你写程序昵,还是帮你分析中断程序的写法。
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)”,点击后就直接运行到你点的这一行,右下的状态栏里会显示延时的时间。
我要讲的就这些了,希望能够帮到你。如果程序还有问题,你可以描述得更清楚些继续问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)