求助:单片机C语言中延时程序怎样计算?

例如;void delay()
{
unsigned int i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
一般的延时程序怎么计算?比如想延时1S、500ms等

你好:
如果你想直接知道答案,那么我告诉你,12MHz晶振:
void delayms(unsigned int t)
{
unsigned int i,j;

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

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

}
能精确到1ms。
如果是11.0592MHz晶振,只需把上面的“j=123”改为“j=114”,都是调试过的,没问题。
然后你要想知道是怎么调试的,很简单,打开uv2编程软件,在最上边的工具栏里边有个“Debug”,点击后出现下拉菜单,选择第一个“start/stop Debug Session”,然后在最右边有一个Watch栏,有两个项目,一个是“Register”,一个是“value”,然后在“Register”栏下边的“Sys”里边有个“sec”,你只要单击“Step over”运行程序并观察“sec”的值就能调试出你程序的执行时间了。
注意,一定要先选择晶振频率,不然会默认24MHz。
希望我的回答能帮助到你。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-25
一般来说!这个程序的延时多少要看你的时钟芯片的大小!
一般的如果你用的是12M的晶振的话!
void Delay_ms(unsigned int nms) //ms延时精确的到ms
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=122;j>0;j--);
}
这个是我调试过的!能精确到1ms的!
如果是11.0592M的话!
void Delay_ms(unsigned int nms) //ms延时精确的到ms
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=110;j>0;j--);
}
如果是其他的,你就需要自己利用keil自己的仿真进行测试了!
第2个回答  2013-07-25
软件的延时时间,取决于晶振频率。

C 语言的执行时间,并没有计算公式。
只能实验,观察结果。
第3个回答  2013-07-26
软件调试出来的时间 也就是延时函数调用到调用结束所用的时间 通过看汇编指令计算得出 汇编指令又和机器周期挂钩 机器周期是通过晶振频率计算出的 晶振频率是人为选择的 看你自己
第4个回答  2017-09-25
什么时候需要 .

单片机延时c语言程序怎么写?
void delay(){ uint i;for(i=0;i<20000;i++);} 这里,`20000`是一个预定义的值,用于控制延时的长度。要计算这个函数的具体延时时间,可以将其转换为十六进制形式,即 `4E20`。接着将高字节 `4E` 乘以 `6` 得到 `468D`,再将 `468D` 加上 `2` 得到 `470D`,然后 `470D` 乘以 ...

单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
首先你要知道一个指令周期是几秒 算法是1\/(晶振频率除以12)然后你要知道循环究竟执行了几个指令周期 你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而执...

单片机延时程序的延时时间怎么算的?
单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。

在C51单片机中延时子程序的延时时间是怎么算的?
x每减一次,y减100次,x一共减少1000次 这个子程序的延时时间是:1000*100=100ms(默认时间是us)如果想更精确的话,可以用软件进行调试 for语句下面的{}还可以省略 有不清的可以多交流

单片机C语言中while的延时时间?
用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);然后左侧的SEC后面的就是执行的时间。再给你几个延时程序做参考:软件延时:(asm)晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP...

51单片机用c语言怎么写延时函数?
现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1\/12M *100(s),即1\/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达...

如何用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(...

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

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

单片机c语言延时程序
默认会打开Disassembly Window,如下所示(既有C语言原型,又有汇编后的结果),接下来,只需数一数该循环程序体的汇编指令总机器周期数,即可得到精确的延时时间。 279: void delay(uint ms)280: { uchar i;281: for( ; ms > 0 ; ms--)C:0x6807 D3 SETB C C:0x6808 ...

相似回答