导读:最强干货,不仅适用于单片机应用场合,其他任何需要延时的平台都可以借鉴参考!
在这篇长达万字的长文中,鱼鹰将通过延时这种刚需功能聊聊溢出、可重入、编程思想、共享变量保护等方面内容,以延时功能为载体,能更好的理解这些缥缈的知识点。本篇长文将分成五篇陆续发布:概述、V1.0~V1.5、V1.7、V2.0~V2.4、V2.5~V2.7。版本V3.x留给对本公众号发展有帮助的道友,更新结束后可在公众号后台回复关键字获取(领取条件请点击文末阅读原文)。在生活中,时间与我们的生活息息相关,日出而作,日落而息,说的就是利用太阳来大概判断时间,从而规划自己的作息。而在单片机领域,同样需要一个时间去控制你的代码运行情况。玩单片机的应该都了解过晶振,很多初学者可能会从前辈那里得到这样一个比喻:单片机的心脏。从功能的角度来说确实如此,因为单片机代码确实是依靠晶振执行的,比如说晶振输出一个脉冲,CPU执行一条指令,就像心脏跳动一次,你做一个抬手动作。只不过你的心脏可能1秒只能跳动几十次,而晶振1秒输出脉冲几十兆赫兹(1 MHz = 1,000 KHz = 1000,000 Hz),而一般单片机还会将晶振输出的频率进行倍频,倍频后的频率才最终用于驱动CPU的运行。如果说现实生活中,时间的最小单位是秒(应该没人在生活和工作中去精确到毫秒吧,更多可能是分钟),而在单片机领域,常用的时间单位应该是毫秒、微秒、纳秒,而决定时间精度的就是晶振(更准确的说是经过晶振分频、倍频后的系统时钟,比如说 STM32 的 8 M 晶振分频成 1 M,然后倍频成 72 M 作为系统时钟驱动 CPU,进而执行存储器中的代码)。对于应用开发来说,可能他不会去了解晶振频率多少,系统频率多少,一条指令运行时间又是多少?他们更多的需求是,在多少毫秒、多少秒(微秒很少用)之后这段代码执行一遍,这个界面刷新一遍,然后以这个时间为周期,循环执行。这是利用延时功能去达到特定代码周期执行的目的。延时可分为相对延时和绝对延时,相对延时与绝对延时的差别可看下图理解:
意犹未尽?明天更精彩!
推荐阅读:
-THE END-
如果觉得文章对你有帮助,欢迎转发、分享给朋友,感谢你的支持!
如果对本文有问题,欢迎留言!即使没有问题也可以留下走心评论。
如需转载请联系我。
微信公众号「鱼鹰谈单片机」
每周一更单片机知识
长按后识别图中二维码关注