C 延迟功能从2毫秒开始,然后延迟1毫秒
我正在实现一个蜂鸣器功能,它接收频率并进行往复运动,将输入引脚设置为高,延迟一半时间,降低另一半时间,以获得所需的频率 示波器上的延迟功能在第一秒(即延迟(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.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);
}
}