当前位置:首页 » 编程语言 » c语言延迟时间

c语言延迟时间

发布时间: 2022-11-04 02:06:38

1. 标准C如何延时

假设一个延时函数如下:
void delay()
{
uint i;
for(i=0;i<20000;i++);
}
我们怎么来算呢,先将20000转成16进制,得到4E20,然后将高字节4E乘以6得到468D,再将468+2=470,然后将470D*20HEX(即32D)=15040;所心这个延时函数总共要执行15040个周期,假设所用的晶振为12MHZ,则该段函数总延时:15.04ms。

有了这个公式我们如果想要设定指定的延时长度就可以用它的己知公式确定。即:总时间=[(6*i值的高8位)+2]*i的低8位。
例如:设要延时125ms。
我们将低字节先赋值200D*(即:C8),然后再算高低节的定值,由式中可知125ms=200*((i值的高字节*6)+2),又可推算出(高低节*6)+2的总延迟时间应等于625us,将625/6=104.1666,取整数得到104,将104转成16进制得到68H,再将高字节和低字节组合起来即得到了定值,即:68C8HEX,代入函数即如下:
void delay()
{
uint i;
for(i=0;i<0x68C8;i++);
}
如果写直进行就要将68C8转成10进制,即:26824,代入后得到:
void delay()
{
uint i;
for(i=0;i<0x26824;i++);

c语言中嵌入一段汇编的延时程序呀,你自己看看书,很简单的

用在单片机里的可以C和汇编混合使用,因为用汇编编写延时要准确些,所以你不妨写一个汇编程序,然后再调用它好了,要用C来编精确的延时确实是比较难的哦.呵呵

谁说C语言不能精确延时,用51单片机的定时/计数器一或者用定时/计数器2的工作方式2,自动再装入8位计数器,就可以精确延时,别说1MS了就是100um也能精确做到。

其实很简单,采用定时器,将需要定时时间算好后写入单片机中断程序中即可,这种方法可以实现精确定时,最终的误差仅由晶振来确定了。
不错,用定时器最准确。但是定时器数量有限,有时候不见得能够用。比如温度检测(尤其是变化比较大、快的),一个定时器就得一直不停检测。这个时候如果另外一个定时器有正好分配的其他任务,就只有用其他方法延时了。

空循环就行了
如while(i--);根据i的不同决定了延时长短
不过C的延时不是非常准确,你得根据反汇编,看汇编语句的数量和指令周期来计算时间

也可以是
void mDelay(unsigned int Delay) //Delay = 1000 时间为1S
{
unsigned int i;
for(;Delay>0;Delay--)
{
for(i=0;i<124;i++)
{;}

}
}

2. 用C语言编程如何计算延时时间

那样子你的调用系统的API来获得调用此函数之前的系统时间,还有调用此函数返回之后的系统时间进行比较。
#include <windows.h>
#include <stdio.h>
voidmain()
{
SYSTEMTIME sys;
GetLocalTime( &sys );
int start=sys.wMilliseconds;//获取开始时的毫秒数
//下面调用你的函数
delay(uint型变量);//这里面的参数你必须自己看着办
GetLocalTime( &sys );
int end=sys.wMilliseconds;//获取调用delay函数之后的秒数
printf("调用delay函数消耗了%d毫秒!\n",end-start);
printf("注意:此程序只能处理1秒以内的延迟毫秒数!");
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}

3. C语言延迟时间,我的是12M晶振,这个程序的延迟时间到底是多少

12M就是每秒
12000000HZ
也就是说
循环12次的话是1微秒,循环12000次的话是1毫秒。
所以你的这个循环执行了
ms
*
10微秒
如果你要延迟1毫秒,那么ms就应该是100

4. C语言延时函数

C语言的延迟函数一般是利用无意义程序运行来控制时间从而达到延时的目的
举个例子:
for(i=0;i<x;i++)

for(j=0;j<120;j++);

这是延时x毫秒的for循环语句。
值得注意的是记得最后的;一定得记得写。

5. 请问下面的C语言延时函数是如何计算延时时间的for循环中的四个nop是否可以省略

一个nop为1个指令周期,通过nop指令可以产生一定的延迟,但是对于快速的CPU来说效果不明显,因此可以多写几个,便可以多延迟几个时钟(具体应该说是一个指令占用了3个时钟脉冲);所以,一个for循环会执行4*250个指令周期,那么总共延时4*250*ms个指令周期~~

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

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

#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类型,用来计算运行的时间,用第一个参数的时间减去第二个参数的时间,得到的值就是运行用了多少时间。单位为秒

7. 单片机C语言如何让一个数组内的元素延迟时间

这个很简单,用软件延时和定时器中断延时都可以,具体说就是在数组循环送显环节中加入延时程序就OK。

8. C语言中控制时间延迟的函数是什么 用法是什么 举个

sleep函数,在windows中是以毫秒为单位延迟,如Sleep(1000)就是延迟1000ms,也就是1秒。

9. 单片机C语言中while的延时时间

用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);

然后左侧的SEC后面的就是执行的时间。

再给你几个延时程序做参考:

软件延时:(asm)

晶振12MHZ,延时1秒

程序如下:

DELAY:MOV72H,#100

LOOP3:MOV71H,#100

LOOP1:MOV70H,#47

LOOP0:DJNZ70H,LOOP0

NOP

DJNZ71H,LOOP1

MOV70H,#46

LOOP2:DJNZ70H,LOOP2

NOP

DJNZ72H,LOOP3

MOV70H,#48

LOOP4:DJNZ70H,LOOP4

定时器延时:

晶振12MHZ,延时1s,定时器0工作方式为方式1

DELAY1:MOVR7,#0AH;;晶振12MHZ,延时0.5秒

AJMPDELAY

DELAY2:MOVR7,#14H;;晶振12MHZ,延时1秒

DELAY:CLREX0

MOVTMOD,#01H;设置定时器的工作方式为方式1

MOVTL0,#0B0H;给定时器设置计数初始值

MOVTH0,#3CH

SETBTR0;开启定时器

HERE:JBCTF0,NEXT1

SJMPHERE

NEXT1:MOVTL0,#0B0H

MOVTH0,#3CH

DJNZR7,HERE

CLRTR0;定时器要软件清零

SETBEX0

RET

C语言延时程序:

10ms延时子程序(12MHZ)

voiddelay10ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

1s延时子程序(12MHZ)

voiddelay1s(void)

{

unsignedcharh,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

200ms延时子程序(12MHZ)

voiddelay200ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

500ms延时子程序程序:(12MHZ)

voiddelay500ms(void)

{

unsignedchari,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

不过实际得到的延时会存在差异,所以最好用实验的方法调整延时参数。

10. 在c语言中如何实现延时功能

先加个 #include<windows.h>

然后延迟一秒就是 Sleep(1000); 就行了
1000代表1000毫秒 也就是一秒
#include<iostream.h>
#include<windows.h>
void main()
{
for(int i=0;i<50;++i)
cout<<"#";
cout<<endl;
Sleep(1000);
for(i=0;i<50;++i)
cout<<"#";
cout<<endl;
}

热点内容
c语言源程序的基本单位 发布:2025-01-10 16:47:37 浏览:285
王者安卓账号如何换到苹果 发布:2025-01-10 16:34:47 浏览:729
c语言lua 发布:2025-01-10 16:34:46 浏览:206
我的世界检测服务器人员 发布:2025-01-10 16:32:30 浏览:832
数据库表模板 发布:2025-01-10 16:22:21 浏览:356
邮政新农合社保卡初始密码多少 发布:2025-01-10 16:01:32 浏览:143
安卓系统哪个最商务 发布:2025-01-10 15:49:28 浏览:910
填色脚本实例 发布:2025-01-10 15:34:21 浏览:759
如何配置烧烤 发布:2025-01-10 15:34:13 浏览:54
python列表相乘 发布:2025-01-10 15:31:33 浏览:322