51单片机C语言中delay函数是怎么定义和使用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机C语言中delay函数是怎么定义和使用的?相关的知识,希望对你有一定的参考价值。

void Delay (unsigned int a)
unsigned int i;
while( --a != 0)
for(i = 0; i < 600; i++);



这一句delay后面的()内和内的表达式和语法是什么关系啊?初学者,见笑哈

定义一个延时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、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。

参考技术A

delay函数是一般自己定义的一个延时函数。


C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。

// 定义一个延时xms毫秒的延时函数
void delay(unsigned int xms)  // xms代表需要延时的毫秒数

    unsigned int x,y;
    for(x=xms;x>0;x--)
        for(y=110;y>0;y--);

参考技术B 这是一个延时函数()里的unsigned int a是一个形参,为int型变量最 大值为32767;里的unsigned int i和()里的一样 只是变量的名称不同,为i;while就是循环语句 如果他后面的()里的量不为零就执行他里的内容,一旦为零就跳出该语句。for(i=0;i<600;i++);就是把i定为零,如果i在for里小于600就跳到第三步i++(也就是i自增1);然后i=1但他还是小于600,接着就到第三步。。。。599次之后i=600,600就不小于600,这时就跳出for。while后的()如果为零就跳出while本回答被提问者采纳 参考技术C C的话其实时间没有办法完全定性地计算的
如果非得精确的话只能使用定时器了,或者汇编的也行
不过时间要求精度不是很高的话使用下面的代码就行了
当时使用示波器把时间完全调准的,65536ms范围内还是比较准的,已经可以满足通常的要求了:

#include "reg51.h" //头文件包含

//宏定义
#define uint unsigned int
#define uchar unsigned char

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)

uint ti;
while(ms--)

for(ti=0;ti<112;ti++)//112



调用方式如下:
delay(400); //开机延时400ms
够详细了吧?!
参考技术D 这是个延迟函数,delay 括号中的表达式是定义的无符号的整形变量,它是形参,你只要知道它是定义一个变量既可,它的值由main 函数传递过来,a的值有了,就进入了while 循环。不知你是否学过c语言,如果没有,就看看while 循环。

在C语言程序中,延时函数的时间是怎么算的?

比如说以下一段:
void delay()

unchar i;
while(z--)

for(i=0;i<121;i++);



delay(600)为延时多长时间?
晶振12MHZ

这个是和你机器的运算速度有关的
你要计算出这个函数用了多少时间就要用时间函数,我很久没用了。

#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));


//time_t是在头文件中定义的,可能是个结构体类型里面的成员定义了一些时间的单位,如年、月、日。在这里调用这个结构体定义2个变量;
//start=time(null);
将其中一个变量赋值。它的值等于当前的系统时间
//end=time(null);
在程序结束的时候再给另一个变量赋值,值等于当前的系统时间。
//difftime(end,start)
函数difftime();是double类型,用来计算运行的时间,用第一个参数的时间减去第二个参数的时间,得到的值就是运行用了多少时间。单位为秒
参考技术A 这个是和你机器的运算速度有关的
你要计算出这个函数用了多少时间就要用时间函数,我很久没用了。
#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));

//time_t是在头文件中定义的,可能是个结构体类型里面的成员定义了一些时间的单位,如年、月、日。在这里调用这个结构体定义2个变量;
//start=time(null);
将其中一个变量赋值。它的值等于当前的系统时间
//end=time(null);
在程序结束的时候再给另一个变量赋值,值等于当前的系统时间。
//difftime(end,start)
函数difftime();是double类型,用来计算运行的时间,用第一个参数的时间减去第二个参数的时间,得到的值就是运行用了多少时间。单位为秒
参考技术B 所谓的延时程序,就是让程序进入一段无效循环,达到延时目的
有一个延时参数表的。
下面是一个10ms延时子程序(12mhz)
void
delay10ms(void)

unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
参考技术C 例如
void delay(uint z) //3*(j+2)*i=3*(332+2)*600=601200us=601ms

uint i,j;
for(i=z;i>0;i--)
for(j=332;j>0;j--);

以上是关于51单片机C语言中delay函数是怎么定义和使用的?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 delay 函数如何运用?

delay500延迟了多少秒

关于keil延时函数的问题,和硬件不一致

C语言delay函数延时计算

单片机C语言如何满足条件就立即退出中断函数

Arduino的delay()函数