freetech

HCS08微秒级的延时的函数

0
阅读(4463)

一个应用中用到精确延时,用纯C程序不太容易实现,用汇编写了一段分享给大家。下面程序是总线时钟8MHz的情况下做的:

void delayus(word us)
{
  asm
  {
    aix #-2                            // (2 c: 250 ns)减掉程序调用和返回时间2uS
    //1 us @ 8MHz,(8 c, 1000 ns)
loop:
    aix #-1                            // (2 c: 250 ns)
    cphx #0                            // (3 c: 375 ns)
    bne loop                           // (3 c: 375 ns)
    rts                                // (6 c: 750 ns)
  }
}

上述代码的循环部分刚好1uS,循环外的aix和rts共8个周期也是1uS,调用的代码见下图,也是8个周期即1uS。这样调用和返回共占用2uS,函数开头的“aix #-2”把这2uS减掉,即循环次数是“参数-2”。

image