xiaoming2202

不断学习,,小明666,加油!

51单片机延时函数

0
阅读(5119)

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应以字母下划线开头

图片.png

图片.png