【发布时间】:2018-03-15 07:07:06
【问题描述】:
我目前正在使用用 C 编码的MSP430G2553。
出于某种原因,我似乎不擅长编写基本的For 和While 循环,而且我不知道如何使While 循环在每次迭代后花费更长的时间来完成。
基本上,我有一个 LED 在启动时闪烁 100 毫秒。
当我按住一个按钮时,我想让 LED 闪烁的速度越慢,我按住按钮的时间越长。
当我放手时,LED 应保持其减慢的闪烁速度。
然后,第二个按钮会将 LED 闪烁率重置为 100 毫秒。
现在,当我按住按钮时,我可以减慢 LED 的闪烁速度,但它不会一直变慢。老实说,我不知道该怎么做,所以我在这里注册了一个帐户并发布了。
for(;;) //loop forever
{
if((P1IN & BIT3)==BIT3) //if button is not pressed
{
i = 0;
a = 4000; //At 10000, 4 cycles per second, or 250ms delay. 4000 cycles = 100ms or 10Hz delay.
P1OUT ^= BIT0 + BIT6; //two LEDs
while(i < a) //delays LED blinking until while-loop is complete.
{
i = i + 1;
}
}
else if((P1IN & BIT3)!=BIT3) //if button is pressed
{
i = 0;
a = 10000;
P1OUT ^= BIT0 + BIT6;
while(i < a) //delays LED blinking until while-loop is complete.
{
a = a + 2;
i = i + 1;
}
}
}
【问题讨论】:
-
谢谢大家,我知道由于丑陋的 for 循环,CPU 负载将几乎达到 100%,但现在我显然不擅长将这些 for 循环转移到中断块中.即使在一段时间内使 MSP430 的时钟值发生变化,我也遇到了一些麻烦。所以现在我只是想在转移到正确的 CPU 编码之前找出实现这一点所需的逻辑。
标签: c for-loop while-loop iteration msp430