【发布时间】:2017-06-16 16:14:25
【问题描述】:
我正在实现一个蜂鸣器功能,它接收频率并对其进行交互,并将输入引脚设置为高电平,延迟一半时间,另一半时间低电平以获得所需的频率,
示波器延迟功能在第一秒(即延迟(2msec))运行良好,然后延迟不同的时间量(即延迟(1msec))
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))编写延迟时,它工作正常..
【问题讨论】:
-
请解释“当我尝试用数字写延迟时(即延迟(2.5))它工作正常”。
-
可能是整数除法的问题
-
可能与您的问题无关,但您为什么不将
(Copy_u8Period_in_sec*1000)/(1000/Copy_u8Frequency_in_Hz)替换为(Copy_u8Period_in_sec * Copy_u8Frequency_in_Hz)呢? -
@barakmanos 我的意思不是写: delay(1000/(Copy_u8Frequency_in_Hz*2));我写了延迟(2.5);
-
@MichaelWalz 我不知道这对我有什么实际影响,但这确实对我有用。哈哈! :D