For Loop 在 PIC 微控制器程序的 MPLAB IDE 中无法正常工作
For Loop not working properly in MPLAB IDE for PIC Micrcontroller Program
我正在 运行ning 下面给出的程序,但问题是 for 循环 运行s 仅一次并打开 LED,然后关闭。它应该 运行 5 次。
下面是代码:
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
}
void main(void)
{
ANSEL = 0; //Disable Analog PORTA
TRISA0 = 1; //Make RA0 as Input
TRISB = 0x00;
PORTA = 0;
PORTB = 0x01;
// RB0=0;
while(1)
{
//Switch Pressed
if(swch==0) //Check for Switch Pressed
{
__delay_ms(delay_debounce); //Switch Debounce Delay
if(swch==0) //Check again Switch Pressed
{
//Blink LED at PORT RB0
for (int i = 0; i < 2; i++)
{
led();
}
}
}
else if(swch==1)
{
//Do Nothing
}
}
return;
}
实际上,LED 打开和关闭 5 2 次(见代码),它发生得如此之快,看起来就像只发生了一次。这是因为在您关闭它和再次打开它之间没有延迟。将这个小片段添加到您的代码中:
//other code...
for(int i=0;i<2;i++) // The 2 here means the LED will only flash twice!
{
led();
__delay(500);
}
// other code...
如果你展开你在循环中所做的事情,它就变成了
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
// No delay here before it switches back
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
请注意,当它离开例程时,LED 改变状态之间没有延迟。更改状态后添加另一个延迟。
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
__delay_ms(delay);
}
我正在 运行ning 下面给出的程序,但问题是 for 循环 运行s 仅一次并打开 LED,然后关闭。它应该 运行 5 次。 下面是代码:
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
}
void main(void)
{
ANSEL = 0; //Disable Analog PORTA
TRISA0 = 1; //Make RA0 as Input
TRISB = 0x00;
PORTA = 0;
PORTB = 0x01;
// RB0=0;
while(1)
{
//Switch Pressed
if(swch==0) //Check for Switch Pressed
{
__delay_ms(delay_debounce); //Switch Debounce Delay
if(swch==0) //Check again Switch Pressed
{
//Blink LED at PORT RB0
for (int i = 0; i < 2; i++)
{
led();
}
}
}
else if(swch==1)
{
//Do Nothing
}
}
return;
}
实际上,LED 打开和关闭 5 2 次(见代码),它发生得如此之快,看起来就像只发生了一次。这是因为在您关闭它和再次打开它之间没有延迟。将这个小片段添加到您的代码中:
//other code...
for(int i=0;i<2;i++) // The 2 here means the LED will only flash twice!
{
led();
__delay(500);
}
// other code...
如果你展开你在循环中所做的事情,它就变成了
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
// No delay here before it switches back
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
请注意,当它离开例程时,LED 改变状态之间没有延迟。更改状态后添加另一个延迟。
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
__delay_ms(delay);
}