标题:
关于单片机汇编语言延时子程序的时间计算
[打印本页]
作者:
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
2021-3-10 16:25 上传
点击文件名下载附件
1.06 KB, 下载次数: 13
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1