新手关于中断的一个问题

2020-02-01 16:35发布

大家好,最近在学习中断,下边这个程序是用于控制继电器在一定时间内闭合和断开的。

理想中实现的过程是:P3.0高电平继电器开始反复开合→中断暂停→P3.0高电平继续开始→中断暂停 这样反复循环。

但是实际情况是:P3.0高电平继电器开始反复开合→中断暂停→P3.0高电平继续开始→中断不再暂停

代码如下,还请高手麻烦看一下,代码很挫,也希望予以指正,谢谢

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit dong=P3^0;      


uchar steptime=700;
uint flag=0;

void delaynms(uchar z)                //nms延时
{
          uchar x,y;
          for(x=z;x>0;x--)
          {
                   for(y=0;y<115;y++);             //1ms基准延时
          }
}


void main(void)
{
    EX0=1;
    EA=1;
    while(1)
        {                                    
        if(dong==0 | flag==1)
            {
                    if(dong==0)
                        {
                         flag=0;
                 while(1)
                 {
                     P1=0xFF;
                     delaynms(steptime);
                     delaynms(steptime);
                     delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         P1=0x00;
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                         delaynms(steptime);
                  }
                        }
            }

        }

}


void start() interrupt 0
{
    flag++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。