0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机延时是怎么实现的

单片机匠人 来源:张飞实战电子 作者:蔡琰老师 2021-10-12 17:18 次阅读

单片机延时大家程序中都会用到,那么怎么实现呢?通常我们有软件实现,就是语句循环;或者硬件实现,通过定时器/计数器。

对于精准而言,从实现语言方向看,底层语言有汇编C语言,通常我们单片机程序用C语言比较多,但是相对而言汇编更精准。从实现方式来看,有软件方式和硬件方式,那么对于C语言延时的方法哪种更精准呢?自然是定时器计数器的方式了,为什么呢?一起来看看吧。

1、软件延时-循环实现

在很多时候,定时器会被用作其他用途,不方便再用作计数了,所以这个时候就只能用软件方法延时。软件方法延时就是循环语句来实现。

通过使用带_NOP_();语句的函数实现,定义一系列不同的延时函数。我们都知道C语言最终通过编译生成汇编,所以一条C语言可能会反汇编成多条汇编语句,每条汇编指令都有指令周期,比如我们时钟是8Mhz的,那么一个指令周期就是125ns,那么NOP是一个空指令,占用一个指令周期。假如我们定义一个1ms的延时函数,那么函数里面全部用NOP指令也需要循环多次,那么循环语句也可能会有多条汇编实现,具体的根据编译器不同也不同,我们就很难精确的计算出实际的延时,那么计算大概也可以,然后最有效直接的方法就是通过示波器去测试然后再去调整循环数。不要太纠结计算数值,可以调试的。示波器测试方法更简单,在延时前后加一个引脚的输出反转信号就可以了。

到这里大家是不是觉得其实用汇编写延时函数就能做到精确了呢?相比较C语言,的确是汇编可以做到很精确的数值,因为我们可以确定每条指令的指令周期是多少,根据延时函数用到的所有指令都可以计算出来,最终计算得出比较精准的循环数值。

2、硬件延时-定时器/计数器实现

当然在大多情况下,我们还是会选择定时器来做延时处理,首先我们可以通过时钟配置定时器工作,获得精准计数,具体精准程度要看给定时器用的时钟了,内部时钟或者外部晶振的精度。可以实现极短时间的精确延时。

在实际应用中,定时常采用中断方式,通过对定时器的配置,获得中断方式和定时时间,然后通过判断计数值获得想要的延时效果,用这种方法从程序的执行效率和稳定性方面考虑都是最佳的方案。大部分项目主循环需要处理很多事情,如果在主循环中用软件延时方法难免需要等待过程,尤其是长延时的时候不能处理其他,如果好多外设在工作,会造成通信不上或者响应不及时。

总结:大部分程序中我们可以写个小的软件延时,必须等待的小延时可以用软件的实现,就可以省去对延时时间的判断了,等待就可以了。但是需要测试延时时间是否准确,或者可以直接用汇编写延时函数。硬件延时也有必要实现,根据实际需求去应用。

大部分延时应用过程中还是会有些误差的,这个是在多个小的误差基础上叠加的,是可以接受的。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6050

    文章

    44687

    浏览量

    641184
  • 软件
    +关注

    关注

    69

    文章

    5063

    浏览量

    88445
  • C语言
    +关注

    关注

    180

    文章

    7618

    浏览量

    138659

原文标题:单片机延时的两种实现方法

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机中断技术详解

    在现代电子设备中,单片机作为控制核心发挥着举足轻重的作用。而在其高效运作的背后,中断机制是推动单片机实现实时响应与高效执行的关键因素。本文将深入探讨单片机中的中断概念、中断系统的结构、
    的头像 发表于 02-02 15:57 332次阅读

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发中的一个重要环节,它帮助开发者发现和修复代码中的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试工具和命令
    的头像 发表于 12-19 09:56 734次阅读

    使用单片机实现直流电机的PWM调速控制原理图

    使用单片机实现直流电机的PWM调速控制
    发表于 12-10 15:29 6次下载

    上位如何实现发送参数给单片机单片机保存接收的参数重复运行指定的功能

    ,类似于设定单片机运行指定功能时所需要的参数: 举例:名称,功能,上限,下限,参数一,参数二,...,延时。一行代表一个功能。 上位机设定好参数通过串口下发给单片机单片机接收到数据
    发表于 12-04 08:19

    单片机与ADS1115之间用的TXS0104进行的数据电平转换,延时很大怎么解决?

    我使用STM32单片机以4MHZ运行,以大概100khz的时钟IIC进行与ADS1115通讯,发现当传输完8位时,需要等待近14ms 才能从逻辑分析仪上看到丛返回的ACK信号。单片机与ADS1115之间用的TXS0104进行
    发表于 12-03 07:18

    如何实现51单片机与PC的串行通信

    51单片机与PC的串行通信是一种常见的通信方式,它允许单片机通过串行接口与PC进行数据交换。这种通信方式在嵌入式系统、工业控制、物联网等领域有着广泛的应用。以下是
    的头像 发表于 10-21 11:35 1582次阅读

    单片机怎么写入程序

    单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器、输入/输出接口等功能集成在一个芯片上。单片机广泛应用于嵌入式系统和物联网设备中。编写单片机
    的头像 发表于 10-21 11:21 1230次阅读

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程中,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用领域中得到广泛应用。以下是对
    的头像 发表于 10-17 18:03 1252次阅读

    单片机烧录程序用什么软件

    单片机烧录程序是单片机开发过程中的一个重要环节,涉及到将编写好的程序代码通过烧录器写入单片机的ROM中,以实现单片机的控制。 烧录器的类型
    的头像 发表于 09-02 10:05 2098次阅读

    单片机烧录程序的基本步骤是什么

    单片机烧录程序是单片机开发过程中非常重要的一步,它涉及到将编写好的程序代码通过一定的方式传输到单片机内部的存储器中,使单片机能够按照预定的逻辑执行任务。 一、硬件准备
    的头像 发表于 09-02 09:47 1777次阅读

    揭秘:单片机硬件与软件延时之大不同!

    在嵌入式项目中,软件开发基本上都会使用到延时,那么,该用软件延时还是硬件延时?它们又有什么区别呢?今天就来讲讲关于硬件延时和软件延时的内容,
    的头像 发表于 07-25 08:11 1023次阅读
    揭秘:<b class='flag-5'>单片机</b>硬件与软件<b class='flag-5'>延时</b>之大不同!

    蓝牙模块如何实现单片机和手机端数据互传

    蓝牙模块实现单片机和手机端数据互传的过程可以分为以下几个步骤: 硬件准备 : 确保你有一个支持蓝牙通信的单片机开发板,如Arduino、Raspberry Pi等。 准备一个兼容的蓝牙模块,如
    的头像 发表于 07-24 17:59 3240次阅读
    蓝牙模块如何<b class='flag-5'>实现</b><b class='flag-5'>单片机</b>和手机端数据互传

    UCGUI单片机源码

    UCGUI单片机源码
    发表于 07-04 17:11 1次下载

    如何系统、科学地自学单片机

    很多初学者都会面临这个问题,我想学习单片机、我也想学好单片机、我也想系统地学习单片机,但是单片机涉及到的学科多且杂根本不是三天两天就能学完的,很多人都逃脱不了从入门到放弃的怪圈?那么我
    的头像 发表于 03-28 08:03 1298次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

    fpga能代替单片机

    FPGA(现场可编程门阵列)和单片机在功能和应用上各有特点和优势,因此FPGA并不能完全代替单片机
    的头像 发表于 03-27 14:29 1086次阅读