• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

运行后,一直闪,无法停止

568889dd06dc9d30 2018-11-12 浏览量:720

#include <reg52.h>

 #define led P1

 #define uchar unsigned char

 #define uint unsigned int

 sbit key=P3^2;

 sbit num=P3^3;

 sbit ent=P3^4;

 uint n=0;

 void time (int a)

 {

  for(;a>0;a--);

 

 }

 

 void main ()

 {

   EA=1;

   IT0=0;

   IT1=0;

   EX0=1;

   EX1=1;

   while(ent==0)

   {

   led=0x00;

   time(30000);

   led=0xff;

   time(30000);

   }

   led=0xff;

}

 void plus () interrupt 2

 {

 if(num==0)

 {

 time(5);

 while(num==0)

 break;

 }

 n=n+1;

 led=0x00;

 time(30000);

 led=0xff;

 time(30000);

 

 }

 void fla () interrupt 0

 {

while(n>0)

{

   led=0x00;

   time(30000);

   led=0xff;

   time(30000);

   n=n-1;

}

while(n==0)

break;

 }

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 请在main函数的最后一行,加个while(1);

    从您的程序上看,如果ent不为0,退出循环,P1口全置高,灯灭掉。然后呢?


    单片机的程序最后,如果没有一个死循环的话,程序计数器继续下移,后面的代码是未知的。

    通常的结果就是复位,从头再为一遍。就是您观察到的现象,一直闪。

    附带说下,只是现象相当于复位,比正常的复位不靠谱,细节没研究过。


    所以,最后加个死循环就能正常。

    • 发布于 2018-11-12
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:11
  • 这个程序就是一个死循环,是没有停止的,除非你写一个while(1)
    • 发布于2018-11-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 你这程序没有停止条件,当然会一直执行,需要一个停止条件,比如用if…然后while(1);
    • 发布于2018-11-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 你这是不是把ent这个引脚外界置零了呀,进入了while循环一直没发出来
    • 发布于2018-11-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的程序是要检测P3^4的状态,如果这个状态一直是低电平,程序是死循环不会退出的。
    • 发布于2018-11-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序中的while(1)就是一个死循环,就是会一直运行下去的
    • 发布于2018-11-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 在程序的最后加上while(1);或者for(;;){}
    • 发布于2018-11-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个main函数本身就是可以多次进入的,如果只是想要执行一次,那就需要在main函数最后那里加一个while(1);
    • 发布于2018-11-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 程序多次进入main函数所以LED灯一直闪,你可以在main函数中加入死循环就不会出现这种情况。

    • 发布于2018-11-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为你开了中断的啊,中断就是会有条件发生进,就进了中断进行运行了,没有main中的程序也会运行的啊
    • 发布于2018-12-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的中断是独立在主函数之外执行的,所以主函数不会影响你的中断执行
    • 发布于2018-12-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 开了中断的话会执行你的中断任务,跟你的主函数没有什么关系
    • 发布于2018-12-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

运行后,一直闪,无法停止