• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51单片机的非阻塞式延时函数的实现方法

hayden 2017-11-08 浏览量:3634

在初学51单片机的时候经常使用阻塞式的延时函数,几乎被滥用,使系统效率变得非常低

在系统要求高响应的时候,我使用了状态机写法,但是关于非阻塞的延时使用的不是很灵活,经常设置大量计时变量使用定时器计时延时

有没有大神有什么好方法,或者把这种非阻塞延时函数化,算法化的,请赐教!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 如果是一些周期性执行的函数,可以使用定时器+标志位。

    或者干脆用嵌入式系统,调用系统延时API的时候,会挂起自身并进行任务调度

    满足高效率的要求

    • 发布于 2017-11-08
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了 :(41) : Embossed tape packaging (35,000 pcs/reel) 回复

其他答案 数量:7
  • 做一套软定时器,都是这么用的。
    • 发布于2017-11-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以参考OS的定时机制,记录系统时间,时间到了,触发相关任务。需要做好逻辑分析,不然任务多了乱套。
    • 发布于2017-11-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 延时没有好算法,都是这样用的
    • 发布于2017-11-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般都是 用定时器来实现精确延时,同时也会提高代码运行的效率……延时函数不易用太多……
    • 发布于2017-11-08
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :请看图直观 回复

  • 使用定时器,设定一个延时时间,比如10ms,外部设置一个全局变量,变量的值就是延时时间,比如A=100,却延时100*10ms
    中断中对这个A进行 -- ,直到A=0时,即延时时间到了。
    外部非阻塞方式,只要判断A是不是等于0,if(A==0),如果是,延时时间到,执行相应程序,如果没有到,则直接跳过,或是加else。
    • 发布于2017-11-08
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :1. • 封装: DO-41 • 品牌: PANJIT(强茂) • 型号: FR103_AY_10001 • 2. BK/A304-2A 尺寸: 0.250英寸直径x 1.252英寸长(6.35毫米x 31.80毫米) 没有8.5*26.8的 回复

  • 最好的方法就是用定时器中断,中断中进行变量赋值相应变量,主函数或者子函数中进行判断和清零,
    • 发布于2017-11-21
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :制造商 3M 制造商产品编号 8520-4500PL 供应商 3M 描述 CONN RCPT 20POS 0.1 GOLD PCB 回复

相关问题

问题达人换一批

51单片机的非阻塞式延时函数的实现方法