怎么用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;
   }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
qq511153186
1楼-- · 2020-01-28 06:34
上面几楼貌似都把问题找出来了
jswd0810
2楼-- · 2020-01-28 08:31
 精彩回答 2  元偷偷看……
xieguangye2001
3楼-- · 2020-01-28 11:39
jswd0810 发表于 2013-6-28 11:02
while(延时_s标志 ==0);
你这句在中断标志位置1前也退不出去呀,其它程序也不能执行 ...


楼主要的就是死等,不执行其他的程序。
如果不死等,改成
if(延时_s标志 ==1)
{
延时_s标志 = 0;
//延时时间到执行程序
}
1501697860
4楼-- · 2020-01-28 12:39
xieguangye2001 发表于 2013-6-28 11:52
楼主要的就是死等,不执行其他的程序。
如果不死等,改成
if(延时_s标志 ==1)

多谢你的回复

一周热门 更多>