3902|10

316

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

菜鸟求助啦! [复制链接]

朋友们!这段Code有问题吗?
板子F5438
想让LED1闪呀闪呀闪!

#include
void main(void)
{
  unsigned char i;
  WDTCTL = WDTPW + WDTHOLD;                     //关看门狗
P1DIR |= BIT0;

  while(1)
  {
    i = 50000;
     
     while(i--);
    P1OUT ^= BIT0;
   
  }
}

症状:
i改成5单步调试正常,
现在直接全速就一直处于亮的状态!求真像!

最新回复

不知道楼主的闪呀闪呀,是什么意思。 我是觉得有可能编译器将while(i--);优化了。。。 所以让他加个volatile试试,因为之前我遇到过类似的情况。 加volatile就是不让编译器去优化。 to楼主:要注意数据的位数,char是8位,改为unsigned int。 另外MCLK大概位1M左右。如果是i=50000,那么一秒钟也能闪个20次,肉眼可以识别。  详情 回复 发表于 2011-12-10 09:46
 
点赞 关注

回复
举报

7230

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 
延时够不够
 
 

回复

7230

帖子

195

TA的资源

五彩晶圆(高级)

板凳
 
i 怎么是unsigned  char  =>unsigned int
 
 
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

4
 
变量i定义的是unsigned char型,8位(<=255),所以延时太,到不了50000
 
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

5
 
谢谢各位不吝指教:

我以前试过unsigned int和把延时改成200一类的!症状一样也是一直处于亮的状态!

再附上一个问题哈!
适时时间是怎么计算的?比如说我现在想延时一小时,应该怎么做?想延时23小时59分钟呢!?

求高手指教!
 
 
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

6
 
原帖由 wuyanyanke 于 2011-12-9 16:15 发表
谢谢各位不吝指教:

我以前试过unsigned int和把延时改成200一类的!症状一样也是一直处于亮的状态!

再附上一个问题哈!
适时时间是怎么计算的?比如说我现在想延时一小时,应该怎么做?想延时23小时59分钟呢 ...

延时时间太短就看清闪烁,这就是视觉暂留效果。
如果做延时1小时或者更久的话,最好用定时器做较为精确的延时,或者像23小时59分钟你就直接用时钟芯片好了
 
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

7
 
原帖由 wstt 于 2011-12-9 17:12 发表 延时时间太短就看清闪烁,这就是视觉暂留效果。 如果做延时1小时或者更久的话,最好用定时器做较为精确的延时,或者像23小时59分钟你就直接用时钟芯片好了


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                     //关看门狗
 
  while(1)
  {
    P1DIR |= BIT0;
    for(int i=5000;i>0;i--);
    for(int i=5000;i>0;i--);
    P1OUT ^= BIT0;  
  }
}

搞定!
谢谢大家!

wstt 兄,你的意思“23小时59分钟你就直接用时钟芯片好了”是要另加芯片吗?还是使用430现有的?!

 
 
 

回复

424

帖子

0

TA的资源

纯净的硅(高级)

8
 
加个volatile
变成volatile unsigned char i;
 
 
 

回复

1万

帖子

16

TA的资源

版主

9
 

原帖由 鸵鸟蝈蝈 于 2011-12-9 20:27 发表 加个volatile 变成volatile unsigned char i;

 

加个volatile是啥意思????

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

424

帖子

0

TA的资源

纯净的硅(高级)

10
 
原帖由 ddllxxrr 于 2011-12-9 21:16 发表

 
加个volatile是啥意思????

不知道楼主的闪呀闪呀,是什么意思。
我是觉得有可能编译器将while(i--);优化了。。。
所以让他加个volatile试试,因为之前我遇到过类似的情况。
加volatile就是不让编译器去优化。
to楼主:要注意数据的位数,char是8位,改为unsigned int。
另外MCLK大概位1M左右。如果是i=50000,那么一秒钟也能闪个20次,肉眼可以识别。
 
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

11
 

回复 10楼 鸵鸟蝈蝈 的帖子

谢谢鸵鸟蝈蝈兄!
刚拿到板子,什么都没看,想做个简单的让LED过几秒亮再过几秒灭!所以就是闪呀闪!哈哈哈!
unsigned char i;确实是一个很白的计数类型,谢谢指教!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表