若单片机的晶振频率为6MHZ,则下列子程序的延时时间是:

DELAY:MOV R1,#0F8H
LOOP:MOV R3,#OFBH
DJNZ R3,$
DJNZ R1,LOOP
RET
其延时时间Y的计算式是:
Y = ????

你单片机有没有进行分频啊,如果进行了12分频的话,则执行一步所用时间为
2us(时钟周期)。

MOV为1个指令周期,DJNZ为2个指令周期,RET为3个指令周期
我不知道我有没有记错,很久没有用汇编了。

MOV R1,#0F8H 要执行1次 1*1=1
MOV R3,#0FBH 要执行F8=248次 248*1=248
DJNZ R3,$ 要执行F8*FB=62248次 62248*2=124496
DJNZ R1,LOOP 要执行F8=248次 248*2=496
RET 要执行1次 1*3=3

Y=1+248+124496+496+3
Y=125244
共执行了125244次时钟周期
最后再用Y*时钟周期
也就是125244*2us=250488us=250.488ms=0.250488s
也就是1/4秒的样子
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-28
楼上的算法忽略了循环外部的几条指令的执行时间,精度影响不大。

但是对循环内部的指令的执行时间,计算有误。

指令 DJNZ R3,$ 的指令周期为2个机器周期!

晶振频率为6MHz,则机器周期为2微秒;
Y=62248×2×2微秒=124496×2微秒=124.496×2毫秒=0.249秒。
第2个回答  2009-09-28
0FBH=251;
0F8H=248;
程序延时Y=248×251=62248;
晶振频率为6MHz,则机器周期为2微秒;
Y=62248×2微秒=124496微秒=124.496毫秒=0.124496秒。
第3个回答  2009-10-05
我利用wave6000将你的程序执行了一遍,晶振12M用时125244us,那么6M晶振就是125244*2=250488us=250.488ms
并且你的程序中,#0FB中0写成了O(字幕o)
计算方法:如zhouwude所说,很清楚
建议将分给他,我是抱着共同学习的目的来的