標(biāo)題: 幫忙,這個程序怎么得來的啊 [打印本頁]

作者: lidavid    時間: 2008-7-21 13:06
標(biāo)題: 幫忙,這個程序怎么得來的啊
我是單片機(jī)學(xué)習(xí)新手,有個問題想請問高手們。請問以下的程序是如何得來的,那些數(shù)字是根據(jù)什么算來的?
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

正如二樓說的 是一個延時程序,數(shù)據(jù)是根據(jù)須要來定的,一條指令比如說要使用1個機(jī)器周期,晶振是12m,要延時1s,那么你就可以根據(jù)這些數(shù)據(jù)來定,指令中的那些立即數(shù)了


作者: 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(每執(zhí)行一次為四個指令周期也就是4微妙,這個指令要執(zhí)行125次,也就是500微妙) DJNZ R1,YS2(這條指令一次要0.5ms要執(zhí)行100次,就是50ms) DJNZ R0,YS1(這條指令一次要50ms,要執(zhí)行10次,就是500ms既0.5S) RET 要想調(diào)整時間可以調(diào)整R0和R1的大小,不要超過256就可以了! 這樣的延時不和很準(zhǔn),只是大概的,用在要求不高的場合,要想準(zhǔn)確就要用定時器!
作者: wanghuailin    時間: 2008-12-3 13:02
樓上說得很好
作者: yann    時間: 2009-2-26 21:15
這延時程序自己琢磨了好久才明白它的算法。。不過還好自己搞懂,記的特牢
作者: yunpin665    時間: 2009-2-26 23:15
之前有認(rèn)真算過長時間不算又忘的差不多了
作者: szrunluo    時間: 2009-4-11 08:42

延時,不知怎樣才能算出精確的延時


作者: zhang_daijh    時間: 2009-4-16 13:48

哈哈,我也是好像剛明白點(diǎn)。


作者: 瀏陽    時間: 2009-5-14 21:46
執(zhí)行數(shù)值移動的指令用一個機(jī)器周期,那個DJNZ的指令執(zhí)行一次用2個機(jī)器周期,你算算用多少時間就明白了,就像是樓上說的那樣,這樣延時不準(zhǔn)確。要是想嚴(yán)格定時還得用定時/計數(shù)器的定時功能。
作者: 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晶振。不要亂代了機(jī)器周期時間。
作者: 小陸    時間: 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
學(xué)習(xí)了,謝謝
作者: nishibeitina    時間: 2009-7-7 21:21

呵呵  路過


作者: RF射頻電路    時間: 2010-6-23 15:24
前三條指令是把操作地址放到寄存器中,后三條指令是循環(huán)空操作,旨在延時




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1