关于us_ms级别的延迟函数的写法问题

在keil C51中,直接调用库函数:
#include          // 声明了void _nop_(void);

_nop_();                          // 产生一条NOP指令

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS

指令周期,执行一条指令所需要的时间称为指令周期,它是机器周期的整数倍,最短的是一个机器周期。

一个机器周期等于12个震荡周期(时钟周期),当震荡频率为12M时,单指令时间为1us。

以下的函数是在dsPIC30f6014上的例子

 

void delayus(int us)//1:30us,2:43us,3:56us
{
    while(us--)
        NOP();
}
/*
当us = 1时,延迟时间为30us,
当us=2时,延迟时间为43us
当us=3时,延迟时间为56us,
可以看出基本的调用时间为17us,每增加一次循环增加13us,
*/
void delayNms(uchar ms)
{
    uchar i;
    while(ms--)
    {
        for(i = 105; i>0; i--)
            NOP();
    }
        
}
//基本能够实现 1ms级别的延迟

转载于:https://www.cnblogs.com/zcmaker/archive/2012/11/17/2774940.html

你可能感兴趣的:(关于us_ms级别的延迟函数的写法问题)