Для цикла не работает должным образом в MPLAB IDE для программы PIC Micrcontroller
Я запускаю приведенную ниже программу, но проблема в том, что цикл запускается только один раз, включает светодиод и затем выключается. Это должно работать в течение 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 ответа
Решение
Фактически, светодиод включается и выключается 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;
Обратите внимание, что нет задержки между сменой состояний светодиода, когда он выходит из процедуры. Добавьте еще одну задержку после изменения состояния.
void led(void)
{
RB0=~RB0;
__delay_ms(delay);
RB0=~RB0;
__delay_ms(delay);
}