求助:大循环的定时器


请问 在while循环里面是不是不能开启定时器的
我用的是C51的定时器1

[ 本帖最后由 chen88 于 2008-9-9 02:11 编辑 ]

我也来说两句 查看全部回复

最新回复

  • lzl520f4 (2008-9-09 08:52:18)

    可以吧.    你把开启定时器写在while循环里出现什么问题了.
  • chen88 (2008-9-09 10:27:24)

    void bj()  //m,n比较
    {  
        m=fabs(get-set);
       n=(get-set);
    if(n>0)
    {
      P1_3=0;
      P1_4=1;
      get--;
      display(get);
      delay(20);
    }

    if(n<0)
    {
      P1_3=0;
      P1_4=0;
      get++;
      display(get);
       delay(20);
    }
    if(n==0&&m==0)
    {
      P1_3=0;
      P1_4=1;
      P1_5=1;
      P1_6=1;
      P1_7=0;
      
    }
    if(m>20)
    {
    P1_5=0;
    P1_6=1;
    P1_7=1;
    }
    if((0<m)&&(m<10))
    {
    P1_7=0;
    P1_6=1;
    P1_5=1;
        }
    if((m>=10)&&(m<=20))
    {
    P1_6=0;
      P1_7=1;
    P1_5=1;
    }
    }
    void  init()
    {
             TMOD=0x10;
            TH1=(65536-50000)/256;  //定时器初始化
            TL1=(65536-50000)%256;
            EA=1;
            ET1=1;
            TR1=1;
    }
      void timer0() interrupt   3
    {
            TH1=(65536-50000)/256;
            TL1=(65536-50000)%256;
            t0++;
             if(t0==2400)
             {
                     t0=0;
                    TR1=0;
                    P1_3=1;
             }
            }
    void main()
    {

                       adc0808();
            get=gt*10;
            set=240;
            m=fabs(get-set);
              n=(get-set);
            while(1)
            {
                           if(m==n)
                          init();
             display(get);
            bj();
                       if(P1_0==0||P1_1==0||P1_2==0)
            {
            delay(5);
                        if(P1_0==0||P1_1==0||P1_2==0)
            {
            key=1;
            while(key)
            setplay();
            bj();
            }
            }
             }
    }   (部分子函数程序省略)

    问题是当m==n的时候,timer0没有工作的
    要实现的功能是  当m==n超过2分钟的时候,P1_3=1;

    [ 本帖最后由 chen88 于 2008-9-9 10:47 编辑 ]