单片机c语言的延时程序500ms

delay(){
int i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
是什么意思??看不明白
i的值是500ms,但是j为什么是110,为什么要写for(j=110;j>0j--)这句话,完全不明白

根据外部晶振的不同,延时1毫秒的循环次数也不一样,一般12M晶振的话用 for(j=time;j>0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为11.0592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-20
51单片机执行一个语句相当于24个晶振周期,for(j=110;j>0;j--);这个语句每次执行相当于执行4个语句,也就是96个晶振周期,执行110次,你用的单片机应该是11.0592Mhz的,因此
for(j=110;j>0;j--);所用时间为:96*110/11059200,约等于1ms,所以执行这个语句110约等于1ms,500此就是500ms
第2个回答  2012-06-20
此函数是内外循环,j是内循环,110次是延时1ms,外循环500次就是500ms。。。
第3个回答  2012-06-20
这个只是靠软件循环延时

因为软循环一次需要时间
这样执行500×110次循环才是500ms

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

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
define uchar unsigned char \/\/定义无符号字符 define uint unsigned int \/\/定义无符号整数 void delay(uint); \/\/声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) \/\/8个流水灯逐个闪动 { P1=~temp;delay(100); \/\/调用延时函数 temp<<=1;}...

如何用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--);}

51单片机程序,请问大神这个延时约500毫秒是怎样算出来的,为什么又要...
这个和指令执行的时间有关,这里的意思就是for语句执行110次就是1毫秒,循环500次就是500毫秒。

请教关于单片机C语言中用while延时的问题
若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个...

求51单片机c语言代码,LED灯闪烁(500ms闪烁一次),6秒后(用T0定时)流水...
include void _delay_ms(unsigned int c) \/\/误差 0us { unsigned char a,b;for(;c>0;c--)for(b=199;b>0;b--)for(a=1;a>0;a--);} void main(void){ while(1){ P2|=(1<<0)&(1<<1);_delay_ms(300);\/\/300MS P2|=~((1<<0)&(1<<1));_delay_ms(300);\/\/300...

单片机间隔点亮一led灯的C语言程序
以下是一个单片机间隔点亮一LED灯的C语言程序,以8051单片机为例:c Copy code include \/\/包含了AT89C51的寄存器定义 void delay(unsigned int xms) \/\/延时函数,xms为要延时的毫秒数 { unsigned int i,j;for(i=xms;i>0;i--)for(j=112;j>0;j--);} void main(){ P1=0x00; \/\/将P1口...

单片机C语言延时500uS程序
一般单片机在c语言中很难得到精确的延时,所以一般对时间要求高的都用计时器中断来做了。如果时间要求不严格可以用for循环来做,你可以实际测试一下,把时间延时到大概一秒左右,然后烧进单片机里运行,比如一个灯亮灯灭的程序,看着灯计数,同时用秒表计时,几个几十次后取平均值就能知道大概时间了。

关于C语言for循环延时函数
for循环实现C语言精确延时 (晶振12MHz,一个机器周期1us.)一. 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--);} 产生的汇编:C:0x0800 7F0F MOV R7,#0x0F C:0x0802 7ECA MOV ...

怎么用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;...

相似回答