在C中分配1 ms或2 ms的延迟?
发布时间:2020-12-16 10:17:51 所属栏目:百科 来源:网络整理
导读:我正在使用代码来配置一个简单的机器人.我正在使用 WinAVR,并且那里使用的代码类似于C,但是没有stdio.h库等,所以应该手动输入简单内容的代码(例如,将十进制数转换为十六进制数是一个多步骤的过程涉及 ASCII字符操纵). 使用的代码示例(只是为了向您展示我在说
我正在使用代码来配置一个简单的机器人.我正在使用
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 ms的循环,我应该在“值”中加入什么值? 解决方法
您可能需要计算合理的值,然后查看生成的信号(例如,使用示波器)并调整您的值,直到您达到正确的时间范围.鉴于你显然有2:1的保证金,你可能会在第一次合理地接近它,但我不会太多.
对于第一次近似,生成一个空循环并计算一个循环的指令周期,并将其乘以一个时钟周期的时间.这应该至少给出单次执行循环所花费的时间的合理近似值,因此将所需时间除以该值应该可以让您进入适当数量的迭代. 编辑:但是,我还应该注意,(至少大多数)AVR具有板载定时器,因此您可以使用它们.这可以1)让您进行其他处理和/或2)减少持续时间的功耗. 如果使用延迟循环,则可能需要使用AVR-libc的延迟循环实用程序来处理详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |