delay函数是一般自己定义的一个延时函数。
C语言锋世脊定义延时函数主要通过无意义指令的执行来达到延时的目的。
关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为返旦STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。
ms=1时,第一个for循环进入,然后在第二个for循环中执行100次
再银渗回到第一个for循环中进行第二次循环.
就这样
你可以进入编辑器,添加断点,自行查看代码执行过程
原理:只是执行一些所谓的“无实际意义的指令”颂桥,如缩祥凯放或执行一个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
定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y
for(x=xmsx》0x--)
for(y=110y》0y--)
}
使用:
void Delay10us(uchar Ms)
{
uchar data i
for(Ms》0Ms--)
for(i=26i》0i--)
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料1、在C51中进行精确的延时子程序设计时,尽量不要或好磨少在延时子程序中定义局部变量,所有的延时子程序中变量通橡派过有参函数传递。
2、在延时子程序设计时,采用do?while,结构做循环体要比for结构做循环体好。
3、在延时子友如斗程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)