解决办法也很简单,占用一个定时器,用定时器计算精确时间。不过如果没有加晶振的话时间也不准的 |
阻塞式延时,最大的问题在函数的运行的时间很长,后面的语句要等待,说个例子,IIC的工作里面就有大量的延时操作,完成一个动作,等待10MS再操作其他的动作,程序都停止等待这个10MS的结束。这个等待会影响到其他的操作,好象按键输入,AD输入等等,小程序还好,大一点的程序就有麻烦了。 |
一般8位机,尽量避免阻塞式延时,这种方式,会让定时器要求高,开两个定时都会有函数超时的问题的可能。 |
cnfloatleaf 发表于 2023-12-28 17:21 给个教程怎么搞的? |
wkman 发表于 2023-12-28 14:21 如果是STM32的单片机,建议用dwt功能进行计时,免去接硬件的繁琐,直接在软件里就可以计算运行时长 |
延时程序我也是用示波器来测量,因为各种原因,计算的都不准。 |
winson007 发表于 2021-4-22 17:22 广告才是关键 |
示波器,是干什么用的??? 现在各种mcu的内核速度不一样,靠数几个_nop_之类的,绞尽脑汁去计算,不如示波器卡一下时间,一目了然!!! |
joyb 发表于 2023-12-27 09:19 不是18B20、HX711、红外接收不用delay,是18B20、HX711、红外接收的这些程序,几十μS到100μS以内的延时只能用软件延时,至少51单片机100μS以内没有必要安排其它程序,100μS以内的延时精度要求较高,误差太大就会导致单总线器件的读写不正常,几百μS以上的长延时不能用软件延时,会造成CPU代码执行效率降低,单总线器件的长延时对精度要求并不高,可以用中断完成,不用中断还可以用循环周期。楼主最后说的是重点:“学会提高CPU的代码执行效率,是很有必要的!”重点中的重点是最后一句:“什么是单片机?咱玩的就是时间!”可惜很多人不理解。 |
18B20、HX711、红外接收 不用delay,有什么方法 |
我初学一般情况是把时间收/放一下,再用示波器或用秒表验证 |
说了半天都是有道理的,但是等于又什么都没有说。。。。。。。 ![]() 楼主真是高手啊 |
人人学会单片机 发表于 2021-4-30 22:23 你说的非常非常的正确,这些延时程序根本没什么卵用,我从来不计算任何程序的时间,都是设计电路的时候多预留一个I/O口,就用这个口靠示波器测量,什么18B20、HX711、红外接收之类的程序延时,就是用示波器测量着编出来的。我把单片机延时程序定为普通精度、高精度和超高精度三个档次,每种精度我都有办法实现。我编的所有单片机程序除了程序入口处,其它地方超过100微秒的延时程序根本就没有,几百微秒以上的延时程序用其它方法都解决了。 |
你们不要去看懂这些延迟,因为根本没什么卵用,我文章的主题思想 就是告诉你们不要用delay来做长延迟或者精准延迟。 |
winson007 发表于 2021-4-22 17:22 你们不要去看懂这些延迟,因为根本没什么卵用,我文章的主题思想 就是告诉你们不要用delay来做长延迟或者精准延迟。 |
创造生活 发表于 2021-4-20 19:24 你们不要去看懂这些延迟,因为根本没什么卵用,我文章的主题思想 就是告诉你们不要用delay来做长延迟或者精准延迟。 |
初学也是看不懂,谢谢大大们分享![]() |
现在的51单片机资源也多了。可以利用T1做精确定时器。 |
不知所云呀。 |
说半天,都不知想表达什么![]() |
为什么第二种情况多加了一层死循环延时时闸反而会更短呢请老师指教 |
好东西啊! |