HCS08微秒级的延时的函数
0赞
发表于 2012/10/9 17:03:09
阅读(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”。