怎么能让这段程序执行一次后不再循环呢

2020-01-27 11:50发布

bit K1=P1^0;
sbit K2=P1^1;
//sbit K3=P1^2;
//sbit K4=P1^5;
//sbit K5=P1^6;

sbit OUT1=P3^4;
sbit OUT2=P3^3;
sbit OUT3=P3^1;
sbit OUT4=P3^0;
unsigned char n,b,a,i;

void main()
{
    TMOD=0X01;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    EA=1;
    ET0=1;
    TR0=1;
    while(K1==0);
        {
        n=1;
        n++;
        }
        }
void Timer0(void) interrupt 1 using 1 //定时器0中断处理
{
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    n++;
        if(n>=20)
        {
        OUT1=0;OUT3=0;OUT2=1;
        }       
        if(n>=100)
        {
        OUT1=1;
        }
        if(n>=150)
        {
        OUT2=0;
        }       
        if(n>=200)
        {
        OUT2=1;OUT3=1;
        }

                                  //OUT3  总电源
        }
K1为外接启动信号,还有打算用K2作为备用中断信号接口,K2==0的时候也可以让out3=0,输出是低电平触发,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
wo55577276
2020-01-29 20:43
本帖最后由 wo55577276 于 2013-6-23 11:46 编辑

void main()
{          P1=0xff;
        P3=0xff;
    TMOD=0X01;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    EA=1;
    ET0=1;
    TR0=1;
   while(K1==0)
     {if(OUT4==0)
        {while(K1==0)
        n=0;
        n++;
     }
        //while(1);
        }
                }
void Timer0(void) interrupt 1 using 1 //定时器0中断处理
{
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    if (n<=20) {n++;}
        if(n==20)
        {n=0;b++;
        }       
    if(b==2)                                                       
        {OUT1=0;OUT3=0;                        //开启        (4秒)
        }
        if(b==450)                                         //停止
        {
        OUT1=1;
        }       
        if(b==1350)                                         //开启
        {
        OUT2=0;
        }                  
        if(b==2150)                                          //停止
        {
        OUT2=1;OUT3=1;OUT4=0;         
        }
        }
         
         
          这样解决了 新的问题来了 我测试短时间是可以的,比如b==5,10,15,20误差也就是一秒钟,但是我设置b==900或者1800的时候就始终out1=0不变了 按理说900的时候时间应该是半小时误差允许的话也就三分钟之内,但是等待了四十五分分钟仍然没有跳变,是怎么回事呢,问题出在哪里了,求教高手

一周热门 更多>