launchpad延时出现的问题

lw3968   2013-4-22 00:27 楼主
代码如下: 当该下面带颜色的数据,该的氛围比较大,例如前面 2个该为delay (50),后面的一个数据改为600,调试发现会出现走不出delay这个函数.数据小一点,如下程序的话就可以正常的运行了,问题提出来,明天晚上再来研究一下.
#include

void delay ();

void main (void)  {
  P1DIR |= 0X41;
  P1OUT = 0X00;
  while (1) {
    delay (10);
    P1OUT = 0X00;
    delay (10);
    P1OUT = 0XFF;
  }

}

void delay(unsigned int i)
  {
    unsigned int k,j;
    for (j = 1;j < i;j ++) {
      for (k = 1;k < 300;k ++) {
      ;
      }
    }
  }

回复评论 (7)

是不是延时太长了?
点赞  2013-4-22 08:57

回复 沙发 qinkaiabc 的帖子

看样子不是啊,这个延时应该很短的吧!我觉得是你的错觉,你后面延时600,前面50,那你看到的应该是P1OUT = 0X00在执行,P1OUT = 0Xff为执行,所以建议:
1. 不要只看相信确定执行到哪,最好是仿真看真的有没有执行;
2. 把两个时间都加长到一样(差距不要太大)试试;
点赞  2013-4-22 09:46
看你的程序,delay(10)是延时了3000条指令的时间,应该没有什么问题啊,你是不是调试的时候断点没有设置好,你这个交替闪烁的频率还是有点高,肉眼可能看不到LED灯在闪烁
点赞  2013-4-22 10:14
我把你的代码放到CCS里运行了,首先说一下,你没有关闭看门狗定时器,然后你的代码在调试的时候delay函数好像没有运行,断点也加不上,单步调试也无法进入,把值改为50和600,也还是一样的,50改为500也是一样的,改为100和1000也还是一样,delay函数没有执行,但是我用本征函数__delay_cycles(10000)就能等到50hz左右的频率,所以延时我还是推荐本征函数
点赞  2013-4-22 10:49
是的,开始是小小的延时,后来改了就忘了加wdt了,后来在配置了一下时钟,基本上就能跳出那个循环了,
点赞  2013-4-25 17:23

回复 6楼 lw3968 的帖子

我也学习了
点赞  2013-4-25 17:40
因为你后面的600大于50,所以肉眼看到的知识执行
    P1OUT = 0X00;可以仿真一下,能不能进入这条语句
点赞  2013-7-26 10:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复