单片机延迟程序

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:09:26
//T0计时器用于产生延迟,采用查询方式;T1计时器用于产生声音,采用计时方式,P1口有灯泡
#include "reg51.h"
#define uint unsigned int

Delay(uint mDelay);

main()
{
unsigned char i;
EA = 1;
ET0 = 1;

P1 = 0;
while(1)
{
for(i=0; i<=100; i++)//5s
Delay(50000);//delay for 50ms
P1 = ~P1;
}
}

Delay(uint mDelay)
{
TMOD = TMOD|0x01;
TH0 = (-mDelay)/256;
TL0 = (-mDelay)%256;
TR0 = 1;
while(1)
{
if(TF0 == 1)
break;
}
}
程序如上,请问下为什么延时没用啊?

你干嘛要把TMOD TH0 TL0 TR0这些值要写在延时函数里面呢
你怎么又是延时 又是计数的啊 到底要怎么用嘛
普通的延时是没的定时器计数的准确的
哦 懂你意思了
你是用定时器定时50ms 再用for循环达到5s的效果

#include "reg51.h"
#define uint unsigned int
Delay(uint mDelay);
void main()
{
unsigned char i;
EA = 1;
ET0 = 1;
TMOD = TMOD|0x01;
TH0 = (-mDelay)/256;
TL0 = (-mDelay)%256;
TR0 = 1;
P1 = 0;
while(1)
{
for(i=0; i<=100; i++)//5s
Delay(50000);//delay for 50ms
P1 = ~P1;
}
}

Delay(uint mDelay)
{
if(TF0 == 1)
break;
}