标题: 帮忙,这个程序怎么得来的啊 [打印本页]
作者: 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 |