如何解决即使通过条件
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
函数的末尾,执行后进入无限空闲循环,直到复位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。