标题: 关于单片机汇编语言延时子程序的时间计算 [打印本页]

作者: liuuu    时间: 2021-3-7 23:45
标题: 关于单片机汇编语言延时子程序的时间计算
D1:

      MOV  R4,#20

D2:

      MOV  R5,#248
      DJNZ R5,$

      DJNZ R4,D2



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



作者: 51hei团团    时间: 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

                         另外,如果计时要求很苛刻时,包括调用“延时子程序”、“返回”所占用机器周期都需要计算进去的。
作者: 人人学会单片机    时间: 2021-3-8 00:23
你算这么准确有什么用?中断一使用,误差从1% 瞬间提高到250%了
作者: design003    时间: 2021-3-8 08:55
初学的话  下功夫学C的吧   用的人多有问题好请教   
作者: Kxuan163    时间: 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






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