在 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
...
我问这个是因为下面的代码是我用来使 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
...