×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-27 发布时间:
|

题目: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


最佳答案: 题目中的答案是错的。应该是:19 960 606 us。
本题目的程序,共有三重循环,耗时的正确计算方法,可见下图。




后记:
能够精确计算程序的执行时间,是汇编语言的长处。而用C语言编写程序,执行的时间只能进行估算和测试。
但是有很多网友,都把这两者弄混了:
  在用C语言编程的时候,偏要追问程序执行时间的计算公式;
  在用汇编语言编程的时候,却采用简略的时间计算方法。
特别是现在这道题,要求精确算出 us 量级的数值,很明显是应该采用精确的计算方法。多数网友却马虎的很!采用了简略的算法。如果这是考试题,显然会挂科一批人。
精确的计算方法,其实并不难,看看插图,划分出几个循环结构的圈,逐“层”计算即可。

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

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

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

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

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

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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯