Для цикла не работает должным образом в MPLAB IDE для программы PIC Micrcontroller - PullRequest
0 голосов
/ 05 сентября 2018

Я запускаю указанную ниже программу, но проблема в том, что цикл запускается только один раз, включает светодиод и затем выключается. Он должен работать 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 голосов
/ 05 сентября 2018

Если вы расширяете то, что делаете в цикле, оно становится

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;

Обратите внимание, что между состояниями изменения светодиода нет задержки, когда он выходит из процедуры. Добавьте еще одну задержку после изменения состояния.

void led(void)
{
    RB0=~RB0;
    __delay_ms(delay);
    RB0=~RB0; 
    __delay_ms(delay);
}
0 голосов
/ 05 сентября 2018

Фактически, светодиод включается и выключается 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...
...