延迟功能以2 ms开始,然后延迟1 ms

时间:2017-01-31 09:32:56

标签: c call delay

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

示波器延迟功能

在第一秒(即延迟(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))它工作正常..

1 个答案:

答案 0 :(得分:1)

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

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