C51延时1秒问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:10:25
For(delay=1000,delay>0;delay--) [for(i=0;i<125;i++)]为什么是延时1秒?怎么看的

这是机器周期的问题,在12M晶振下,一条for循环大概8个机器周期,一个机器周期是1us,上式的延时时间就是1000*125*8us=1s.这只是大概的时间,实际上C语言的延时是不准确的,只有汇编的延时是准确的.

for(delay=1000;delay>0;delay--)
{
for(i=0;i<125;i++);
}
1000*125=1.25ms

del:
mov r0,#10
d1:
mov r1,#200
d2:
mov r2,#250
djnz r2,$
djnz r1,d2
djnz r0,d1
ret

单从你上面写的程序是无法肯定的。不过

void delay_11us(unsinged int i)
{
for(; i >0; i--);
}
这个函数延迟 11 * i 个指令周期。