c语言延时程序的数值是怎么算的?就那个c=23什么的 void delay500ms(void)

c语言延时程序的数值是怎么算的?就那个c=23什么的
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=23;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}

首先,这是非常低级的延时程序,低效且不准确。

延时程序一般常见的有两种:
1、计算延时。进行一些无意义的运算,使得程序暂时停止在某一位置。通常通过循环实现。

2、事实上,c中的windows.h库中有一个Sleep函数,Sleep(x)的意思是暂停x毫秒。误差一般在1%以内。追问

那23.152.70是问你来的,为什么是这几个数?

追答

你换成乘积接近的别的数试试,你就会发现这只是利用乘积的。。。

追问

那200秒延时的数值呢?

本人大四学渣,大神,求解脱!!!

追答

额,你最好还是用Sleep函数。这个根据不同电脑主频不同,延迟时间也不同,就好比在我的电脑上运行时间就在0.25秒左右。

追问

呃呃,我学渣。。。程序是别人给我的

追答

你直接Sleep(200),就是延时200ms了,但是要加#include库

追问

追答

单片机啊,你不早说。

那就这样吧。。。乘积大概是100000左右,你写个a=10,b=100,c=100试试

追问

谢谢

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-06
c=23是控制外层循环次数的追问

那为什么是23?

追答

这应该是在某个特定的设备上调试运行的程序,取以上数值刚好可以延时500MS

追问

帮我看看这个程序呗

追答

如果你只是达到延时的目的方法有很多,完全没有必要这样延时,而且可移置性也比这个好
还有,你确定是想延时500ms吗?

追问

不,就这样的程序,求注释

追答

你都大四了快毕业参加工作了连这个小程序都搞不懂,真不敢想象再说了上面已经注释了那么清楚了你还有哪里不懂啊

追问

不,我想这个程序还能细分不?比如行程检测之类的

第2个回答  2016-05-06

单片机中延时时间怎样计算?
一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ...

关于C语言for循环延时函数
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序 程序:void delay200ms(void){ unsigned char i,j,k;for(i=5;i>0;...

如何用c语言实现单片机延时?
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}

单片机c语言的延时程序500ms
根据外部晶振的不同,延时1毫秒的循环次数也不一样,一般12M晶振的话用 for(j=time;j>0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为11.0592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。

c语言延时函数原理解释
谁给你的坑爹东西,这个是有延时效果,不过需要这段时间CPU几乎被沾满,做一些毫无意义的计算。没有具体含义,就是跑了50*38*130此循环。而且延时不一定是10毫秒,看机器的性能;要想真延时可以用Sleep等函数

51单片机C语言程序中延时函数delay的原理是什么?
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。

怎么用C语言写可以调节的延时程序,请大侠帮忙
C语言延时程序: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--);} 1s延时子程序(12MHZ)void delay1s(void){ unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;...

单片机C语言中while的延时时间?
C语言延时程序: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--);} 1s延时子程序(12MHZ)void delay1s(void){ unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;...

请教关于单片机C语言中用while延时的问题
晶振频率Fosc=12MHz,则机械周期 T=12\/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软...

C语言精确延时
DFF6 DJNZ R7,C:0802 22 RET 三. 10ms延时子程序 程序: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:0x0800 7F05 MOV R7,#0x05 7E04 MOV R6,#0x04 7DF8 MOV R5,#0xF8 C:0x0806 DDFE DJNZ...

相似回答