Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 延迟功能从2毫秒开始,然后延迟1毫秒_C_Call_Delay - Fatal编程技术网

C 延迟功能从2毫秒开始,然后延迟1毫秒

C 延迟功能从2毫秒开始,然后延迟1毫秒,c,call,delay,C,Call,Delay,我正在实现一个蜂鸣器功能,它接收频率并进行往复运动,将输入引脚设置为高,延迟一半时间,降低另一半时间,以获得所需的频率 示波器上的延迟功能在第一秒(即延迟(2毫秒))工作良好,然后以不同的时间量延迟(即延迟(1毫秒)) 当我尝试用数字写入延迟(即延迟(2.5))时,它工作得很好。首先,问题可能是1000/(Copy_u8; frequency_in_Hz*2)被舍入为整数值,因为您将整数除以整数。请尝试1000.0f/(以\u Hz*2的频率复制),但前提是delay()函数可以将float作为

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

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


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

首先,问题可能是
1000/(Copy_u8; frequency_in_Hz*2)
被舍入为整数值,因为您将整数除以整数。请尝试
1000.0f/(以\u Hz*2的频率复制)
,但前提是
delay()
函数可以将float作为参数


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

请解释“当我尝试用数字写入延迟时(即延迟(2.5)),它工作正常”。这可能是一个整数除法问题,可能与您的问题无关,但为什么不替换
(复制秒*1000中的周期)/(1000/复制频率单位为赫兹)
by
(复制周期单位为秒*复制频率单位为赫兹)
?@barakmanos我的意思不是写:延迟(1000/(复制频率单位为赫兹*2)),而是写延迟(2.5)@MichaelWalz我不知道这到底会有什么影响,但这对我来说确实有效。哈哈!事实上,我试过michael Walz说的话,效果很好,我也不知道延迟函数是如何不带浮点数的,但我至少期待整个数字
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);
 }
}