[新人求助]一个关于定时查询问题

2019-07-15 11:16发布

这是代码:#include <reg51.h>unsigned char count=0;
void main()
{
  TMOD|=0x01;
  TH0=0x3c;                  //给一个初值;计数满了就使TF0=1;
  TL0=0xb0;
  TR0=1;
  while(1)
  {
    TH0=0x3c;                 //问题在这里:我的理解是进入了循环之后又开始计数,因为还没记满,                  TL0=0xb0;                     往后执行代码, TF==1执行下面语句,完了循环回来;                     
  if(TF0==1)                      重点来了:定时又重新从初值开始计,上次并没有记满所以TF0==1
  {                                   还是初值时那次,TF0依然等于初值那次;然后依然会执行下面语句,直到
       count++;                   20次;会一 亮一闪; //谁能详细解答哈,虽然黑简单,谢谢;

       TF0=0;        
     if(count==20)                  
        {
           count=0;
           P2=~P2;
        }
   }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
wulinwl
2019-07-16 10:17
你这个程序是跑不起来的,要改成这样,道理2楼已解释。
#include <reg51.h>
unsigned char count=0;
void main()
{
        TMOD|=0x01;
        TH0=0x3c;                  //给一个初值;计数满了50ms就使TF0=1;
        TL0=0xb0;
        TR0=1;

        while(1)
        {
//                TH0=0x3c;                 //问题在这里:我的理解是进入了循环之后又开始计数,因为还没记满,                  
//                TL0=0xb0;                     //往后执行代码, TF==1执行下面语句,完了循环回来;                     
                if(TF0==1)                      //重点来了:定时又重新从初值开始计,上次并没有记满所以TF0==1
                {                                   //还是初值时那次,TF0依然等于初值那次;然后依然会执行下面语句,直到
                        count++;                   //20次;会一 亮一闪; //谁能详细解答哈,虽然黑简单,谢谢;
                        TH0=0x3c;
                        TL0=0xb0;      
                        TF0=0;        
                        if(count==20)                  
                        {
                                count=0;
                                P2=~P2;
                        }
                }
        }
}

一周热门 更多>