惊讶:使用Keil C编写51个单片机延迟程序实际上是如此精致

当使用单片机时,我们经常遇到需要短时间延迟的情况。所需的延迟时间非常短,通常为数十到数百微秒(us)。
有时需要高精度。例如,当使用单片机驱动DS18B20时,允许的误差范围在十几码之内,否则很容易出错。
在这种情况下,使用计时器通常很麻烦。在极端情况下,计时器甚至被用于其他目的。
这时,我们需要考虑其他方式。以前使用汇编语言编写MCU程序时,此问题相对容易解决。
例如,使用12MHz的晶体振荡器51,打算延迟20us,只要以下代码可以满足一般需要:51单片机的指令周期是晶体振荡器频率的1/12,即, 1us的周期。 mov r0,#09h需要2个极限周期,而djnz也需要2个极限周期。
那么,存储在r0中的数字为(20-2)/ 2。使用这种方法,可以非常方便地实现小于256us的延迟。
如果需要更长的时间,则可以使用两个级别的嵌套。而且精度可以达到2us,一般来说,这就足够了。
现在,毫无疑问,Keil的C编译器得到了更广泛的使用。与汇编相比,C当然具有许多优点,例如程序易于维护,易于理解,适用于大型项目。
但是缺点(我认为这是C的唯一缺点)是无法保证实时性能,并且无法预测代码执行的指令周期。因此,在实时性要求较高的场合,还需要组合件和C的联合应用。
但是是否需要使用汇编程序来实现这样的延迟程序?为了找到这个答案,我做了一个实验。要使用C语言实现延迟程序,首先想到的是C中常用的loop语句。
以下代码是我在Internet上经常看到的代码:该代码的准确性如何?为了直接衡量此代码的效果,我发现了Keil C基于此代码生成的汇编代码:我真的不知道~~~我可以看到这个延迟程序有多不准确~~~在这四个主要语句中,需要6个机器周期。换句话说,它的准确度最高为6us,其中不包括lcall和ret。
如果我们列出调用函数时分配的i值的根延迟长度,则为:因为函数调用需要2个时钟周期的lcall,所以延迟时间比从函数代码的执行时间长2倍。顺便说一句,有些朋友写了这段代码:有些人可能认为它将生成更长的汇编代码,但事实证明生成的代码是相同的。
但这确实不是一个好习惯。因为实际上没有必要在此处引入额外的变量。
我们继续讨论这个话题。一些朋友甚至使用此代码来获得更长的延迟:此代码生成的汇编代码是什么?实际上,您不必考虑它就知道$#^%&%$有多可怕。
....让我们看看:呵呵,这确实可以延迟很长时间~~~但是根本没有精度。那么,使用C可以实现准确的延迟吗?我对代码进行了一些更改:因为根据经验,更简洁的C代码通常可以导致更简洁的机器代码。
这是什么结果?取出它生成的汇编代码并对其进行查看。希望我按了“构建目标”按钮,结果是沉重的打击:尽管生成的代码与使用for语句不同,但是我可以毫无疑问地说这两种方法的效率是相同的。
。似乎到此结束,因为我真的想不出任何简化源程序的空间。
看来我即将得出这个结论:“如果您需要我们级别的延迟精度,请在需要时使用汇编语言。”但这是真的吗?我仍然不甘心。
因为我不相信著名的Keil C编译器甚至不能使用djnz? ? ?因为实际上在程序主体中仅需要一个句子循环:djnz r7,循环。几乎是绝望的(在这种情况下人们通常会爆发,哦哈哈哈~~~),我只是更改了它:不在意地编译,请看源代码:天堂~~~出现了奇迹。
.....我认为该程序应该已经能够满足一般需求。如果创建表:计算延迟时间时,已计算调用函数的lcall语句的2个时钟周期。
最后,结果很明显。只要合理使用,C仍然可以达到意想不到的结果。
许多朋友抱怨C的效率比汇编的要差得多。实际上,如果您对Keil C的编译原理有更深入的了解,则可以通过适当的语法用法来优化生成的C代码。
前夕。

公司: 深圳市捷比信实业有限公司

电话: 0755-29796190

邮箱: ys@jepsun.com

产品经理: 李经理

QQ: 2057469664

地址: 深圳市宝安区翻身路富源大厦1栋7楼

微信二维码

更多资讯

获取最新公司新闻和行业资料。

  • 如何在高速电路中合理选择零延迟与低延迟时钟缓冲器 高速电路设计中时钟缓冲器的选型策略随着集成电路工作频率不断攀升,时钟信号的延迟与抖动问题日益突出。正确选择零延迟缓冲器或低延迟时钟缓冲器,是确保系统稳定运行的关键环节。一、影响选型的关键参数1. 延迟(Lat...
  • 电流感应贴片电阻器与PSoC可编程片上系统协同设计:实现高精度实时监测 引言在现代电子系统中,精确的电流监测对于设备安全、能效优化和故障预警至关重要。电流感应贴片电阻器(CS系列)与可编程片上系统(PSoC)的结合,为智能电源管理提供了高效、紧凑且灵活的解决方案。1. 电流感应贴片电...
  • 零延迟缓冲器与低延迟时钟缓冲器的技术原理及应用解析 零延迟缓冲器与低延迟时钟缓冲器的核心技术对比在高速数字系统设计中,时钟信号的完整性与传输延迟直接影响系统的性能与稳定性。零延迟缓冲器(Zero Delay Buffer, ZDB)和低延迟时钟缓冲器(Low Latency Clock Buffer)是两类关键的...
  • 可编程晶振技术解析:如何实现高精度频率控制? 可编程晶振技术解析:如何实现高精度频率控制?在现代电子系统中,时钟信号的稳定性与精确性直接影响整个系统的性能。可编程晶振(Programmable Crystal Oscillator, PCXO)作为一种关键的时钟源器件,因其灵活性和高精度而广泛应...
  • 深入解析SCR控制器与计时延迟协同机制及RS-232接口的电磁兼容设计实践 SCR控制器与计时延迟的协同工作机制在电力电子控制系统中,计时延迟与SCR控制器并非独立存在,而是通过时序逻辑紧密配合,共同实现精准的功率调节。例如在交流调功系统中,通过设定触发延迟角(firing angle),控制SCR导通...
  • 可编程晶振技术解析:I²C接口如何实现精准频率调节 可编程晶振的核心优势与应用前景随着电子设备对时钟精度和灵活性要求的不断提升,可编程晶振(Programmable Crystal Oscillator, PCXO)正逐渐成为现代嵌入式系统中的关键元件。尤其在支持I²C通信协议的可编程晶振中,用户可通过软...
  • 深入理解I²C可编程晶振:从原理到实际部署指南 I²C可编程晶振的实际部署与优化策略尽管可编程晶振在理论上提供了极高的灵活性,但在实际工程应用中仍需注意诸多细节。本文将从硬件连接、软件配置、抗干扰设计等方面,提供一套完整的部署指南。1. 硬件连接要点正确连...
  • 如何设计高效的计时延迟控制电路以优化SCR性能 高效计时延迟控制电路的设计要点为了充分发挥计时延迟/SCR控制器的潜力,合理设计控制电路至关重要。一个优秀的控制系统不仅要求精度高,还需具备稳定性、抗干扰能力及良好的扩展性。1. 选择合适的延时元件常用的延时元...
  • 可编程片上系统(PSoC)在嵌入式智能控制中的创新应用 可编程片上系统(PSoC):融合硬件与软件的智能控制平台可编程片上系统(PSoC, Programmable System on Chip)是赛普拉斯(现为英飞凌科技)推出的一种高度集成的混合信号SoC解决方案,将微控制器、可编程模拟/数字外设、存储器与高...
  • 零延迟缓冲器工作原理及应用 零延迟缓冲器是一种在信号处理领域广泛应用的技术,它主要用于消除信号传输过程中的延迟问题。在数字信号处理、音频工程以及视频处理等领域中,延迟是一个常见问题,可能导致信号失真或同步问题。零延迟缓冲器通过先...
  • 计时延迟与SCR控制器应用详解 在工业自动化和电力电子领域,计时延迟和SCR(Silicon Controlled Rectifier,可控硅整流器)控制器是两个非常关键的技术概念。它们被广泛应用于各种设备和系统中,从家用电器到大型工业设备,都离不开这两项技术的支持。下面我...
  • 如何正确使用与维护精密插件电阻以延长其寿命 精密插件电阻的正确使用与维护策略尽管精密插件电阻具有出色的性能表现,但若使用不当或缺乏维护,仍可能导致性能下降甚至失效。因此,掌握正确的操作方法和维护技巧至关重要。1. 安装过程注意事项避免过度加热:焊接...
  • 电流检测贴片电阻与PSoC可编程片上系统在智能电源管理中的协同应用 引言随着物联网(IoT)和智能设备的快速发展,对高效、精准的电源管理系统的需求日益增长。在这一背景下,电流检测贴片电阻(如CSN系列)与可编程片上系统(PSoC)的结合,正成为实现高精度电流监测与智能控制的核心技术...
  • 103瓷片电容表示的是0.01μF的电容值而非K单位 103瓷片电容表示的电容量是0.01μF(微法),而不是K(千)单位。这里的数字和字母组合是一种简化标记方式,用于表示电容器的电容值。具体来说,“103”中的“10”代表的是电容值的有效数字部分,“3”则表示在有效数字后面...
  • ESD静电抑制管的寿命是多久?如何延长其使用寿命? ESD静电抑制管的寿命主要受到其工作环境和使用条件的影响,一般情况下其寿命可以达到数年。为了延长ESD静电抑制管的使用寿命,需要注意以下几点:保持ESD静电抑制管的工作环境清洁,避免其受到污染或损伤。避免ESD静电抑...
  • 高精密贴片电阻阻值表标准阻值表E-96 0603F(+1%) Standard Resistance Table 标准阻值表1 E-96 阻值 代码 阻值 代码 阻值 代码 阻值 代码 阻值 代码 阻值 代码 10 01X 100 01A 1.00K 01B 10.0K 01C 100K 01D 1M 01E 10.2 02X 102 02A 1.02K 02B 10.2K 02C 102K 02D 10.5 03X 105 03A 1.05K 03B 10.5K 03C 105K 03D 10.7 04X 107 04A 1.07K 04B 10.7K 04C 107K 04D 11 05...
  • 零延迟缓冲器的技术演进与未来趋势 零延迟缓冲器的技术演进与未来趋势近年来,随着半导体工艺进步与系统对时序精度需求的提升,零延迟缓冲器正从专用芯片向多功能集成化方向发展。本文将探讨其技术演进路径、当前主流方案及未来发展方向。1. 技术演进历...
  • double sum = 0.0; for(int i = 0; i < n; i++) { if(resistors[i] > 0) { sum += 1.0 / resistors[i]; 在C语言中计算并联电阻的总电阻是一个常见的应用问题,它涉及到基本的物理知识与编程技巧的结合。并联电路中的总电阻可以通过所有并联电阻倒数的和的倒数来计算。首先,我们需要定义一个函数来处理这一计算过程。例如...
  • 深入解析计时延迟/SCR控制器的工作原理与应用优势 计时延迟/SCR控制器的核心工作原理计时延迟/SCR(Silicon Controlled Rectifier,可控硅)控制器是一种广泛应用于工业自动化、电力调节和照明控制领域的电子控制装置。其核心功能是通过精确控制电流的导通时间,实现对负载的定时...
  • 深入解读抗腐蚀精密电阻器:从原理到实际工程应用的全面指南 抗腐蚀精密电阻器的工作原理与技术突破抗腐蚀精密电阻器不仅是普通电阻的升级版,更是材料科学与电子工程融合的典范。其设计核心在于“双保护机制”——外层防护+内核稳定性。一、材料创新:实现防腐与导电的平衡现代...