若晶振频率为12MHZ,设计一个100ms的延时程序
3个回答
展开全部
直接用定时器啊, 很精确。通过软件延时优化项改变了,时间久不精确了。使用定时器1来延时
static unsigned char flag=0;//用来标记计时到100ms
void InitT0(void)
{
TMOD &=0XF0;
TMOD |= 0X01;
TH0 = -(50000/256);
TL0 = -(50000u%256);
ET0 = 1; //中断允许
TR0 = 1; // 运行定时器
}
void ISR_T0() interrupt 1 //定时为50ms中断一次
{
TH0 = -(50000/256);
TL0 = -(50000u%256);
flag ++;
}
50MS执行一次中断,执行俩次中断函数 精确延时100ms
在需要延时100ms的函数中判断flag即可。
static unsigned char flag=0;//用来标记计时到100ms
void InitT0(void)
{
TMOD &=0XF0;
TMOD |= 0X01;
TH0 = -(50000/256);
TL0 = -(50000u%256);
ET0 = 1; //中断允许
TR0 = 1; // 运行定时器
}
void ISR_T0() interrupt 1 //定时为50ms中断一次
{
TH0 = -(50000/256);
TL0 = -(50000u%256);
flag ++;
}
50MS执行一次中断,执行俩次中断函数 精确延时100ms
在需要延时100ms的函数中判断flag即可。
展开全部
void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
这个是延时Xms delay(100)就可以延时100ms
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
这个是延时Xms delay(100)就可以延时100ms
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-03-14
展开全部
12M晶振普通51单片机。
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
}
包准。
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
}
包准。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询