微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序没循环led灯为什么还一直闪

程序没循环led灯为什么还一直闪

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
  void delay(unsigned int i);
  main()
  {
    while(1)
  {
  P2=0x00;
  delay(600);
  P2=0xff;
  delay(600);
  }
  }
   
  void delay(unsigned int i)
  {
    unsigned char j;
for(;i>0;i--)
   for(j=255;j>0;j--);
  }
和另一个程序
#include <reg51.h>
  void delay(unsigned int i);
  main()
  {
   
  P2=0x00;
  delay(600);
  P2=0xff;
  delay(600);
  }

   
  void delay(unsigned int i)
  {
    unsigned char j;
for(;i>0;i--)
   for(j=255;j>0;j--);
  }
为什么;俩个程序烧录到单片机的结果是一样的呢 led灯一直闪  没有循环的不应该只闪一次吗?

你确定第二个程序成功弄单片机里了?可能没成功弄进去,第一个有循环的程序还在单片机里面

你的主程序就是一个顺序,当执行完一次后,它会从头再执行的,而不是停在最后的位置的。如果你要停在最后的位置,就加一句while (1);

程序1中可以把while语句放在如下位置:
main()
  {
  P2=0x00;
  delay(600);
  P2=0xff;
  delay(600);
while(1)
  {
  }
  }
程序2把第二行语句去掉!

程序2应该改成main()
  {
  P2=0x00;
  delay(600);
  P2=0xff;
  delay(600);
while(1)
  {
  }
  }
因为不加while语句 main函数中的语句带动led会跑飞  导致程序跳出 按已记住的动作执行!

为什么会从头再执行呢?

“main函数中的语句带动led会跑飞  导致程序跳出 按已记住的动作执行!”这事什么意思跟单片机自身的功能有关还是跟程序有关

在后面加一个空的循环就可以了

单片机中为了能让程序受控,需要加while(1)这样的死循环,保证程序指针总是指向被编译过的指令也就是作者写的指令,否则就会一直执行ROM里指令造成跑飞,跑飞后,单片机引脚输出紊乱,所以灯在闪也不是固定频率的闪,是乱闪

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top