您的位置 首页 电路

单片机延时准确核算

在不同单片机中,有不同的单片机指令。每个指令都占用不同的时钟周期。一般延时程序就是通过循环去达到延时的作用。下面以最基础的51单片机…

在不同单片机中,有不同的单片机指令。每个指令都占用不同的时钟周期。一般延时程序便是经过循环去到达延时的效果。

下面以最根底的51单片机去做阐明:

我这边用我之前debug过的2个延时程序,晶振运用12M:

void delay_us_fun (unsigned int i)//us延时
{
while (i–);
}

这个是用来微秒级延时的,他在不同的参数i下,延时时刻分别为实践为(9*i+16)us,这些延时的实践时刻一般能够经过开发环境keil C51中模仿一下,看下时钟就知道了。

汇编好点的话也能够直接看汇编核算或许直接写汇编程序。

这时咱们能够运用下面宏去调用上面的接口

#define _delay_us(i)delay_us_fun((i)/9)

这边明显有点差错的。可是数值越大,差错就相对小点。

只是需求几us的延时,运用_NOP_();

下面ms级延时相同。

void delay_ms_fun (unsigned int mDelay1)//ms延时
{
unsigned int mDelay2;

for (; mDelay1 > 0; mDelay1–)
{
for (mDelay2 = 0; mDelay2 < 123; mDelay2++)
{
}
}
}

#define _delay_ms(i)delay_ms_fun((i*1000L)/998L)//实践为(i*1000-13)/998

总而言之,便是依据单片机的指令,还有每个指令占用的时钟周期核算出相对应的准确延时。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/266666.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部