51单片机C语言延迟函数解惑

51单片机的延迟函数一般分为用while实现和用for实现两种,while一般可实现微秒级延迟,而for循环一般实现毫秒级查询,实现代码如下:

delay_us(int n)

{

while(n--);

}

delay_ms(int n)

{

for(i=n;i>0;i--)

    for(j=0;j<110;j++)

    ;

}

下面分析一下原理:

1、while(n--);循环需要执行n个机器周期,一个机器周期为12个时钟周期,一个时钟周期是1/(11.0592*1000000)秒,所以一个机器周期为12*1/(11.0592*1000000)秒,约1.09微秒,所以delay_us()所用时间为n*1.09微秒。

2、要计算delay_ms()函数的执行时间,可以按照如下步骤:

1)计算for(j=0;j<110;j++);的执行时间

a.计算每个循环的执行时间:每次循环包括三个操作:j的自增,比较j和110,跳转到循环开头。假设每个操作的执行时间为1个机器周期,则每次循环的执行时间为3个机器周期;

b.计算整个循环的执行时间:循环体中有110次循环,因此整个循环的执行时间为110*3=330个机器周期。

2)计算for(i=n;i>0;i--)的执行时间

类似第1)步,整个循环的执行时间为n*3个机器周期

3)所以delay_ms()总的执行时间为n*3*330=n*990个机器周期,约n*990*1.09=n*1079微秒,即n毫秒左右。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值