一个51单片机软件延时问题

12M晶振voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}上面的程序可... 12M晶振
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
上面的程序可以延时1ms,为什么?
编译成汇编程序(看图)。怎么加都没有1ms啊……
貌似所有的指令为4周期都不会有1ms啊……
实验结果好像比较接近1ms。真搞不懂…… 循环乘上120也没有那么多啊……
展开
 我来答
雨田丫
2010-07-12 · TA获得超过822个赞
知道小有建树答主
回答量:235
采纳率:100%
帮助的人:163万
展开全部

程序延时本来就是一个大概的数。这个也不是很准的。

中间的for循环120次大约是962周期,加上每次循环前后的“准备工作”,再加上函数调用/返回的时间,接近1Ms.实没为993个周期。如果把for循环次数改为121,则参数1的延时为1001个机器周期。

wa03
2010-07-11 · 超过20用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:33.8万
展开全部
DLE1: MOV R0,#10
DLE2: MOV R1,#100
DJNZ R1,DLE2
DJNZ R0,DLE2
你看这是1ms的汇编程序10x100x1us+4us=1ms
好像你不太懂汇编。不是说语句少就不够1ms因为其中有循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2010-07-11 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
C语言延时程序,没有精确的计算方法,只能的估算,再测试修正。
软件精确延时,只能使用汇编语言。
参考:
http://zhidao.baidu.com/question/166181328.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3a122a6c8
2010-07-12
知道答主
回答量:54
采纳率:0%
帮助的人:26.6万
展开全部
程序看的不是很明白,但是我看到一共循环120次,每次需要8个指令周期,12M晶振的51一个指令周期是1uS 所以实际是120*8*1=960uS,再加上子程序调用的时间占用,大约在1mS的样子。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式