前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现微秒级延时

Python实现微秒级延时

作者头像
zeruns
发布2021-04-26 12:23:03
1.9K0
发布2021-04-26 12:23:03
举报
文章被收录于专栏:Zeruns的博客Zeruns的博客

Python实现 微秒(μs) 级 延时/计时 的方法

前言

最近在学习树莓派的GPIO,想用Python来读取DHT11温湿度传感器的数据,DHT11是使用单总线通信的,需要用到微秒级的延时,使用sleep()函数好像没法达到要求,然后我发现时间戳可以精确到小数点后7位,也就是0.1微秒,虽然实际应该达不到这样的精度,但应该还是够用的。

这个方法只适用于Linux系统,Windows系统不知道怎么回事,不管怎么弄延时结果都是1000微秒起步。

1秒(s)=1000毫秒(ms)=1000000微秒(μs)

什么是时间戳

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

实现方法

记录初始时间戳,然后进入循环,每次循环记录一次时间戳,循环判断条件是记录的时间戳减去初始时间戳小于设定的时间就继续循环,直到大于等于设定时间。

源码:

代码语言:javascript
复制
import time    # 导入time模块
# https://blog.zeruns.tech/
def delayMicrosecond(t):    # 微秒级延时函数
    start,end=0,0           # 声明变量
    start=time.time()       # 记录开始时间
    t=(t-3)/1000000     # 将输入t的单位转换为秒,-3是时间补偿
    while end-start<t:  # 循环至时间差值大于或等于设定值时
        end=time.time()     # 记录结束时间

使用方法:将上面的代码复制粘贴到你的程序,然后调用函数 delayMicrosecond(t) 括号内t为延时时间,单位为微秒。

上面的源码中的 t-3 是时间补偿,因为调用函数,执行循环等指令也会消耗时间,可以根据自己测试出来自己修改,我用树莓派4测试出的结果是多消耗了3微秒,所以要减去3。

实例

代码语言:javascript
复制
import time    # 导入time模块
# https://blog.zeruns.tech/
def delayMicrosecond(t):    # 微秒级延时函数
    start,end=0,0           # 声明变量
    start=time.time()       # 记录开始时间
    t=(t-3)/1000000     # 将输入t的单位转换为秒,-3是时间补偿
    while end-start<t:  # 循环至时间差值大于或等于设定值时
        end=time.time()     # 记录结束时间

a=time.time()   # 记录延时函数开始执行时的时间
delayMicrosecond(35)	#延时 35 微秒
b=time.time()   # 记录延时函数结束时的时间

print("https://blog.zeruns.tech/")
print((b-a)*1000000)    # 将延时函数执行消耗的时间打印出来

效果:

推荐阅读

  • 高性价比和便宜的VPS/云服务器推荐:https://blog.zeruns.tech/archives/383.html
  • Python类文章:https://blog.zeruns.tech/category/Python/
  • Arduino读取DHT11,DHT22,SHTC3温湿度数据:https://blog.zeruns.tech/archives/527.html
  • 学生专属优惠权益大全,教育优惠:https://blog.zeruns.tech/archives/557.html
  • 怎样搭建个人博客:https://blog.zeruns.tech/archives/218.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zeruns 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 什么是时间戳
    • 实现方法
    • 实例
    • 推荐阅读
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档