标题: 求大神解释c51中delay 延时的作用以及算法 [打印本页]

作者: ROGERER    时间: 2016-7-20 21:06
标题: 求大神解释c51中delay 延时的作用以及算法
求解释
for(i=4;i>0;i--)
for(j=220;j>0;j--)
在程序中延时时长和算法
急!!

作者: wc86110    时间: 2016-7-20 21:30
条件不够没法回答
作者: 无量寿经    时间: 2016-7-20 21:37
本帖最后由 无量寿经 于 2016-7-20 21:40 编辑

以下内容来源于《51单片机轻松入门-基于STC15W4K系列》第一章,里面有软件使用方法与软件源码。
完整函数格式
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--);    //注意后面有分号
}
使用下面的软件,你想延时多久就延时多久



延时程序.rar (2.4 MB, 下载次数: 179)





作者: ROGERER    时间: 2016-7-20 22:53
无量寿经 发表于 2016-7-20 21:37
以下内容来源于《51单片机轻松入门-基于STC15W4K系列》第一章,里面有软件使用方法与软件源码。
完整函数 ...

我知道这一类的软件,但是我想知道上面那个怎样进行计算,算出来是延时多久?还有咋算的,求个详细解释,谢谢
作者: ahshmj    时间: 2016-7-21 20:35
汇编的算出来极准。C语言不一样。
作者: 无量寿经    时间: 2016-7-21 21:16
本帖最后由 无量寿经 于 2016-7-21 21:21 编辑

运算过程是根据反汇编指令得出的,推理过程较为复杂,C——汇编——VB,在书上总共讲了8页,怎样进行计算,算出来是延时多久,这个自己试试就知道了,也可以看下视频使用演示与要点说明。STC15单片机视频地址:
http://pan.baidu.com/share/home?uk=4077802723&view=share#category/type=0
延时软件使用说明在“” 4—硬件仿真.avi“,这个地址也可以下载到完整的程序代码。
完整内容请查阅下面这本书的第一章。



作者: jwjjwj123    时间: 2016-7-22 07:04
如像根据晶振来,一个语句多长时间,来算
作者: ROGERER    时间: 2016-7-22 10:14
无量寿经 发表于 2016-7-21 21:16
运算过程是根据反汇编指令得出的,推理过程较为复杂,C——汇编——VB,在书上总共讲了8页,怎样进行计算, ...

好的。谢谢
作者: shitouyiyuya    时间: 2016-7-26 22:36
#在这里快速回复##include <reg51.h>
作者: 690665986    时间: 2016-12-27 12:12
void delay(uint z)
{
uint i,j;
for (i=z;i>0;i--)
        for(j=110;j>0;j--);
}
纯手打
作者: lesterlzy    时间: 2017-6-22 19:54
厉害啊 但是不同的单片机怎么计算呢?
作者: 无量寿经    时间: 2017-6-22 21:45
lesterlzy 发表于 2017-6-22 19:54 | 只看该作者


厉害啊 但是不同的单片机怎么计算呢?

可以选择不同的单片机,AT89与STC89相同,低速单片机,STC11、STC12、STC15等同属于高速单片机。












作者: 3760609865    时间: 2017-6-22 22:09
是根据执行单步需要多少时间,然后再执行了多少次来计算的。所以它与你的工作频率和所用的单片机有关联。
作者: 冯子文    时间: 2018-1-1 19:38
好复杂!
作者: vickey    时间: 2018-1-2 09:46
这应该是因单片机而议的吧,通过循环,来延时
作者: htkinverter    时间: 2018-10-10 23:39
可以用!
作者: DPPO    时间: 2018-10-11 17:11
你现在这个用的是利用循环占用CPU时间起到延时效果,具体延时时间可以通过两种方法来得知:
1、通过debug,也即调试功能,调试有两种,有模拟有在线,我们直接用模拟即可。通过debug可知你这个延时函数延时的具体时间,注:软件模拟的晶振值需与实际硬件所用的晶振值一样,不然延时时间会有偏差。
2、第二种就是通过晶振算出振荡周期,机器周期,指令周期,然后算出这个循环的具体延时时间。
3、如果想要用循环来起到延时,且想要具体延时时间,可自己算出所需要的具体时间,觉得麻烦可以用软件来替代计算。我上传的附件就可以。4、如果会中断,也可以使用计时器来进行延时。
5、希望我的回答对你有所帮助。

单片机小精灵v1.3完美破解.zip

1.2 MB, 下载次数: 24

里面有各种用途,计算延时只是其中之一


作者: somayboy    时间: 2018-10-11 17:43
  使用软件小程序去算
作者: psuxaog    时间: 2018-10-21 11:01
可以开个定时器中断,在里面放标志位,主循环中查询标志位,使程序有一定的节拍,这样程序中的时序会比较精确,例如:
  1. bit gFlag10ms = 0;
  2. void TIM10_IRQ(void) interrupt IRQ_T0
  3. {
  4.     TL0 = XXX;
  5.     TH0 = XXX;
  6.     gFlag10ms = 1;
  7. }
  8. void main(void)
  9. {
  10.     SYS_Init();
  11.     while(1)
  12.     {
  13.         if(gFlag10ms)
  14.         {
  15.             gFlag10ms = 0;
  16.             DUST_Server();
  17.             MTR_Server();
  18.             COVER_Server();
  19.         }
  20.     }
  21. }
复制代码
而如果用于模拟IIC等程序的延时可以先简单编写一个延时程序,然后仿真,在KEIL反汇编中查看反汇编代码,查询单片机规格书得到每个指令的周期,调教延时程序,如果有示波器或逻辑分析仪的话可以把某个IO口置1,延时,置零,用仪器观察延时时间然后调试。


作者: 我要当大佬    时间: 2018-12-11 19:33
软件延时的基本原理是多次重复执行指令,比如1条指令执行需要1微妙的时间,那么执行一千条这个指令 就会消耗一毫秒的时间;  其中asm("nop");语句是插入汇编指令的写法。表示在for循环中插入一条nop指令,这是一个空操作指令;它的执行将消耗掉一个cpu周期,因为我们的目的就是延时,所以空操作就可以;  但是C语言书写的fof循环编译器会加入很多我们看不到的底层实现代码,它们的执行也需要时间,所以循环次数远小于1000;   注意:软件延时只能用到要求不高的场合,因为软件延时会无端的浪费掉单片机的资源,延时也容易被打断就不准确了
作者: Evan.LRW    时间: 2019-7-16 12:54
用软件算方便
作者: univers    时间: 2019-7-16 16:35
求解释
for(i=4;i>0;i--)
for(j=220;j>0;j--)
在程序中延时时长和算法
先是i=4
之后i减1后不等于0
跳到下面j=220
之后j还是大于0 则减一,如此循环减去,减去的次数就是4*220了
因为CPU执行一次是要时间的,加在一起就是达到延时目地。


作者: 若如初见    时间: 2019-7-16 21:33
ROGERER 发表于 2016-7-20 22:53
我知道这一类的软件,但是我想知道上面那个怎样进行计算,算出来是延时多久?还有咋算的,求个详细解释, ...

这是利用程序进行延时,和利用定时器延时还是有所区别的定时器可以根据机器周期算出来,软件delay程序,是依照执行代码的速率统计时间的,你可以利用keil软件进行模拟在调试窗口下可以查看delay所延迟的时间。
作者: nsush    时间: 2019-7-17 01:16
psuxaog 发表于 2018-10-21 11:01
可以开个定时器中断,在里面放标志位,主循环中查询标志位,使程序有一定的节拍,这样程序中的时序会比较精 ...

非常感谢!
作者: t20ily    时间: 2019-12-10 22:48
无量寿经 发表于 2016-7-20 21:37
以下内容来源于《51单片机轻松入门-基于STC15W4K系列》第一章,里面有软件使用方法与软件源码。
完整函数 ...

需要这个程序,感谢分享
作者: RETRE    时间: 2019-12-11 15:08
条件不够没法回答
作者: 我们不一样111    时间: 2019-12-16 11:29
是根据执行单步需要多少时间,然后再执行了多少次来计算的
作者: ZhuHaoDong    时间: 2020-3-15 20:43
楼主 你这个问题解决没  我有同样的问题
作者: pluto^n    时间: 2020-3-16 20:01
你这没写全啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1