在 msp430 上从 for 循环结束回到开始需要多少时间?

How much time does it take to get from the end of a for loop back to the beginning on an msp430?

我问这个是因为下面的代码是我用来使 2 个 LED 完美交替闪烁的代码。但是,为什么这有效并没有真正意义。这个带有 2 个 xor 的循环有 2 种状态,一种状态是 pin1(仅红色亮起)处于活动状态,另一种状态是 pin 6 和 pin 1 都处于活动状态(红色和绿色亮起)。但是灯光闪烁,就像它们在彼此之间完美地交替亮灭。

#include <msp430g2553.h> 

// counter as a global variable
unsigned int i = 0;  

void main(void) 
{ 
    // stop the watchdog timer
    WDTCTL = WDTPW + WDTHOLD;  

    // set the direction register for LED1 and LED2
    P1DIR |= 0x41;  

    // initialize LED1 and LED2 to off
    P1OUT &= 0xBE;  

    //empty for loop is an infinite loop
    for (;;) 
    { 
        P1OUT ^= 0x01;

        // create a delay between toggles
        for(i=0; i< 20000; i++)  
        {    
            // empty statement, do nothing
        }

        P1OUT ^= 0x40;
    }
}

是否有可能是主 for 循环的延迟造成了这种错觉?

答案是回到循环开始的速度非常快。

这段代码看起来应该让 LED 交替显示给我。不过你的评论看起来排错了。

它的主要部分在您的循环中。您从两个 LED 都关闭开始。然后这样做(我已经将评论更改为我认为他们所做的):

for (;;) {                   //  infinite loop
    P1OUT ^= 0x01;           // toggle state of LED1
    for(i=0; i< 20000; i++)  // create a delay 
        ;
    P1OUT ^= 0x40;           // toggle state of LED2
}

那么,使循环变平的是:

                      LED1          LED2
                      off           off

start into loop

Toggle LED1           on            off
wait
wait
wait
Toggle LED2           on            on    { go back to start of loop - quickly }
Toggle LED1           off           on 
wait
wait
wait
Toggle LED2           off           off 
Toggle LED1           on            off
wait 
...