问题描述
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
函数的末尾,执行后进入无限空闲循环,直到复位。