精华内容
下载资源
问答
  • 2020-12-23 02:06:40

    .

    STM32

    的几种延时方法(基于

    MDK

    固件库

    3.0

    ,晶振

    8M

    )

    单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时

    delay_us( )

    毫秒级

    delay_ms( )

    1.

    普通延时法

    这个比较简单,

    让单片机做一些无关紧要的工作来打发时间,

    经常用循环来实现,

    不过要做的比较精准还是要下一番功夫。

    下面的代码是在网上搜到的,

    经测试延

    时比较精准。

    //

    粗延时函数,微秒

    void delay_us(u16 time)

    {

    u16 i=0;

    while(time--)

    {

    i=10;  //

    自己定义

    while(i--) ;

    }

    }

    //

    毫秒级的延时

    void delay_ms(u16 time)

    {

    u16 i=0;

    while(time--)

    {

    i=12000;  //

    自己定义

    while(i--) ;

    }

    }

    2.SysTick

    定时器延时

    CM3

    内核的处理器,

    内部包含了一个

    SysTick

    定时器,

    SysTick

    是一个

    24

    位的

    倒计数定时器,

    当计到

    0

    时,

    将从

    RELOAD

    寄存器中自动重装载定时初值。

    要不把它在

    SysTick

    控制及状态寄存器中的使能位清除,就永不停息。

    SysTick

    STM32

    的参考手册里面介绍的很简单,其详细介绍,请参阅《

    Cortex-M3

    威指南》

    这里面也有两种方式实现:

    a.

    中断方式

    如下,定义延时时间

    time_delay

    SysTick_Config()

    定义中断时间段,在中断中

    递减

    time_delay

    ,从而实现延时。

    volatile unsigned long time_delay; //

    延时时间,注意定义为全局变量

    //

    延时

    n_ms

    void delay_ms(volatile unsigned long nms)

    {

    //SYSTICK

    分频

    --1ms

    的系统时钟中断

    if (SysTick_Config(SystemFrequency/1000))

    更多相关内容
  • 本文主要介绍一个编写延时函数的简单方法,感兴趣的朋友可以看看。
  • 实现功能:秒延时2秒程序 使用芯片:STC15F104E 晶振:12MHZ 波特率:9600 编译环境:Keil
  • php在用header重定向的时候,可以设置下... 您可能感兴趣的文章:PHP生成唯一订单号的方法汇总php生成唯一的订单函数分享PHP生成唯一订单号用HTML/JS/PHP方式实现页面延时跳转的简单实例PHP如何实现订单的延时处理详解
  • 多初学者对于程序中ms级延时函数的编写方法比较疑惑,其原理和方式虽然简单,但是却没有相关资料。这里用一个例程详细介绍一下。
  • 刚完成一个语音相关的项目,简单的总结了一下webrtc回声消除的原理,以及时间延时估算方法,希望对大家有所帮助。
  • ASP页面延迟的两个简单方法 asp延时第一种 代码如下:<% Response.Buffer = True %> <% ‘ Setup the variables necessary to accomplish the task Dim TimerStart, TimerEnd, TimerNow, TimerWait ‘ ...
  • axios简单实现小程序延时loading指示 小程序和小游戏的wx.showLoading方法相信大家都不会陌生,但是怎样处理loading才能又更好的用户体验呢? 假设需求如下,1秒类请求没有相应,才弹出loading,否则不弹出,请求...
  • 一般我接触到的解决方法中在比较小的服务里都会自己维护一个backend,但是随着这种backend和server增多,这种方法很大程度和本身业务耦合在一起,所以这时需要一个延时队列服务。 名词解释 topic_list队列:每一个来...
  • 图片延时加载其实是有jquery插件了并且加载方法非常的简单并且合理了,但有朋友觉得加载jquery插件包太大了,于时自己写了一个,给各位分享一下。 首先,图片延时加载可以节省我们带宽,获取到更好的用户体验,尤其...
  • 多初学者对于程序中ms级延时函数的编写方法比较疑惑,其原理和方式虽然简单,但是却没有相关资料。这里用一个例程详细介绍一下。
  • unity中的简单延时方法

    千次阅读 2017-09-06 14:51:32
    在unity中我们经常会需要考虑一件事,如何让一个物体或者功能在特定的条件下出现,这时我们就可以考虑应用...下面需要讲的的是两次比较常见的延时方法,一个是unity自带的Invoke和InvokeRepeating,还有一个是协程。

    unity中的简单延时方法

        在unity中我们经常会需要考虑一件事,如何让一个物体或者功能在特定的条件下出现,这时我们就可以考虑应用延时的方式来解决,我们可以通过设定不同的时间点,让物体干不同的事情,从而达到想要的效果。下面需要讲的的是两种比较常见的延时方法,一个是unity自带的InvokeInvokeRepeating,还有一个是协程。

    一、场景的搭建

            首先我们先搭建一个简单的场景,为了达到直观的效果,我们先创建两个Cube,一个Cube用来验证Invoke和InvokeRepeating的方法,另一个用来验证协程。我们可以通过不同时间段改变Cube的材质来体现延时的效果。比如让Cube从初始的白色通过不同时间段,由白变红,再由红变黄,最后再变绿,通过改变颜色变换时需要的时间来达到延时效果。

    二、功能实现

    我们在其中一个Cube中添加一个自定义脚本delayedOne。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class delayedOne : MonoBehaviour
    {
        public MeshRenderer skin;  //定义一个网格渲染器
    	void Start ()
        {
            skin = this.transform.GetComponent<MeshRenderer>();  //获取网格渲染器
            skin.material.color = Color.red;   //让物体材质变为红色
            Invoke("changeOne", 2f);           //延时方法
            // "changeOne", 2f, 1f);
        }
        private void changeOne()
        {
            skin.material.color = Color.yellow; //材质变为黄色
            Invoke("changeTwo", 3f);
        }
        private void changeTwo()
        {
            skin.material.color = Color.green;  //材质变为绿色
        }
    }

        在脚本中,主要用到Invoke这个延时方法。在使用Invoke这个方法之前,我们要先写一个延时的时候需要执行的方法,提供Invoke这个方法去调用别的方法来达到延时目的。Invoke的书写格式是在括号里添加需要调用的方法的方法名,后边跟着延时的时间。在脚本中我添加了2秒的时间,系统就会在过完2秒后执行changeOne方法,让物体材质变黄。别的方法里也可以添加Invoke方法,能达到嵌套的效果。而InvokeRepeating方法里多加了一个时间,那个时间指定的是重复执行方法的时间间隔。

    在另一个Cube中添加自定义脚本delayedTwo。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class delayedTwo : MonoBehaviour
    {
        public MeshRenderer skin;
    	void Start ()
        {
            skin = this.transform.GetComponent<MeshRenderer>();
            skin.material.color = Color.red;
            StartCoroutine("changeSkin");  //开始协程
    	}
    
        IEnumerator changeSkin()  //协程方法
        {
            yield return new WaitForSeconds(2f);  //暂停协程,2秒后执行之后的操作
            skin.material.color = Color.yellow;
            yield return new WaitForSeconds(3f);  //3秒后执行之后的操作
            skin.material.color = Color.green;
        }
    }
    
        在脚本中主要运用协程来控制延时方法,要想使用协程先写方法,以IEnumerator开头,自定义名字,在方法中用yield return new WaitForSeconds()来暂停协程,括号里填时间,设定多少秒后执行之后的操作。脚本中先暂停协程,2秒后开始执行材质变黄操作,之后暂停3秒后执行材质变绿操作。协程方法写完后就是启动协程,用StartCoroutine加方法名来启动协程。

    三、验证结果

            运行程序,通过观察我们可以看出虽然使用的方法不同,但两个Cube所体现的效果是相同的。

            

    两个Cube同时从红变为黄再变为绿,两种不同的方法由于设定的延时相同,就能达到同样的效果。

    四、总结

    总之,unity中常用的延时方法就这两种,在Invoke方法中确定了调用方法,在确定延时时间就能实现延时功能,而协程也是通过调用方法,确定暂停协程的时间来达到延时效果,只要确定了延时的时间,我们便能通过调用方法来实现延时。

        

    展开全文
  • WEB开发中经常会遇到页面跳转或延时跳转的需求,掌握各种页面跳转方式非常必要。 以下是我总结有用HTML/JS/PHP三类方式实现跳转的方法,例子皆为三秒后跳转到index.php页面。 1,HTML方法: 在HEAD中添加<meta>...
  • 参考了51单片机 Keil C 延时程序的简单研究,自己也亲身测试和计算了一些已有的延时函数。
  • 以双向可控硅作为驱动电路,电磁干扰小,同时电路结构简单、安全可靠、成本低廉。在节省电力资源的同时保证了安全性能,因此,该电路在照明设备、家用电器和各类工业设备中均具有广泛的应用前景。  1 驱动控制...
  • 为了获取河流中泥沙污染物颗粒的动态运动轨迹详情,减少泥沙沉降对河道的污染,提出了一种基于异步延时法和光场相机相结合的颗粒动态轨迹测量方法,通过相机在长曝光时间内记录的颗粒运动轨迹,实现颗粒运动状态的...
  • 最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。 候选方案对比 下面是想到的几种实现延时任务的方案,...
  • 因此数字滤波器一般是通过它们的传递函数进行数学仿真,而且为了做到这一点,能够方便地仿真由采样率fs引起的采样延时T=1/fs非常重要,因为这个延时定义和衡量了整个滤波器的响应性能。  通常拉普拉斯变换...
  • 测量图像传输延时的一个简单方法

    千次阅读 2020-03-11 19:19:51
    0. 背景 在有opencv的环境下,使用某家的云远程传输图像 using namespace cv; //计算当前时间 double t; t = (double)getTickCount()/ getTickFrequency();... 有更方便的测量图像传输延迟的方法,欢迎大神们留言!

    0. 背景

    在有opencv的环境下,使用某家的云远程传输图像

    using namespace cv;
    //计算当前时间
    double t;
    t = (double)getTickCount()/ getTickFrequency();
    //转变为字符串
    string time_tt_double = to_string(t);
    
    //dst_img 是将要传输的图片
    cv::putText(dst_img, time_tt_double, cv::Point(100, 250), cv::FONT_HERSHEY_COMPLEX, 2.0, cv::Scalar(0, 255, 255), 2, 8, 0);
    //在传输图像的循环中显示图像,不加waitKey图片会卡成灰色
    cv::imshow("dst_img", dst_img);
    cv::waitKey(25);
    
    //string time_tt_l_int = to_string(t);
    // https://blog.csdn.net/u012526003/article/details/52805800
    //time_t t_t = time(0);
    //char ch[64];
    //strftime(ch, sizeof(ch), "%Y-%m-%d %H-%M-%S", localtime(&t_t)); //年-月-日 时-分-秒

    1. 接收图像

    在客户端,接收传输图像,将两台计算机放到一起,拿出相机拍照,即可,对比同一时间显示图像的差距(7.176-6.776=0.4s,即延迟大概400ms),大概可视为传输延迟,显示时间以秒为单位。

    有更方便的测量图像传输延迟的方法,欢迎大神们留言!

    展开全文
  • 因此数字滤波器一般是通过它们的传递函数进行数学仿真,而且为了做到这一点,能够方便地仿真由采样率fs引起的采样延时T=1/fs非常重要,因为这个延时定义和衡量了整个滤波器的响应性能。  通常拉普拉斯变换...
  • 提出了一种基于延时复用技术的新的短时间间隔测量方法.根据基于时一空关系的时间间隔测量原理,将若干延时单元组成延迟链.延迟链的输出被反馈到系统输入端并与输入信号进行单稳态触发逻辑判断,判断结果被重新送...
  • 在给单片机写程序的时候往往需要一个微秒或者毫秒的延时子程序,但是C语言不同于汇编,难根据语句确定准确的延时时间,经过各种查资料得到一种简单实用的方法:通过keil下断点调试确定时间。
  • 单片机写延时程序的几种方法

    千次阅读 2021-05-19 16:36:27
    1)空操作延時 (12MHz)void delay10us(){_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();}2)循環延時 (12MHz)Void delay500ms(){unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;...}延時總...

    1)空操作延時 (12MHz)

    void delay10us()

    {

    _NOP_();

    _NOP_();

    _NOP_();

    _NOP_();

    _NOP_();

    _NOP_();

    }

    2)循環延時  (12MHz)

    Void delay500ms()

    {

    unsigned char i,j,k;

    for(i=15;i>0;i--)

    for(j=202;j>0;j--)

    for(k=81;k>0;k--);

    }

    延時總時間=[(k*2+3)*j+3]*i+5

    k*2+3=165 us

    165*j+3=33333 us

    33333*i+5=500000 us=500 ms

    3)計時器中斷延時(工作方式2) (12MHz)

    #includesbit led=P1^0;

    unsigned int num=0;

    void main()

    {

    TMOD=0x02;

    TH0=6;

    TL0=6;

    EA=1;

    ET0=1;

    TR0=1;

    while(1)

    {

    if(num==4000)

    {

    num=0;

    led=~led;

    }

    }

    }

    void T0_time() interrupt 1

    {

    num++;

    }

    4)C程序嵌入組合語言延時

    #pragma asm

    ……

    組合語言程序段

    ……

    #pragma endasm

    KEIL軟件仿真測量延時程序延時時間

    a560fa4822338fd84705d3285c5460aa.png

    這是前段事件總結之延時程序、由於不懂組合語言,故NO.4無程序。希望對你有幫助!!!

    對於12MHz晶振,機器周期為1uS,在執行該for循環延時程式的時候

    Void delay500ms()

    {

    unsigned char i,j,k;

    for(i=15;i>0;i--)

    for(j=202;j>0;j--)

    for(k=81;k>0;k--);

    }

    賦值需要1個機器周期,跳轉需要2個機器周期,執行一次for循環的空操作需要2個機器周期,那么,對於第三階循環 for(k=81;k>0;k--);,從第二階跳轉到第三階需要2機器周期 ,賦值需要1個機器周期,執行81次則需要2*81個機器周期,執行一次二階for循環的事件為81*2+1+2;執行了220次,則(81*2+3)*220+3,執行15次一階循環,則 [(81*2+3)*220+3]*15,由於不需要從上階跳往下階,則只加賦值的一個機器周期,另外進入該延時子函數和跳出該函數均需要2個機器周期,故還需要+5。

    unsigned char i,j,k;用一個機器周期,+上進出函數的2*2個機器周期,則最好需+5個機器周期的時間。

    展开全文
  • RC延时电路计算方法

    千次阅读 2021-01-28 23:02:34
    电容充放电时间常数RC计算方法 进入正题前,我们先来回顾下电容的充放电时间计算公式,假设有电源Vu通过电阻R给电容C充电,Vo为电容上的初始电压值,Vu为电容充满电后的电压值,Vt为任意时刻t时电容上的电压值,那么...
  • STM32延时函数的四种方法

    千次阅读 2021-01-21 18:28:31
    这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,在某些编译器下,代码会被优化,导致精度较低,用于一般的延时,对精度不敏感的应用场景中。 //微秒级的延时 void delay_us(uint32_t ...
  • STM32延时函数的三种方法

    千次阅读 2020-08-11 15:55:34
    这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。 //粗延时函数,微秒 void delay_us(u16 time) { ...
  • 一种Cortex-M内核中的精确延时方法

    千次阅读 多人点赞 2018-11-10 20:37:39
    本文介绍一种Cortex-M内核中的精确延时方法 前言 为什么要学习这种延时的方法? 多时候我们跑操作系统,就一般会占用一个硬件定时器——SysTick,而我们一般操作系统的时钟节拍一般是设置100-1000HZ,也就是1ms...
  • 一、背景,开发场景 之前负责开发过一个会议室系统,这个系统整体不难,唯一有一个技术难点,就是需要延时任务,会议的开始、结束需要系统...使用定时任务每隔一段短的时间轮询去数据库查询数据?当然可以,但是如

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,377
精华内容 52,550
关键字:

很简单的延时方法