找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3408|回复: 4
打印 上一主题 下一主题
收起左侧

关于单片机汇编语言延时子程序的时间计算

[复制链接]
跳转到指定楼层
楼主
ID:248898 发表于 2021-3-7 23:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
D1:

      MOV  R4,#20

D2:

      MOV  R5,#248
      DJNZ R5,$

      DJNZ R4,D2



就这么简单的延时子程序时间计算,最好能详细点说明为甚麽>本人才学单片机,例如这样吧,我不清楚为甚麽最后是1+20*499=9981  


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2021-3-7 23:45 | 只看该作者
这是一个嵌套循环。内层循环248次,(R5=248)DJNZ R5, #248,是2周期指令,每执行一次占用2个机器周期。

                         外层循环是20次,(R4=20)

                         所以20*248,就是执行次数,每次2周期,20*248*2=全部的机器周期。如果使用的晶振是12MHZ,每个机器周期刚好是1us

                         至于你的算式的前面的那个“1”,是执行“MOV  R4, #20" 指令的一个机器周期。其实“MOV  R5,  #248”也要执行20次,计算公式应该是20*248*2+20+1

                         另外,如果计时要求很苛刻时,包括调用“延时子程序”、“返回”所占用机器周期都需要计算进去的。
回复

使用道具 举报

板凳
ID:390416 发表于 2021-3-8 00:23 | 只看该作者
你算这么准确有什么用?中断一使用,误差从1% 瞬间提高到250%了
回复

使用道具 举报

地板
ID:798631 发表于 2021-3-8 08:55 | 只看该作者
初学的话  下功夫学C的吧   用的人多有问题好请教   
回复

使用道具 举报

5#
ID:858964 发表于 2021-3-10 16:26 | 只看该作者
设51系列单片机晶振频率Fosc为12MHz,
则每个机器周期 =12/Fosc =1μs ,
每条MOV Rn,#data指令耗用1个机器周期,
每条DJNZ Rn,rel指令耗用2个机器周期,
每条NOP指令执行耗用1个机器周期,
D1:  MOV  R4,#20  ;;①
D2:  MOV  R5,#248 ;;②
      DJNZ R5,$   ;;③
      DJNZ R4,D2  ;;④
指令①执行1次,耗时1us;
指令②每次执行耗时1us,
指令③每次执行耗时2us,
指令④每次执行耗时2us,
延时值=1us+20[(2usx248+1us)+2us]
          =1us+20[499us]
          =9981 us
其它例子请阅附件。


51单片机用循环递减法计数方式延时值计算及举例.zip

1.06 KB, 下载次数: 13

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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