51单片机延时函数
0赞51单片机延时函数
void delay()uiint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=114;y>0;y--);//1MS
}
}
为什么是114次呢?因为以下程序经过在keil中运行,计算出一次循环的时间约为8.7us 1000/8.7=114
****************************
void main()
{
INT16U y;
while(1)
{
delay_5us();
Delay5us();
for(y = 100; y > 0 ; y--);
delay(10);
Delay_Ms(10);
}
}
**************************
??但是我自己有个疑问kile中显示的时间这是硬件or软件的时间?
第一个延时函数是在晶振频率11.0592MHZ下的延时函数,而以下的函数能。。。
*************参数 自动 适应主时钟*************
#define MAIN_Fosc 11099200UL//unsigned long型,,,此时设置为11059200
Typedef unsigned int INT16U;
void Delay_Ms(INT16U ms)
{
INT16U I;
do{
i=MAIN_Fosc/96000;
while(--i);//96个时钟周期,8个机器周期
}while(--ms);
}
void Delay5us()
{
#if MAIN_Fosc == 11059200
_nop_();
#elif MAIN_Fosc == 12000000
_nop_();
#elif MAIN_Fosc == 22118400
_nop_(); _nop_(); _nop_();
#endif
}
3.1415926应以字母下划线开头