找回密码
 立即注册

QQ登录

只需一步,快速开始

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

汇编语言延时程序具体应该怎么计算?

[复制链接]
跳转到指定楼层
楼主
ID:165498 发表于 2017-3-2 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
二重循环模型:
   DEL:  MOV   R6,#y
   DEL1:MOV   R5,#X
   DEL2:DJNZ  R5,DEL2
            DJNZ   R6,DEL1
            RET
我知道T=2XY+3Y+3
可是,如果我要实现一个200000uS,该如何计算出X和Y的数值 ,一个方程有两个未知数,怎么求呢?
三重循环模型:
   DEL:  MOV   R7,#Z
   DEL1:MOV   R6,#Y
   DEL2:MOV   R5,#X
   DEL3:DJNZ  R5,DEL3
            DJNZ   R6,DEL2
            DJNZ   R7,DEL1
            RET

我知道T=2XYZ+3YZ+3Z+3
该如何计算出X、Y和Z的数值 ,一个方程有3个未知数,怎么求呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2017-3-2 18:19 | 只看该作者
这3个都是未知数?
先确定两个然后计算求出第3个。
回复

使用道具 举报

板凳
ID:111634 发表于 2017-3-2 19:58 | 只看该作者
"一个方程有两个未知数,怎么求呢?"   那就有无数个解。先设定一个未知数,然后就有对应的解了。看来楼主数学未学好!
回复

使用道具 举报

地板
ID:111634 发表于 2017-3-2 20:02 | 只看该作者
本帖最后由 zl2168 于 2017-3-2 20:35 编辑

【例3-24】 延时程序是单片机应用系统常用的模块程序。试按下列要求编写延时子程序:


延时1msfOSC=6MHz


延时10msfOSC=12MHz


延时0.5sfOSC=12MHz


解:⑴ 延时1msfOSC =6MHz,一个机器周期为2msDJNZ指令为2个机器周期。


DY1ms:     MOV      R7,#250          ;置循环次数(指令为1个机器周期)


LOP:       DJNZ      R7,LOP           ;250×2机周=500机周


RET       ;子程序返回(单独Keil调试时,需用END替代RET


上述子程序实际延时(500 +1)机周×2ms/机周=1002ms


延时10msfOSC =12MHz,一个机器周期为1ms


DY10ms:    MOV      R6,#20           ;置外循环次数


DY1:       MOV      R7,#250          ;置内循环次数


DY2:       DJNZ      R7,DY2          ;250×2机周=500机周


DJNZ      R6,DY1           ;500机周×20=10000机周


RET                         ;子程序返回(单独Keil调试时,需用END替代RET


实际延时[(500+2+1)×20+1]机周×1ms /机周=10061ms


延时0.5sfOSC=12MHz,一个机器周期为1ms


DY05s:     MOV      R5,#5            ;置外循环次数


DY0:       MOV      R6,#200          ;置中循环次数


DY1:       MOV      R7,#250          ;置内循环次数


DY2:       DJNZ      R7,DY2          ;250×2机周=500机周


DJNZ      R6,DY1           ;500机周×200 =100000机周


DJNZ      R5,DY0           ;100000机周×5=500000机周


RET                       ;子程序返回(单独Keil调试时,需用END替代RET


实际延时{[(2×250+2+1)×200+2+1]×5+1}机周×1ms/机周=503016ms


以上摘自张志良编著
80C51单片机实用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(c和汇编)语句条条有注解,便于阅读理解,便于自学。



回复

使用道具 举报

5#
ID:155507 发表于 2017-3-2 20:12 | 只看该作者
以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。

计算分析:

X:R5=150 Y:R6=132 Z:R7=5

程序共有三层循环

一层循环n:R5*2 = 150*2 = 300us  (DJNZ 2us)

二层循环m:R6*(n+3) = 132*303 = 39996us   (DJNZ 2us + R5赋值 1us = 3us)

三层循环: R7*(m+3) = 5*39999 = 199995us   (DJNZ 2us + R6赋值 1us = 3us)

循环外: 5us      子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

延时总时间 = 三层循环 + 循环外 = 199995+5 = 200000us =200ms

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
回复

使用道具 举报

6#
ID:123289 发表于 2017-3-4 02:11 | 只看该作者
不计算的方法:用软件仿真运行,可以在运行结果中找到答案。不对再改。
回复

使用道具 举报

7#
ID:165498 发表于 2017-5-19 08:48 | 只看该作者
yzwzfyz 发表于 2017-3-4 02:11
不计算的方法:用软件仿真运行,可以在运行结果中找到答案。不对再改。

用哪个软件仿真?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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