请问51单片机怎么用定时器延时?

之前我编写的小定时函数(我省略了定义):
void delay(unsigned int t)
{ while(--t);}
void main()
{ for(i=0;i<8;i++)
{P1=LED[i];
BZ=0;
delay(2050);}
for(j=0;j<8;j++)
{P1=LED0[j];
BZ=1;
delay(2050);}
}
那么上面这个我用的是软件延时,但是我怎么能用定时器代替这段函数,就是能不能直接在上面定义完定时器后直接在主函数中调用?我编写了以下的函数,但是好像不对劲。。
void Timer_0()
{ TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;}
void Timer_IRS() interrupt 1
{ TH0=0x00;
TL0=0x00;
BZ=~BZ;}
void mian()
{ Timer_0();
while(1)
{for(i=0;i<8;i++)
{P1=LED[i];}
}
好像实现不了我第一段用软件延时编写的程序的功能,请问我该怎么改还是说,直接就是错的。
除了这种,我在编程的途中可以随时调用delay函数进行延时,可是这个定时器是不是没办法直接调用,必须得等待溢出打断,如果这样的话它怎么代替延时函数?
小弟刚刚学习51单片机,学到定时器这里卡主了,苦思冥想一晚上还有许多疑问解不开,请各位资深大哥帮我一帮~~万分感谢~~
对了,忘记说一点,BZ我设置的是蜂鸣器,好惆怅。。

51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分
别为1 μs和2 μs,便于精确延时。
温馨提示:答案为网友推荐,仅供参考
相似回答