标题: 关于Keil里查看单片机延时时间的方法 [打印本页]

作者: zhang1314hong    时间: 2018-11-2 11:35
标题: 关于Keil里查看单片机延时时间的方法
一段单片机程序源码:
ORG 00H
AJMP START
ORG 30H
START:
MOV P0,#00H
LCALL DELY;调用延时子程序
MOV P0,#0FFH
LCALL DELY;调用延时子程序
AJMP START
DELY:
MOV R4,#200
DL1:MOV R5,#50
DL2:MOV R6,#50
    DJNZ R6,$
    DJNZ R5,DL2
    DJNZ R4,DL1
        RET
END



这是一个led闪烁汇编程序,我主要看延时的时间,也熟悉它的计算。

此时光标定位到延时函数的时间为0.000006s(即6us),之前不知道现在刚知道,晶振选为12M,一个机器周期也就是1us,

然后点步出,就可以看到过了多长时间,为1.03060900s(即1030609us)
延时时间=1030609-6=1030603us(即1.030603s)

汇编时间的计算
                                  周期(us)        次数
MOV R4,#200               1                         1
DL1:MOV R5,#50         1                         200
DL2:MOV R6,#50         1                        200*50
    DJNZ R6,$                2                     200*50*50
    DJNZ R5,DL2            2                   200*50
    DJNZ R4,DL1            2                     200
        RET                      2                           1

时间=1*1+1*200+1*200*50+2*200*50*50+2*200*50+2*200+2*1=1030603us!即1.030603s.这就对上了。,有什么不对的地方大家请指正,谢谢了!



作者: admin    时间: 2018-11-2 13:59
好方法,51黑有你更精彩!!!
作者: 快乐眼泪    时间: 2018-11-2 18:54
这个真的不懂啊!
作者: Y_G_G    时间: 2018-11-4 18:21
非常的不对!可能会误导新手的,你这个只能是用在传统的AT系列的51,也就是一个周期用12个系统时钟,在12MHZ的晶振下.
但是,现在很多人用的是STC的8051了,STC的时钟是非常乱的,真不明白他们是怎么想的,一下子用1T,一下用5T的,非常的难计算的,反人类一样的设计,人家是恨不得所有指令执行时间都一样,他们就一下这样一下那样,好像一定要多快似的,能到nS级别吗???所以,在STC上只能是先计算系统时钟的时间,再去算总的执行时钟个数来确定.当然,有更简单的方法,STC有的下载软件有延时计算器的,先选择好单片机型号,再计算就可以了.




作者: Y_G_G    时间: 2018-11-4 18:23
这个是不对的!!!误导新手!
作者: zhang1314hong    时间: 2018-11-5 09:15
Y_G_G 发表于 2018-11-4 18:21
非常的不对!可能会误导新手的,你这个只能是用在传统的AT系列的51,也就是一个周期用12个系统时钟,在12MHZ的 ...

恩恩,我现在刚学习查看,用的也是AT的51,谢谢!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1