以下测试是在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);
}
/*****************************************************************************/
|