51单片机延时问题 延时函数与实际时间相差5倍?
你所说的情况未能复现。500毫秒无问题。
你在你的第17行打断点,看看每个周期的情况。
一个keil c51延时程序,晶振频率11.0592MHz,延时怎么算的,延时多少?
1.一个keil c51延时程序,晶振频率11.0592MHz
delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
延时时间为t=z微秒=0.001*z秒
2.也可以用定时/计数器
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
当tt=20时刚好是1秒
在KEIL软件中建立51单片机工程,要求每隔500ms点亮上题中1个led灯,依次完成8个led灯点亮过程
#include reg52.h
//点亮八位共阳
unsigned char led=0xfe; //8个bit位的数
unsigned int counter=0;
void time_init()
{
TMOD=0x01;//定时器0,工作模式1,16位定时器
TH0=0xb4;
TL0=0x00; //定时器初始值46080,定时50ms;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//运行定时器
}
void main()
{
time_init();
for(;;)
{
P1=led;
}
}
void time_inter() interrupt 1
{
IT0=1;//清除中断标志
TH0=0xb4;
TL0=0x00;
counter++;
if(counter==10) //500ms延时
{
counter=0;
led=led1;//点亮下一个灯
}
}
//点亮八位共阴
/*
unsigned char led=0x01,led1=0x01; //8个bit位的数
unsigned int counter=0;
void time_init()
{
TMOD=0x01;//定时器0,工作模式1,16位定时器
TH0=0xb4;
TL0=0x00; //定时器初始值46080,定时50ms;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//运行定时器
}
void main()
{
time_init();
for(;;)
{
P1=led;
}
}
void time_inter() interrupt 1
{
IT0=1;//清除中断标志
TH0=0xb4;
TL0=0x00;
counter++;
if(counter==10) //500ms延时
{
counter=0;
led1=led;
led1=led11;//点亮下一个灯
led=led|led1;
}
}
*/
个人自写,亲试有效。欢迎交流