延时20us

[复制链接]
4641|13
 楼主| ksslx 发表于 2007-9-28 15:53 | 显示全部楼层 |阅读模式
51单片机用c程序 延时20us
怎么样可以做到?
wyhkerry 发表于 2007-9-28 16:23 | 显示全部楼层

可以啊

用—nop();语句 循环就可以了哈 如果对延迟要求不是那么精确的哈!
etual 发表于 2007-9-28 16:39 | 显示全部楼层

easy

20us比较短,直接死循环算了。
 楼主| ksslx 发表于 2007-9-28 16:42 | 显示全部楼层

补充一下

补充一下:
我用的晶振是22.1184M的
wyhkerry 发表于 2007-9-28 17:15 | 显示全部楼层

nop() 空操作

 楼主| ksslx 发表于 2007-9-28 17:41 | 显示全部楼层

望详细指点一下

大师们,能详细说明一下吗?不胜感激!
OneMillion 发表于 2007-9-28 19:58 | 显示全部楼层

你要怎么点?

 楼主| 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   
top_mao 发表于 2007-9-29 09:34 | 显示全部楼层

楼主还是没有好好看书呀

楼主要好好学学汇编呀。每条指令的执行都要花时间的,叫做指令周期,C写的程序也是一样的。如果你想精确的的算出时间,你可以搜一下我以前发过的贴。
 楼主| ksslx 发表于 2007-9-29 10:09 | 显示全部楼层

楼上的

你以前发过的帖?  怎么搜?
叶疯弧 发表于 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
}
ayb_ice 发表于 2007-10-4 16:53 | 显示全部楼层

20个NOP

123654789 发表于 2007-10-4 16:55 | 显示全部楼层

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

awey 发表于 2007-10-4 17:07 | 显示全部楼层

22.1184M,周期是0.045211226851851851851851851851852uS

如果是常用的AT51MCU,最小指令周期是0.54253472222222222222222222222222uS,20uS需执行单周期指令(NOP)36.864条。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部