闪烁的led会减慢微处理器的速度

flashing led slows down microprocessor

本文关键字:微处理器 速度 led 闪烁      更新时间:2023-10-16

我设计了一个系统,当电位计的电阻低于设定值时,LED会闪烁led1 = 1; wait(0.2); led1 = 0 wait(0.2),这就是发生的情况。我需要两个等待序列,否则用户看不到任何变化。我还连接了一个LCD,当用户按下按钮时,LCD会改变以显示不同的东西。问题是LCD中的这种变化明显减慢到wait(0.2)语句(0.2秒延迟)。这给系统一种滞后的感觉。你知道我能做什么吗?

ISR我最初考虑将闪烁的LED放入中断程序,但很快意识到,如果用户不更改电位计的值,并且电位计总是设置为0,系统将只停留在ISR中。

轮询我的第二个想法是尝试轮询,使LED每100次进入此功能时闪烁一次。结果并不好,它会时不时地减慢系统的速度。如果它不放慢系统的速度,它就会走得太快。

我建议使用硬件计时器和ISR。通过以这种方式延迟程序执行,您将经历任何其他处理的"滞后",而不仅仅是LCD。

这里的关键是,你需要考虑你在ISR中放置的逻辑,这样它就不会停留在那里。。。使用条件if子句或类似子句来对电位计读数做出反应。

您需要完成系统工程。

听起来你现在没有使用ISR,这可以很好地工作。你需要走自己的执行之路,了解最坏的情况。

其中一些可能是工具链+处理器的问题。如果您所说的轮询导致滞后(与强制等待循环相比),那么这很可能是您正在做的任何事情的处理器时间,并且将存在于ISR中。也许我误解了。如果你的处理器+时钟+编译器+编程语言+编码样式等产生的东西无法在完成任务所需的时间内完成所有任务,那么添加更多的东西(ISR、轮询等)不会让它更快。找出实际的问题并加以解决,不要只是抛出更多的问题。

使用硬件计时器,你可能有一个。当你在主循环中行走时,你检查锅是否低,计时器是否超时,或者从上次时间到当前时间的增量是否大于X,然后改变led状态并继续循环,不要停在那里等待。如果状态机更容易编程,就使用它(对一些人来说,状态机要困难得多)。

如果你有其他像这样消耗cpu的等待循环,也可以使用计时器,不要在那里等待,而是回来检查。

如果ISR处理程序没有检查所有条件(但非ISR解决方案检查了),则添加条件,如果pot值为0是特殊情况,则有代码检查特殊情况。或者,如果用户设置了这种情况,则不要启用(或禁用)中断。基本编程问题,"编程的小事"来解决它。

我不确定你到底是什么意思。由于存在wait(0.2)语句,LCD刷新非常缓慢。LED语句不需要放在ISR中。LCD刷新后,继续处理主while循环(while(1))中的LED。