For Loop在PIC Micrcontroller程序的MPLAB IDE中无法正常工作

时间:2018-09-05 06:03:04

标签: c pic mplab

我正在运行下面给出的程序,但是问题是for循环仅运行一次并打开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;
 }

2 个答案:

答案 0 :(得分:0)

实际上,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...

答案 1 :(得分:0)

如果您扩展循环中的工作,它将变成

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