如何正确计算多重循环延时程序的延时时间

题目:MCS-51单片机,使用 6MHz 晶振,一个机器周期为 2us,计算出下列程序的延时时间。

DEL: MOV R5, #100
DEL0: MOV R6, #200
DEL1: MOV R7, #248
DEL2: DJNZ R7, DEL2
       DJNZ R6, DEL1
       DJNZ R5, DEL0
       RET

本题答案是10.000 406s,请各位帮忙解释一下这个延时时间是如何计算啊?
悬赏分:100 - 解决时间:2010-7-11 17:51
;------------------------------------------------------
最佳答案: 题目中的答案是错的。应该是:19 960 606 us。
本题目的程序,共有三重循环,耗时的正确计算方法,可见下图。

如何正确计算多重循环延时程序的延时时间 - 非著名博主 - 电子信息角落

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/a5fcfaf66794e262730eec8d.html
图中,还给出了用 keil 调试结果的画面。
包括调用指令的时间,共用了19 960 610 us。
;------------------------------------------------------
回答者: 做而论道 - 十三级   2010-7-11 17:14
提问者对于答案的评价:谢谢!解释的很清楚!果然是书错了。。。
原题网址:http://z.baidu.com/question/166181328.html
;------------------------------------------------------
后记:
能够精确计算程序的执行时间,是汇编语言的长处。而用C语言编写程序,执行的时间只能进行估算和测试。
但是有很多网友,都把这两者弄混了:
  在用C语言编程的时候,偏要追问程序执行时间的计算公式;
  在用汇编语言编程的时候,却采用简略的时间计算方法。
特别是现在这道题,要求精确算出 us 量级的数值,很明显是应该采用精确的计算方法。多数网友却马虎的很!采用了简略的算法。如果这是考试题,显然会挂科一批人。
精确的计算方法,其实并不难,看看插图,划分出几个循环结构的圈,逐“层”计算即可。

如果用简易的估算方法,只是计算主要的循环体(本题仅为2T)的循环耗时时间,过程如下:

    100 * 200 * 248 * 2T = 9 920 000 T

    如:T = 2us,则延时时间为:19 940 000 us 。

这个数字和精确计算的结果相比,误差约为千分之一。这个算法,在实际应用方面,是完全可以的。

但是,这个简易的算法,精度仅在 10ms 的等级,如果作为理论分析来用,误差还是相当大的。

另外,用 keil 软件进行单步调试的时候,所耗用所机器周期和时间, keil 都能够十分清晰给出,它要比 Proteus 软件的效果好得多。
对于本题目,做而论道提出的答案,完全得到了验证,可见插图所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值