即使通过条件

问题描述

  void initTimer (void);
void delay (unsigned long milli);

void main (void)
{
//initialize peripherals
 initTimer();
//PORTB all outputs
 TRISB = 0;
 
 LATB = 0;
 
 TRISA = 0x0F;
 
 ANSA = 0;
 
 

unsigned int allon = 0b1111111111111111;
unsigned int counter;
unsigned int zero =  0b0000000000000000;


  if (PORTAbits.RA0 == 1 && PORTAbits.RA1 == 1 && PORTAbits.RA2 == 0)
        
            for (counter = 0; counter < 5; counter++)
            {
            LATB = allon;
            delay(SHORT_DELAY); 
            LATB = zero;
            delay(LONG_DELAY);
            }
}

我认为这是有史以来最万无一失的代码,但它不会在 5 次后停止,不知道发生了什么。变量设置为二进制,决定哪些输出是开或关,零是alloff,allon是相反的

解决方法

与托管环境(在操作系统下运行)中的程序不同,它们可以通过将控制权传递回主机来从主程序“返回”,嵌入式裸机程序无处可返回。所以一个典型的裸机程序应该在某处有一个无限循环——或者作为一些偶数处理循环、周期性任务循环或者只是在 main 函数的末尾,以防它有一个有限的动作序列。在您的情况下,它似乎是最后一次-您只想眨眼几次然后停下来。所以解决办法是放置

while(1); 

main函数的末尾,执行后进入无限空闲循环,直到复位。