微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个关于定时查询问题

一个关于定时查询问题

时间:10-02 整理:3721RD 点击:
这是代码:#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;
        }
   }
}

你确定这个是正确的代码吗,问题在于TF0不等于1的时候,TH0和TL0会不停的赋初值,这样TF0不可能会等于1。

楼上正解

这个程序有问题!

额,已解决了。

可以将解决的方法分享出来吗?可以让别的碰到这个问题的朋友从你这里找到解决方法。

你这个程序是跑不起来的,要改成这样,道理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;
                        }
                }
        }
}

#include <reg51.h>unsigned char count=0;
void main()
{
  TMOD|=0x01;
  TH0=0x3c;                  
  TL0=0xb0;
  TR0=1;
  while(1)
  {                                    
  if(TF0==1)                    
  {         TH0=0x3c;                  
       TL0=0xb0;                              
       count++;                  
       TF0=0;        
     if(count==20)                  
        {
           count=0;
           P2=~P2;
        }
   }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top