㈠ 单片机c语言延时程序
一般单片机在c语言中很难得到精确的延时,所以一般对时间要求高的都用计时器中断来做了。如果时间要求不严格可以用for循环来做,你可以实际测试一下,把时间延时到大概一秒左右,然后烧进单片机里运行,比如一个灯亮灯灭的程序,看着灯计数,同时用秒表计时,几个几十次后取平均值就能知道大概时间了。
㈡ 单片机C语言延时程序,延时时间是怎样计算的
最好不要用精确延时,因为这样是算不准的,编译器不一样,可能也会不一样.
㈢ 单片机c语言的延时程序500ms
根据外部晶振的不同,延时1毫秒的循环次数也不一样,一般12M晶振的话用 for(j=time;j>0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为11.0592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。
㈣ 求一个1ms的单片机C语言延时程序
void delay(char x)
{
unsigned char a,b,c;
for(c=x;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
学过标准C就知道了,char 和 int 是可以相互转换的,char的取值范围是-128~+127
unsigned char 的是0~255
可以用unsigned int啊,我一般都是用char的,用unsigned int的话占的字节比较多,运行速度也没char那么快,计算机会麻烦点,建议使用char
㈤ 求助:单片机C语言中延时程序怎样计算
你好:
如果你想直接知道答案,那么我告诉你,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。
希望我的回答能帮助到你。
㈥ 求指教单片机c语言延时程序
for延时万用,但占资源,楼上们讲的很全了。推荐定时器延时,时间比较准而且延时的时候能干别的事,或者用外部的时钟芯片计时。
㈦ 单片机c语言延时函数
12M晶振,1个机器周期为1us,
把它转成汇编:
LCALL DELAY
........
DELAY:
MOV R7,#01H
DJNZ R7,$
RET
貌似调用、赋值、减1比较、返回,这几个环节下来是得6个机器周期。
但是在t=2的时候并不是12us,应该为8us左右,因为其它环节没变,只是增加了减1比较这个环节。
㈧ 单片机延时一秒的c程序
单片机延时一秒
程序是不固定的
要根据你的晶振 计算出一次循环执行需要的时间
然后 写循环次数
一般是
voiddelay_one_second(void)
{
inti;
for(i=0;i<TIMES;i++);
}
这样就可以了。 TIMES是要计算的。或者 根据示波器 自己尝试。
㈨ 求单片机C语言延时程序(延时10s)
用定时器做吧,DELAY了不能做别的事情,效率太低了。做一个1ms的定时程序,再到计数10000次的时候执行一次你要的程序(比如说置位某个变量),这样就可以了。51就那么几个寄存器,看一下就可以了设定了,TH和TL只要记住计数到0的时候,会产生中断就可以了
㈩ 单片机延时程序C语言
都有关系,用uchar也能起作用,但是不明显,你就觉得有问题,原因应该是这样的,char型是8位的,就算是无符号的字符型,最大也是255,也就是说你给的值再大就会溢出,没什么用了,比如你给一个256,溢出了,这时候Z的值应该是0,但是这个程序是没错的,你给0和255延时还是不同的,,当然你现在应该明白为什么整型就可以了,因为无符号的int是32位的,而这个数最大值到底有多大,你自己算一下,所以你给的数基本不会溢出,延时明显,字符型主要是用来写字符的,算数的话你还是别用这个类型,各有各的用途