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);
}