以下测试是在keil软件中的观察到的数据,仅供参考。 
/****************************************************************************** 
*函 数 名:void delay2(unsigned char i)  
*功能描述:0到510微秒延时函数 
*函数说明:实现几个微秒的延时,可直接用_nop_()函数,在11.0592M晶振下每 
执行一条用时为1.09或1.08(实际为1.09与1.08交替出现)。注意,在调用此函数 
时先包含:#include<intrins.h>10us以下用此函数延时误差大,可用_nop_()函数 
如下测试均在11.0592M的晶振下 
delay2(1):延时约2us,实际为429.69-422.09=5.60us 
可用2条_nop_():延时约2us,实际为424.26-422.09=2.17us 
delay2(2):延时约4us,实际为431.86-422.09=9.77us 
可用4条_nop_():延时约4us,实际为426.43-422.09=4.34us 
delay2(3):延时约6us,实际为434.03-422.09=11.94us 
可用6条_nop_():延时约6us,实际为428.60-422.09=6.51us 
delay2(4):延时约8us,实际为436.20-422.09=14.11us 
可用条_nop_():延时约8us,实际为430.77-422.09=8.68us 
10us以上的延时调用此函数延时间约为2*i(us),误差慢慢减小 
delay2(10):延时约20us,实际为449.22-422.09=27.13us 
delay2(50):延时约100us,实际为536.02-422.09=113.93us 
delay2(100):延时约200us,实际为644.53-422.09=222.46us 
delay2(200):延时约400us,实际为861.55-422.09=439.44us 
delay2(255):延时约510us,实际为980.90-422.09=558.81us 
再增大i将溢出 
测试说明:测试上面用如下程序,422.09us为进入到main函数中开始测试的时间,测 
试时将用不到的函数注释掉 
#include<reg52.h> 
#include<intrins.h> 
#define uint unsigned int 
#define uchar unsigned char 
void delay2(uchar i)  
{ 
 
while(--i);  
} 
void delay(uint z) 
{ 
 
uint x,y; 
 
for(x=z;x>0;x--) 
 
for(y=115;y>0;y--); 
} 
void main() 
{ 
 
delay2(255); 
 
delay(66535); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
_nop_(); 
 
while(1); 
} 
******************************************************************************/ 
  
void delay2(uchar i)  
{ 
 
while(--i);  
} 
/*****************************************************************************/ 
 |   
     
  
 |