跨届大侠
北京龙邱智能科技有限公司
- 积分
- 10332
- 威望
- 2905
- 贡献
- 6151
- 兑换币
- 4515
- 注册时间
- 2008-6-7
- 在线时间
- 638 小时
|
本帖最后由 chiusir 于 2010-8-3 09:37 编辑
用PE生成的一个比较精确的100微秒延时函数,供大家参考,如果需要其它频率的,可以留言请求。
开发环境:
CW:5.0
CRYSTAL:16MHZ
PLLCLK:32MHZ
void Cpu_Delay100US(word us100)
{
/* irremovable overhead (ignored): 13 cycles */
/* ldd: 2 cycles overhead (load parameter into register) */
/* jsr: 4 cycles overhead (call this function) */
/* rts: 7 cycles overhead (return from this function) */
/* irremovable overhead for each 100us cycle (counted): 13 cycles */
/* dbne: 3 cycles overhead (return from this function) */
asm {
loop:
/* 100 us delay block begin */
/*
* Delay
* - requested : 100 us @ 16MHz,
* - possible : 1600 c, 100000 ns
* - without removable overhead : 1597 c, 99812.5 ns
*/
pshd /* (2 c: 125 ns) backup D */
ldd #530 /* (2 c: 125 ns) number of iterations */
label0:
dbne d, label0 /* (3 c: 187.5 ns) repeat 530x */
puld /* (3 c: 187.5 ns) restore D */
/* 100 us delay block end */
dbne d, loop /* us100 parameter is passed via D register */
rts /* return from subroutine */
}
} |
|