gpt4 book ai didi

c - 在 C 中分配 1 毫秒或 2 毫秒的延迟?

转载 作者:太空狗 更新时间:2023-10-29 15:49:32 25 4
gpt4 key购买 nike

我正在使用代码来配置一个简单的机器人。我正在使用 WinAVR , 里面使用的代码和C类似,但是没有stdio.h库之类的,所以简单的东西需要手动输入代码(比如十进制数转十六进制数就是一个倍数)涉及 ASCII 字符操作的步骤过程)。

使用的代码示例是(只是为了向您展示我在说什么:))

.
.
.
DDRA = 0x00;
A = adc(0); // Right-hand sensor
u = A>>4;
l = A&0x0F;
TransmitByte(h[u]);
TransmitByte(h[l]);
TransmitByte(' ');
.
.
.

在某些情况下,我必须使用 WinAVR 而不能使用外部库(例如 stdio.h)。无论如何,我想通过伺服电机施加脉冲宽度为 1 ms 或 2 ms 的信号。我知道要设置什么端口等等;我需要做的就是应用延迟以在清除之前保持该端口设置。

现在我知道如何设置延迟了,我们应该创建空的 for 循环,例如:

int value= **??**
for(i = 0; i<value; i++)
;

对于 1 毫秒循环,我应该在“值”中输入什么值?

最佳答案

您可能需要计算一个合理的值,然后查看生成的信号(例如,使用示波器)并调整您的值,直到达到正确的时间范围。鉴于您显然有 2:1 的利润率,您可能第一次就相当接近地达到了它,但我不会太在意它。

对于您的第一个近似值,生成一个空循环并计算一个循环的指令周期,然后将其乘以一个时钟周期的时间。这至少应该给出一个合理的循环执行时间的近似值,因此将您需要的时间除以该时间应该可以让您进入正确的迭代次数。

编辑:不过,我还应该注意,(至少大多数)AVR 具有板载计时器,因此您可以改用它们。这可以 1) 让您进行其他处理和/或 2) 降低持续时间内的功耗。

如果你确实使用延迟循环,你可能想使用 AVR-libc的延迟循环实用程序来处理细节。

关于c - 在 C 中分配 1 毫秒或 2 毫秒的延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com