打印

延时20us

[复制链接]
3387|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ksslx|  楼主 | 2007-9-28 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wyhkerry| | 2007-9-28 16:23 | 只看该作者

可以啊

用—nop();语句 循环就可以了哈 如果对延迟要求不是那么精确的哈!

使用特权

评论回复
板凳
etual| | 2007-9-28 16:39 | 只看该作者

easy

20us比较短,直接死循环算了。

使用特权

评论回复
地板
ksslx|  楼主 | 2007-9-28 16:42 | 只看该作者

补充一下

补充一下:
我用的晶振是22.1184M的

使用特权

评论回复
5
wyhkerry| | 2007-9-28 17:15 | 只看该作者

nop() 空操作

使用特权

评论回复
6
ksslx|  楼主 | 2007-9-28 17:41 | 只看该作者

望详细指点一下

大师们,能详细说明一下吗?不胜感激!

使用特权

评论回复
7
OneMillion| | 2007-9-28 19:58 | 只看该作者

你要怎么点?

使用特权

评论回复
8
ksslx|  楼主 | 2007-9-28 20:02 | 只看该作者

还是有疑问阿

用的是22.1184M的晶振,怎么延时20us?又怎么延时20ms?真的是搞不明白...
//20ms
   for (j = 0; j < 10; j++)
    {
        for(i = 0; i < 20; i++) _nop_(); //20us   

使用特权

评论回复
9
top_mao| | 2007-9-29 09:34 | 只看该作者

楼主还是没有好好看书呀

楼主要好好学学汇编呀。每条指令的执行都要花时间的,叫做指令周期,C写的程序也是一样的。如果你想精确的的算出时间,你可以搜一下我以前发过的贴。

使用特权

评论回复
10
ksslx|  楼主 | 2007-9-29 10:09 | 只看该作者

楼上的

你以前发过的帖?  怎么搜?

使用特权

评论回复
11
叶疯弧| | 2007-10-1 16:05 | 只看该作者

我的程序 给你参考一下 16M晶振 两周期指令

void delay_1ms(void)
{
    uint i=880;//already validated by oscillograph
    do
    {
    }while(--i);
/*
    call            7 clock
    push    HL        4 clock
    movw    HL,880        6 clock
Delay1:DECW    HL        4 clock
    movw    AX,HL        6 clock
    OR      A,X        4 clock
    BNZ     $_Delay1    6 clock    
    POP     HL        4 clock
    RET            6 clock
*/
//about 7+4+6+4+880*(4+6+4+6)=17618 clock=17618/16 us=1.101ms
}

使用特权

评论回复
12
ayb_ice| | 2007-10-4 16:53 | 只看该作者

20个NOP

使用特权

评论回复
13
123654789| | 2007-10-4 16:55 | 只看该作者

for(j=0;j<20;j++);

使用特权

评论回复
14
awey| | 2007-10-4 17:07 | 只看该作者

22.1184M,周期是0.045211226851851851851851851851852uS

如果是常用的AT51MCU,最小指令周期是0.54253472222222222222222222222222uS,20uS需执行单周期指令(NOP)36.864条。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

粉丝