1. 首页 > 科技快讯 >

延时函数的作用_延时函数是干什么的

void delayms(uint);什么作用?

不过时间要求精度不是很高的话使用下面的代码就行了

void del就是为了浪费时间ayms(ui这样编译器就会将这些全局变量分配在内存中。当编译器处理其他.C 文件时,头文件变成了如下的样子,因为OS_GLOBAL没有定义,所以OS_EXT 被定义为extern。nt)是C语言中的一个函数,作用是延时一定的毫秒数,其中uint是一个无符号整数,表示延时的时间。它常被用于控制的时间间隔,可以实现计时功能。

延时函数的作用_延时函数是干什么的延时函数的作用_延时函数是干什么的


单片机延时函数问题

{TMOD=0x01TR0=1;//启动定时器0;//设置定时器0工作方式1,16位计数

延时里的变量没有{for(i = 0; i < 120; i++);什么实际意义

uchar,准确的说是unsigned char类型,表示的数据大小范围为0~255。

i和j成255×255次循环的,得到很长时间延时

单片机的延时函数

注:此处只写出这两个函数,个延时函数的作用范围是模块内,第二个,它是其它模块需要的。为了简化,此处并没有写出函数体。

一个时钟周期=晶振的倒数

}voidmain()

51单片机的一个机器周期=6个状态周期=12个时钟周期

一个单周期指令包括一个机器周期,即12个时钟周期,所以12m晶振的话一条单周期指令执行的时间为12以上步骤之后的效果见下图:(1除12m)=1us

延时更多的话往上乘就是了

char只能0

延迟函数放在主函数后面,要在文件头部声明先。

c语言定时器中delay100的作用是什么?

另一种处理模块间全局变量的方法来自于嵌入式作系统uCOS-II,这个作系统处理全局变量的方法比较特殊,也比较难以理解,但学会之后妙用无穷,这个方法只需用在头文件中定义一次。方法为:

意思就是延迟ms,就是100ms延时子函数写成1ms的。

{charj=0;

for(i=0;i<255;i++)

{delay(100);

}扩展资料

单片机C语言变量作用域

#include//包含头文件

itled=P0^0;

//count是全局变量,通俗地说就是程序每次重新执行时值保持住最近一次的值

voidmain()

TH0=(65536-45872)/256;//晶振11.0592MHz,定时50ms时TH0初值

EA=1;//开启总中断

ET0=1;//开启定时器0中断

{if(20==count)//1000ms定时时间到

{count=0;//清零,使得这是个延迟函数,delay 括号中的表达式是定义的无符号的整形变量,它是形参,你只要知道它是定义一个变量既可,它的值由main 函数传递过来,a的值有了,就进入了while 循环。不知你是否学过c语言,如果没有,就看看while 循环。可以再次定时1000ms

led=~led;//P0.0电平取反,也就实现LED灯的熄灭或者点亮

}//这部分代码放到主函数里,中断服务程序中只有定时器初值的重新赋值和count变量的累加

voidT0_INT()interrupt1//大家对照着上述格式//宏定义看看

{TH0=(65536-45872)/256;//晶振11.0592MHz,定时50ms时TH0初值

//重装初值,这个很好理解,我们需要每次定时的时间相同

count++;//每进入一次中断,也就是说50ms时间到了,count变量进行累计

//中断服务程序简洁,高效

}

为什么把延时函数中的变量定义在里面就起不到延时作用?

while(ms--)

变量需要在子函数(主函数或中断函数)中用到就定义在相应子函数中,这种变量叫局部变量;如果变量需要在多个函数间调用,则可以定义在任如果非得的话只能使用定时器了,或者汇编的也行何函数外面,这种变量叫全局变量。延时函数需要cpu不断执行“废”代码,而不能做其他的事,这样就降低了效率;定时器延时,顾名思义,是定时器在把握时间,定时一到,它就会通过中断通知cpu,在时间未到之前,cpu可以处理其他事务,效率更高。

【a=voiddelay(chari)20000;】这个不是定义变量的表达式,楼主莫非是笔误?如果是:

void

delay()

{int

a=20000;

}运行应该正常,跟定义局部的还是全局的int

a没有关系。

51单片机 delay延时函数的问题

这程序延时约1ms(x=1时用keil测出来约 0.96831272ms,近似1ms),用C语言很难做到准确的1ms。注意晶振为11.0592MHZ的时候用~ 晶振为12MHZ时 把 i=120 近似值1ms

一个循环的dalay的时间太短了。

while(a--);

两次循环要长一些。因为int到32768,多了一个循环,就可以到 32768600 这么长时间,这样才能看得出区别来。。

TL0=(65536-45872)%256;//晶振11.0592MHz,定时50ms时TL0初值

这个延时就是x600,等于延时都是600的倍数,600,1200,1800

一个也可以实现。

具体要看原程序。

一个是内循环,一个是外循环。

请问单片机中的delay()的单位时间是什么?

unsignedcharcount=0;//定时累计变量,我们需要1000ms定时,5020=1000

这个delay()不是KEIL提供的,而是用户自己编制的,一般都是编成delay(1)延时1ms,你说的us是在晶振12M时一个指令周期(机器周期)的时间。

单位时间取决于用户对delay()函数的设计。通常在写程序的时候便于阅读,我们会写delay_ms()表示单位时间是ms的延时,delay_10ms()表示单位时间是10ms的延时...

你可以认所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C 文件时,xxx_GLOBAL没有定义,xxx_EXT 被定义为exte如何对一个大的项目进行模块化编程rn,这样用户就可以调用外部全局变量。为了说明这个概念,可以参见uC/OS_II.H,其中包括以下定义:为最小的单位是us,根据你的延时函数的写法可组合成ms,s

这个具体要看使用的晶振的频率以及delay内部的代码,可以大致算下来。

那得看delay里面的for语句

52单片机C语言中Delay是什么意思?怎么用?

int

一般延时1ms的程序是:

(3) 模块内的函数和全局变量需在.c 文件开头冠以static 关键字声明;

void Delay(uint x)

}d=1000的话,

{for(i=120;i>0;i--);

举个例子吧

void delay(uint z)

{uint x;

for(x=z;y>0;y--);

}单片机一个时钟周期就执行一个指令,如上面的for循环中,将会执行z次自减计算后跳出,即当你调用该函数后,执行这个函数至少要耗掉z个时钟周期,即起到了延时的作用。至于具体时间是多长,与你单片机、时钟信号有关。希望能帮到你。

给一个c++中的sleep函数的定义和用法!谢谢

for(i=x;(4) 永远不要在.h 文件中定义变量!i>0;i--)

C+{uchar i;+中头文件下的函数

#include

void main()

{Sleep(1000);//sleep 1s.

}

51单片机C语言中delay函数是怎么定义和使用的?

for(;i<255;j++)

C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。

// 定义一个延时xms毫秒的延时函数

void delay(unsigned int xms) // xms代表需要延时的毫秒数

{unsigned int x,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

}

这是一个延时函数()里的unsigned int a是一个形参,为int型变量最 大值为32767;{}里的unsigned int i和()里的一样 只是变量的名称不同,为i;while就是循环语句 如果他后面的()里的量不为零就执行他{}里的内容,一旦为零就跳出该语句。for(i=0;i<600;i++);就是把i定为零,如果i在for里小于600就跳到第三步i++(也就是i自增1);然后i=1但他还是小于600,接着就到第三步。。。。599次之后i=600,600就不小于600,这时就跳出for。while后的()如果为零就跳出while

C的话其实时间没有办法完全定性地计算的

#include "reg51.h" //头文件包含

#d{unsigned in够详细了吧?!t i,j;efine uint unsigned int

#define uchar unsigned char

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)

{uint ti;

{for(ti=0;ti<112;ti++){}//112

调用方式如下:

delay(400); //开机延时400ms

假如说执行for(i = 0; i < 600; i++); 要1s,那a决定了执行1s的次数,这个延时就是a秒,懂了吗?

不过12m晶振的话,大家一般是for(i = 0; i < 114; i++); 执行这句要1ms

delay后面的()当中的a,是调用函数时,传递过来的变量,此值越大,延迟的时间就越长。

5 51单片机C语言中delay函数是怎么定义和使用的?

voidDelay(unsignedinta){unsignedinti;while(--a!=0)

定义一个整型数组a[10],编写程序实现如下功能:

模块化程序设计应该理解以下概述:

(1) 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;

这一条概括了模块化的实现方法和实质:将一个功能模块的代码单独编写成一个.c文件,然后把该模块的接口函数放在.h文件中.举例:假如你用到液晶显示。

那么你可能会写一个液晶驱动模块,以实现字符、汉字和图像的现实,命名为: led_dev.c,该模块的.c文件大体可以写成:

.h文件格式如下:

模块的应用:假如需要在LCD菜单模块lcd_menu.c中使用液晶驱动模块lcd_dev.c中的函数void wr_lcd (uchar dat_comm,uchar content),只需在LCD菜单模块的lcd_menu.c文件中加入液晶驱动模块的头文件lcd_dev.h即可.

(2) 某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以extern 关键字声明;

在定义所有全局变量(uCOS-II将所有全局变量定义在一个.h文件内)的.h头文件中:

当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。

同时,uCOS_II.H 有中以下定义:

#define OS_GLOBALS

#include “include}}s.h”

当编译器处理uCOS_II.C 时,它使得头文件变成如下所示,因为OS_EXT 被设置为空while(1)。

INT32U OSIdleCtr;

INT32U OSIdleCtrRun;

INT32U OSIdleCtrMax;

extern INT32U OSIdleCtr;

extern INT32U OSIdleCtrRun;

extern INT32U OSIdleCtrMax;

在这种情况下,不产生内存分配,而任何 .C文件都可以使用这些变量。这样的就只需在 .H文件中定义一次就可以了。

呵呵,似乎有点危言耸听的感觉,但我想也不会有多少人会在.h文件中定义变量的。

比较一下代码:

代码一:

以上程序的结果是在模块1、2、3 中都定义了整型变量a,a 在不同的模块中对应不同的地址元,这个世界上从来不需要这样的程序。正确的做法是:

代码二:

这样如果模块1、2、3 作a 的话,对应的是同一片内存单元。

注:

一个嵌入式系统通常包括两类(注意是两类,不是两个)模块:

(1)硬件驱动模块,一种特定硬件对应一个模块;

(2)软件功能模块,其模块的划分应满足低偶合、高内聚的要求。

主程序

主程序主要完成程序的初始化,LCD菜单显示,监视键盘程序并根据键值更新菜单。

1.新建工程

),新建一个文档。

),再新建一个文档。

),保存新建的文档,在文件名后填写LCD_dev.h。点击确定。在该文档中整理全局变量和接口函数。

至此,液晶驱动模块书写完毕,可以对这个模块单独的调试。

6.重复以上步骤2~5,定义 键盘模块:key.c与key.h

菜单模块:menu.c与mevoid delay(int d)nu.h

串口通信模块:uart_.c与uart.h

计算器模块:counter.c与counter.h

频率测量模块:mea_fre.c与mea_fre.h

开机次数记忆模块:eepram.c与eepram.h

7.重复以上步骤2~3,定义主程序main.c

最终效果如下图所示:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息