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

供稿:hz-xin.com     日期:2025-01-14
C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算?CPU晶振频率11。05

你这个11.0592是匹配波特率所用的晶振,机器周期只是约等于1us。首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是有时间吗,你可以看一下算算CPU空跑的次数,很简单。

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}

拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

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

当然不能省略,执行一个_nop_()语句需要一个时间单位,那么for循环一共需要1000个时间单位。while循环就需要ms*1000个时间单位。假如这个时间单位为0.001毫秒的话,也就是delay函数会延迟ms毫秒

nop 是一条汇编指令 ,意思是浪费1个时钟周期,但我觉得并不一定像这个代码显示,我想浪费多少ms ,就要运行多少个x1000次的nop,这个时间长度是不定的..
而且你不能去掉nop,不然编译器可能会吧空循环给优化掉.

请问下面的C语言延时函数是如何计算延时时间的?for循环中的四个nop是...
一个nop为1个指令周期,通过nop指令可以产生一定的延迟,但是对于快速的CPU来说效果不明显,因此可以多写几个,便可以多延迟几个时钟(具体应该说是一个指令占用了3个时钟脉冲);所以,一个for循环会执行4*250个指令周期,那么总共延时4*250*ms个指令周期~~...

c语言延时函数delay,怎么算延时??
下面是delay 函延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而达到延迟目的。数原型:原型:void Delay(unsigned int nDelay){ unsigned int...

C语言delay函数延时计算
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));}

C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算...
首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是有时间吗,你可以看一下算算CPU空跑的次数,很简单。

用C语言编程如何计算延时时间?
\/\/下面调用你的函数 delay(uint型变量);\/\/这里面的参数你必须自己看着办 GetLocalTime( &sys );int end=sys.wMilliseconds;\/\/获取调用delay函数之后的秒数 printf("调用delay函数消耗了%d毫秒!\\n",end-start);printf("注意:此程序只能处理1秒以内的延迟毫秒数!");} void delay(uint z){ uint...

单片机C语言延时程序,延时时间是怎样计算的
延时程序计算方式主要分为两种,一是通过查看反汇编代码分析得到,二是利用定时计数器获取。具体而言,执行前从零开始计数启动定时器,随后使用特定参数k调用delay函数,再在返回后检查定时器计数值T。公式为T = tc * k * t0,其中tc表示每次调用都包含的调用开销,t0表示k=1时去除调用开销后的循环体...

帮我看一下这个C语言函数:
void delay(uchar ms){ uchar j=0;while(ms--){ for(j =120;j>0;j--);} } 如果我没记错的话,在c51汇编里面,djnz这个指令是双周期的,那么上面的延时也就是5*120*2微秒,等于1.2毫秒。如果我记错了,那就差不多是600微秒 其实C语言的延时都是不准确的,汇编就很准确了,可就算是...

请用c语言编写一个延时函数,并说明该函数在程序中是如何实现延时的?
在C语言中,可以使用delay函数来实现程序的延时功能。delay函数可以使程序暂停执行一段时间,定义一个delay函数,函数的参数为延时的时间,单位为毫秒。函数的实现如e=clock();\/\/获取当前时间es);\/\/当当前时间减去开始时间小于延时时间时,程序处于等待状态,在程序中调用delay函数,并传入需要延时的时间,...

c语言自己怎么写延时函数
1.time_t start,end;start=time(NULL);end=time(NULL);while(end-start <1.5) \/\/这里是要延迟1.5个毫秒 end=time(NULL);return 0;时间是以毫秒为单位 参考资料:google

C语言怎么写延时函数,精确到毫秒
唯有Sleep函数,只有Sleep函数参数是用毫秒,比如1000毫秒等于1秒。