独闷闷网

标题: 51单片机累计定时中断计时时间不准的诡异现象?已解答。 [打印本页]

作者: jianhong_wu    时间: 2014-10-20 11:23
标题: 51单片机累计定时中断计时时间不准的诡异现象?已解答。
ajian_佛山:
我有个问题,以下是原理图和源代码。第5节 LED灯为什么会是这样,程序应该是亮一秒灭一秒。从波形上看时间不准确。为什么会是这样啊?


  1. void led_flicker() //第三区 LED闪烁应用程序
  2. {
  3.   
  4.   switch(ucLedStep)
  5.   {
  6.      case 0:

  7.            if(uiTimeLedCnt>=const_time_05s) //时间到
  8.            {
  9.              uiTimeLedCnt=0; //时间计数器清零
  10.              led_dr=1;    //让LED亮
  11.              ucLedStep=1; //切换到下一个步骤
  12.            }
  13.            break;
  14.      case 1:
  15.            if(uiTimeLedCnt>=const_time_05s) //时间到
  16.            {
  17.               uiTimeLedCnt=0; //时间计数器清零
  18.               led_dr=0;    //让LED灭
  19.               ucLedStep=0; //返回到上一个步骤
  20.            }
  21.            break;
  22.   }

  23. }
复制代码


鸿哥--深圳:
跟开发的设置环境有关。要调整keil设置环境的Meory Model和Code Rom Size。你截图让我看看你的设置模式。

ajian_佛山:
好的。


鸿哥--深圳:
把code rom size 改成compact模式,再告诉我们效果如何。我等你。

ajian_佛山:
我设置了之后还是这样,没解决问题。

鸿哥--深圳:
再改一下。

ajian_佛山:
改哪里?

鸿哥--深圳:
还是改那里。


ajian_佛山:
还是不行。

鸿哥--深圳:
你是用实物开发板还是仿真软件?

ajian_佛山:
仿真软件。

鸿哥--深圳:
这样吧,我现在用实物开发板,和示波器观察一下,一会告诉你结果。

鸿哥--深圳:

请看我上面在实物硬件学习板上用示波器观察的波形,学习板上用示波器观察时间是正确的,但是你在仿真软件看到的是不正确,说明仿真软件protues跟硬件实物是有差距的。当然,也可能不完全是protues的问题,今天我之所以专门用示波器去观察这段代码,是因为我以前也遇到过一些诡异现象,就是让一个LED灯闪烁,结果时间明显不准确,后来我通过调整keil设置环境的Meory Model和Code Rom Size后就正常了。







欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2