找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10885|回复: 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
请高手帮忙,在下感激不尽
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:3271 发表于 2008-7-21 15:06 | 只看该作者
着是一个延时程序
回复

使用道具 举报

板凳
ID:3569 发表于 2008-7-22 13:48 | 只看该作者

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

回复

使用道具 举报

地板
ID:3021 发表于 2008-7-29 21:06 | 只看该作者
谢谢帮忙,在下明白了
回复

使用道具 举报

5#
ID:4024 发表于 2008-8-5 15:50 | 只看该作者

路过

回复

使用道具 举报

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

使用道具 举报

7#
ID:7199 发表于 2008-12-3 13:02 | 只看该作者
楼上说得很好
回复

使用道具 举报

8#
ID:5875 发表于 2009-2-26 21:15 | 只看该作者
这延时程序自己琢磨了好久才明白它的算法。。不过还好自己搞懂,记的特牢
回复

使用道具 举报

9#
ID:8765 发表于 2009-2-26 23:15 | 只看该作者
之前有认真算过长时间不算又忘的差不多了
回复

使用道具 举报

10#
ID:11013 发表于 2009-4-11 08:42 | 只看该作者

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

回复

使用道具 举报

11#
ID:11309 发表于 2009-4-16 13:48 | 只看该作者

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

回复

使用道具 举报

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

使用道具 举报

13#
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
差不多就是这么算的
回复

使用道具 举报

14#
ID:13151 发表于 2009-5-24 22:21 | 只看该作者
我上面是算的12MHZ晶振。不要乱代了机器周期时间。
回复

使用道具 举报

15#
ID:13825 发表于 2009-6-11 10:26 | 只看该作者
总延时:2微妙乘R7乘R6乘R5=2微妙X50X20X248=496000微妙=0.496S
回复

使用道具 举报

16#
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
貌似很容易理解吧?
回复

使用道具 举报

17#
ID:14104 发表于 2009-6-11 13:48 | 只看该作者
学习了,谢谢
回复

使用道具 举报

18#
ID:14095 发表于 2009-7-7 21:21 | 只看该作者

呵呵  路过

回复

使用道具 举报

19#
ID:24661 发表于 2010-6-23 15:24 | 只看该作者
前三条指令是把操作地址放到寄存器中,后三条指令是循环空操作,旨在延时
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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