51单片机累计定时中断计时时间不准的诡异现象?已解答。
ajian_佛山:我有个问题,以下是原理图和源代码。第5节 LED灯为什么会是这样,程序应该是亮一秒灭一秒。从波形上看时间不准确。为什么会是这样啊?
void led_flicker() //第三区 LED闪烁应用程序
{
switch(ucLedStep)
{
case 0:
if(uiTimeLedCnt>=const_time_05s) //时间到
{
uiTimeLedCnt=0; //时间计数器清零
led_dr=1; //让LED亮
ucLedStep=1; //切换到下一个步骤
}
break;
case 1:
if(uiTimeLedCnt>=const_time_05s) //时间到
{
uiTimeLedCnt=0; //时间计数器清零
led_dr=0; //让LED灭
ucLedStep=0; //返回到上一个步骤
}
break;
}
}
鸿哥--深圳:
跟开发的设置环境有关。要调整keil设置环境的Meory Model和Code Rom Size。你截图让我看看你的设置模式。
ajian_佛山:
好的。
鸿哥--深圳:
把code rom size 改成compact模式,再告诉我们效果如何。我等你。
ajian_佛山:
我设置了之后还是这样,没解决问题。
鸿哥--深圳:
再改一下。
ajian_佛山:
改哪里?
鸿哥--深圳:
还是改那里。
ajian_佛山:
还是不行。
鸿哥--深圳:
你是用实物开发板还是仿真软件?
ajian_佛山:
仿真软件。
鸿哥--深圳:
这样吧,我现在用实物开发板,和示波器观察一下,一会告诉你结果。
鸿哥--深圳:
请看我上面在实物硬件学习板上用示波器观察的波形,学习板上用示波器观察时间是正确的,但是你在仿真软件看到的是不正确,说明仿真软件protues跟硬件实物是有差距的。当然,也可能不完全是protues的问题,今天我之所以专门用示波器去观察这段代码,是因为我以前也遇到过一些诡异现象,就是让一个LED灯闪烁,结果时间明显不准确,后来我通过调整keil设置环境的Meory Model和Code Rom Size后就正常了。
页:
[1]