大家好,又见面了,我是你们的朋友全栈君。
1. c语言延时函数delay,怎么算延时
下面是delay 函延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而达到延迟目的。数原型:
原型:
void Delay(unsigned int nDelay)
{
unsigned int i,j,k;
for ( i=0;i
for ( j=0;j<6144;j++ )
k++;
}
用法:#include
功能:短暂延时
说明:延时msec*4毫秒所以,delay的延迟时间是和你的cpu时钟周期相关的。
2. C语言delay的延时函数怎么写
回答这个问题前提需要搞清楚:
1.你的执行文件在那里运行?
2.你要延时是否“死等”,还是可以切换到其他任务?
———————————————–
如果你只是学习c语言,写个小函数玩玩,可以如下:
void delay(int time)
{
for(;time>0;time–)
{
nop;//可写任何无意义的操作
}
}
死等型的延时,时间根据指令执行速度不同而不同!!!!
3. delay() c语言延迟函数
1、delay函数是一般自己定义的一个延时函数。
2、C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。
// 定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x>0;x–)
for(y=110;y>0;y–);
}
4. 单片机中用写delay函数做延时和用定时器做延时有什么区别
利用循环处理的方式实现的延时,并不精确。
1、当中断发生时,CPU被打断先执行中断服务。导致执行时间变长。
2、使用高级语言时,编译的结果受优化等级等多方面因素干扰,难以计算。
3、在有MMU和Cache的MCU中,指令的执行速度还会受到缓存的影响。
利用定时器延时:
1、因为定时器累加与CPU无关,即使中断,仍然会保持计数。不受上述问题影响
2、缺点需要占用定时器资源。
3、功耗也会高一些
5. 这延时函数怎么理解void Delay1ms
与单片机的计算速度有关,主要看cpu频率
假如你的单片机cpu频率为8Mhz
则该单片机大约每秒进行8 000 000次的运算,
这个delay函数就是通过i,j,k的自减运算来达到延迟效果
一直减到ijk都为0才执行下一段函数
delay(10)就是让单片机进行 i(10) * j(10) * k(50)=5000次的自减运算,时间大约为5000/8 000 000=0.625ms
自己可以根据这个算法来简单测算出延迟时间
6. 请求单片机delay延时函数
void delay1(unsigned int j)
{unsigned char i;
do{for(i=0;i<2;i++);
j–;
asm(“nop”);}
while(j);
}
这是us延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。
void delay1(unsigned int j)
{unsigned int i;
do{for(i=0;i<2853;i++);
j–;}
while(j);
}
这是ms延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。
你可以试试,不行我再给你调
7. 怎么写段单片机延时函数
1、首先分析您的程序,
void delay()
{
int i;
if(1 == TF0)//if(TF0==1),查询定时器溢出标志位
{
TF0=0;
i=10000;//定时溢出时给i赋值1000
TH0=0xDC;TL0=0x00;
i–;//i=999,如果还没有减到0时定时器又溢出,则i永远不会减到0!!!!所以您的这段程序不应该行不通!!
}
while(1)
{
if(i==0)
break ;
}
}
2、建议做法
(1)定义一个全局变量用于作定时计数如unsigned char n;
(2)定时器采用以某一时间基准(10ms)中断方式,每中断一次中断处理程序里n++;
(3)在延时函数中对n进行操作,如延时1s即1000ms则:
void delay_1s()
{
while(n
8. 请求单片机delay延时函数
void delay1(unsigned int j){unsigned char i;do{for(i=0;i<2;i++);j–;asm(“nop”);}while(j);}这是us延时,有误差,j的值越大相对误差越小。
不过相信误差应该在你的可接受范围内。void delay1(unsigned int j){unsigned int i;do{for(i=0;i<2853;i++);j–;}while(j);}这是ms延时,有误差,j的值越大相对误差越小。
不过相信误差应该在你的可接受范围内。你可以试试,不行我再给你调。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150459.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...