微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使通过条件

如何解决即使通过条件

  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 举报,一经查实,本站将立刻删除。