gpt4 book ai didi

c - 延迟功能从 2 ms 开始,然后延迟 1 ms

转载 作者:行者123 更新时间:2023-11-30 15:00:40 24 4
gpt4 key购买 nike

我正在实现一个蜂鸣器功能,它获取频率并使其往复运动,并将输入引脚设置为高电平并延迟一半的时间,并设置为低电平的另一半时间以获得所需的频率,

示波器延迟功能在第一秒(即延迟(2毫秒))运行良好,然后延迟不同的时间量(即延迟(1毫秒))

typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned long int u32;
void delay(u32 time_in_ms)
{
u32 count;
u32 loops =((time_in_ms*1000)-21)/11;
for(count=0;count<loops;count++)
asm("NOP");
}

extern void Buzzer_buzz(u16 Copy_u8Period_in_sec,u16 Copy_u8Frequency_in_Hz){
u16 var;
for (var=0; var<(Copy_u8Period_in_sec*1000)/(1000/Copy_u8Frequency_in_Hz) ; var++){

DIO_voidWritePin(0,1);

delay(1000/(Copy_u8Frequency_in_Hz*2));

DIO_voidWritePin(0,0);

delay(1000/(Copy_u8Frequency_in_Hz*2));
}

主要我称之为:

void main (void){

DIO_voidInitialize();
Buzzer_voidInitialize();

while(1){
Buzzer_buzz(2,200);
}
}

当我尝试用数字写延迟(即延迟(2.5))时,它工作得很好..

最佳答案

首先,问题可能是 1000/(Copy_u8Frequency_in_Hz*2) 被四舍五入为整数值,因为您正在将一个整数除以一个整数。尝试 1000.0f/(Copy_u8Frequency_in_Hz*2),但前提是 delay() 函数可以将 float 作为参数。

第二个问题可能是,通常(我不知道这是什么平台)delay 函数无论如何都不是精确计时的。在此示例中,它可能工作正常,但不要依赖它接近您想要的效果。

关于c - 延迟功能从 2 ms 开始,然后延迟 1 ms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953972/

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