[求助] 为什么我的led灯不闪烁呢?求解

qinkaiabc   2012-7-16 14:02 楼主
为什么我的led灯不闪烁呢?求解

 #include <msp430g2553.h>

void delay()
{
unsigned int i;
for(i=0;i<20000;i++);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0X41;
while(1)
{
P1OUT &= 0X00;
P1OUT |= 0X41;
delay();
P1OUT &= 0X00;
P1OUT |= 0X40;
delay();
P1OUT &= 0X00;
P1OUT |= 0X01;
delay();
P1OUT &= 0X00;
P1OUT |= 0X00;
delay();
}
}
为什么我的led灯不闪烁呢?初学!LaunchPad开发板

回复评论 (7)

刚才是没进延时
你试试这样
#include <msp430g2553.h>
unsigned int i;
void delay()
{
for(i=0;i<50000;i++);
}
把 i  定义到外面
[ 本帖最后由 juring 于 2012-7-16 14:30 编辑 ]
点赞  2012-7-16 14:17

回复 沙发 juring 的帖子

不行,还是一直亮着。灯不闪烁的
点赞  2012-7-16 14:23

回复 沙发 juring 的帖子

嗯,,可以了。灯闪烁了。。。那为什么要把i放外面呢?放里面我单步运行就直接跳过delay();l了
谢谢
点赞  2012-7-16 14:35

回复 沙发 juring 的帖子

难道是被优化了?
点赞  2012-7-16 14:36

回复 5楼 qinkaiabc 的帖子

我正在调,稍等~
点赞  2012-7-16 14:39
volatile unsigned int i;
这样就OK了~
点赞  2012-7-16 14:42
1. 其实呢,看到你的这个例子,我感觉你可能之前弄过51,所以这个风格真的像极了51的风格;
2. 我举个例子:如果要点亮p1.0,main函数关闭看门狗之后,P1DIR |=BIT1;然后进入while(1)的死循环的循环体内部,P1OUT ^=BIT1,为什么要用异或呢,msp430上电IO好像默认为输入,低电平,
那么0与1做异或运算,就实现了IO电平的翻转啊。
3. 你的这个延时函数我在430中么有见过,这个是典型的51的写法。
点赞  2015-6-5 09:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复