怎么用51定时器延时?找了很久,都没有,自己写了个,有问题.

2020-01-27 11:46发布

怎么实现不了呢?帮忙看看多谢!

void timer0_init(void)  
{
TMOD |=0x01;    //MODEL1,timer  
TH0=0xdC;             //定时10ms
  TL0=0x00;
  ET0=1;             //中断使能
TR0=1;                 //关闭定时器0
}

void T0_OverFlow(void) interrupt 1 //定时器0溢出中断,延时10ms
{
TH0=0xDC;
TL0=0x00;
  Time++;
  if(Time==50)
  {
    TR0=0;
     Time=0;
   }

void Delay_s(Uchar Num)
{
    while(TR0==0)
   {
    for(;Num>=0;Num--);
    TR0=1;
   }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
xieguangye2001
2020-01-27 12:03
定时器做延时一般是为个规避死等。如果你是为了做精确的死等可以这样做
main()
{
定时器初始化();

whlie
{
  .....
......
// 需要延时的位置
延时_s标志 =0;
定时器启动();
while(延时_s标志 ==0);
定时器关闭();
  ......
}
}

定时器中断
{
延时_s标志 = 1;
}

当然你可以把那部分代码写成Delay_s()但要注意参数传递。

一周热门 更多>