标题: 帮忙,这个程序怎么得来的啊 [打印本页]

作者: lidavid    时间: 2008-7-21 13:06
标题: 帮忙,这个程序怎么得来的啊
我是单片机学习新手,有个问题想请问高手们。请问以下的程序是如何得来的,那些数字是根据什么算来的?
DELAY:  MOV  R3, #50;
   D1:  MOV  R4, #20;
   D2:  MOV  R5, #248;
        DJNZ R5, $;
        DJNZ R4, D2;
        DJNZ R3, D1;
        RET
        END
请高手帮忙,在下感激不尽

作者: a13758777532    时间: 2008-7-21 15:06
着是一个延时程序
作者: blackeagle    时间: 2008-7-22 13:48

正如二楼说的 是一个延时程序,数据是根据须要来定的,一条指令比如说要使用1个机器周期,晶振是12m,要延时1s,那么你就可以根据这些数据来定,指令中的那些立即数了


作者: lidavid    时间: 2008-7-29 21:06
谢谢帮忙,在下明白了
作者: jxjiangjun    时间: 2008-8-5 15:50

路过


作者: nglmh2006    时间: 2008-9-2 23:11
YS0: MOV R0,#10 YS1: MOV R1,#100 YS2: MOV R2,#7DH(其实是125) YS3: NOP NOP DJNZ R2,YS3(每执行一次为四个指令周期也就是4微妙,这个指令要执行125次,也就是500微妙) DJNZ R1,YS2(这条指令一次要0.5ms要执行100次,就是50ms) DJNZ R0,YS1(这条指令一次要50ms,要执行10次,就是500ms既0.5S) RET 要想调整时间可以调整R0和R1的大小,不要超过256就可以了! 这样的延时不和很准,只是大概的,用在要求不高的场合,要想准确就要用定时器!
作者: wanghuailin    时间: 2008-12-3 13:02
楼上说得很好
作者: yann    时间: 2009-2-26 21:15
这延时程序自己琢磨了好久才明白它的算法。。不过还好自己搞懂,记的特牢
作者: yunpin665    时间: 2009-2-26 23:15
之前有认真算过长时间不算又忘的差不多了
作者: szrunluo    时间: 2009-4-11 08:42

延时,不知怎样才能算出精确的延时


作者: zhang_daijh    时间: 2009-4-16 13:48

哈哈,我也是好像刚明白点。


作者: 浏阳    时间: 2009-5-14 21:46
执行数值移动的指令用一个机器周期,那个DJNZ的指令执行一次用2个机器周期,你算算用多少时间就明白了,就像是楼上说的那样,这样延时不准确。要是想严格定时还得用定时/计数器的定时功能。
作者: shu33120    时间: 2009-5-24 22:18
DELAY:  MOV  R3, #50;   1US
   D1:  MOV  R4, #20;     1US    
   D2:  MOV  R5, #248;   1US
        DJNZ R5, $;           2US
        DJNZ R4, D2;         2US
        DJNZ R3, D1;         2US
        RET                  
        END
DELAY的时间       D1                 D2        DJNZ R5……       DJNZ R4……        DJNZ R3……
1       +            (1        +      ( 1   +      2*248    +            2)*20 +         2)*50
差不多就是这么算的
作者: shu33120    时间: 2009-5-24 22:21
我上面是算的12MHZ晶振。不要乱代了机器周期时间。
作者: 小陆    时间: 2009-6-11 10:26
总延时:2微妙乘R7乘R6乘R5=2微妙X50X20X248=496000微妙=0.496S
作者: 小妮子    时间: 2009-6-11 10:45
DELAY:  MOV  R3, #50;                 延时:50×20×248×2μs=0.5s
   D1:  MOV  R4, #20;
   D2:  MOV  R5, #248;
        DJNZ R5, $;               $的意思就是原地等待
        DJNZ R4, D2;
        DJNZ R3, D1;
        RET
        END
貌似很容易理解吧?
作者: xiaowei    时间: 2009-6-11 13:48
学习了,谢谢
作者: nishibeitina    时间: 2009-7-7 21:21

呵呵  路过


作者: RF射频电路    时间: 2010-6-23 15:24
前三条指令是把操作地址放到寄存器中,后三条指令是循环空操作,旨在延时




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1