1.你可以通过keil仿真,多试几次找出这个值。仿真可以看时间。
2.还可以把程序下到板子上,比如运行1分钟。通过多次试验,也能找出这个值。
3.也可以理论计算,51有机器周期、指令周期,考虑晶振,看一个for要多少指令,最后也能算出来。
不同单片机不一样,有的没有机器周期,有的指令周期也不一样,晶振也不一样。推荐前两种方法。
j=t*100;这一句了,如果把这一句给删了,那么你的程序就是延时100ms的,delay(10)就是延时一秒。为什么会延时一秒,那就要看你单片机的晶振是多大,以及程序的执行速度有关了,可以用仿真试试看。
定义一个延时xms毫秒的延时函数。
void delay(unsigned int xms) // xms代表需要延时的毫秒数。
unsigned int x,y;。
for(x=xms;x》0;x--)
for(y=110;y》0;y--);。
使用:
void Delay10us(uchar Ms)
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);。
i=[(延时值-1.75)*12/Ms-15]/4。
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。
2、在延时子程序设计时,采用do?while,结构做循环体要比for结构做循环体好。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
C语言delay函数延时计算源代码如下:
#include "stdlib.h"。
void delay()
time_t start,end;。
start=time(null);。
unchar i;
while(z--)
for(i=0;i<121;i++);。
end=time(null);。
printf("%f",difftime(end,start));。
扩展资料
1、对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量。
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。
当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。
扩展资料:
定义延迟XMS毫秒的延迟函数
Voiddelay(unsignedintXMS)//XMS表示需要延迟的毫秒数。
{
无符号intx,y;
For(x=XMS;X0;X-)
For(y=110;Y”0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar数据我;
(;女士“0;------Ms)
对于(I = 26)我> 0;我-);。
}
I=[(延迟值-1.75)*12/ms-15]/4。