找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12036|回复: 21
收起左侧

帮忙,这个程序怎么得来的啊

[复制链接]
ID:3021 发表于 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
请高手帮忙,在下感激不尽
回复

使用道具 举报

ID:3271 发表于 2008-7-21 15:06 | 显示全部楼层
着是一个延时程序
回复

使用道具 举报

ID:3569 发表于 2008-7-22 13:48 | 显示全部楼层

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

回复

使用道具 举报

ID:3021 发表于 2008-7-29 21:06 | 显示全部楼层
谢谢帮忙,在下明白了
回复

使用道具 举报

ID:4024 发表于 2008-8-5 15:50 | 显示全部楼层

路过

回复

使用道具 举报

ID:4839 发表于 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就可以了! 这样的延时不和很准,只是大概的,用在要求不高的场合,要想准确就要用定时器!
回复

使用道具 举报

ID:7199 发表于 2008-12-3 13:02 | 显示全部楼层
楼上说得很好
回复

使用道具 举报

ID:5875 发表于 2009-2-26 21:15 | 显示全部楼层
这延时程序自己琢磨了好久才明白它的算法。。不过还好自己搞懂,记的特牢
回复

使用道具 举报

ID:8765 发表于 2009-2-26 23:15 | 显示全部楼层
之前有认真算过长时间不算又忘的差不多了
回复

使用道具 举报

ID:11013 发表于 2009-4-11 08:42 | 显示全部楼层

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

回复

使用道具 举报

ID:11309 发表于 2009-4-16 13:48 | 显示全部楼层

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

回复

使用道具 举报

ID:11709 发表于 2009-5-14 21:46 | 显示全部楼层
执行数值移动的指令用一个机器周期,那个DJNZ的指令执行一次用2个机器周期,你算算用多少时间就明白了,就像是楼上说的那样,这样延时不准确。要是想严格定时还得用定时/计数器的定时功能。
回复

使用道具 举报

ID:13151 发表于 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
差不多就是这么算的
回复

使用道具 举报

ID:13151 发表于 2009-5-24 22:21 | 显示全部楼层
我上面是算的12MHZ晶振。不要乱代了机器周期时间。
回复

使用道具 举报

ID:13825 发表于 2009-6-11 10:26 | 显示全部楼层
总延时:2微妙乘R7乘R6乘R5=2微妙X50X20X248=496000微妙=0.496S
回复

使用道具 举报

ID:14096 发表于 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
貌似很容易理解吧?
回复

使用道具 举报

ID:14104 发表于 2009-6-11 13:48 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

ID:14095 发表于 2009-7-7 21:21 | 显示全部楼层

呵呵  路过

回复

使用道具 举报

ID:24661 发表于 2010-6-23 15:24 | 显示全部楼层
前三条指令是把操作地址放到寄存器中,后三条指令是循环空操作,旨在延时
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表