打印

单片机软件延时简单测试

[复制链接]
2175|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suoma|  楼主 | 2009-12-1 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下测试是在keil软件中的观察到的数据,仅供参考。
/******************************************************************************
* 名:void delay2(unsigned char i)
*功能描述:0510微秒延时函数
*函数说明:实现几个微秒的延时,可直接用_nop_()函数,在11.0592M晶振下每
执行一条用时为1.091.08(实际为1.091.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);

}
/*****************************************************************************/
沙发
suoma|  楼主 | 2009-12-1 17:01 | 只看该作者
/******************************************************************************

*函 数 名:void delay(uint z)

*功能描述:0到65535毫秒延时函数

*函数说明:在11.0592M的晶振下

delay(1):延时约1ms,实际为1.44875-0.42209=1.02666ms

(0.42209ms为进入到main函数中开始测试的时间)

delay(50):延时约50ms,实际为51.05469ms

delay(100):延时约100ms,实际为101.67318ms

delay(1000):延时约1000ms,实际为1012.84576ms

delay(50000):延时约50000ms,实际为50619.56055ms

delay(65535):延时约65535ms,实际为66346.92166ms

再往上增,就出错了,延时长短是其补码对应大小如:

delay(66535):延时约1000ms,实际为1011.80339ms

******************************************************************************/

void delay(uint z)

{

         uint x,y;

         for(x=z;x>0;x--)

                   for(y=115;y>0;y--);

}

/*****************************************************************************/

使用特权

评论回复
板凳
wangwo| | 2009-12-1 17:30 | 只看该作者
学习!赞美楼主:)

使用特权

评论回复
地板
lovelyegle| | 2009-12-3 23:08 | 只看该作者
顶一个!

使用特权

评论回复
5
huamunv| | 2009-12-3 23:15 | 只看该作者
好东西!

使用特权

评论回复
6
suoma|  楼主 | 2009-12-4 21:53 | 只看该作者
希望对大家有用

使用特权

评论回复
7
god_like| | 2009-12-5 21:54 | 只看该作者
不错学习了

使用特权

评论回复
8
god_like| | 2009-12-5 21:54 | 只看该作者
支持LZ:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

714

帖子

5

粉丝