//蜂鳴器調(diào)用函數(shù),輸入響啞的周期和響次數(shù)
void bz(uint16 peri, uint16 nums)
{
? ? st_bz.bzflag = 0;
? ? st_bz.bzperi = peri >> 1;//周期分響半周期和啞半周期
? ? st_bz.bznums = nums;
? ? tmos_set_event(UsrTaskID, BZ_EVENT);
}
//任務(wù)處理
if(events & BZ_EVENT) //BZ發(fā)生事件
{
? ? ? ? if(st_bz.bznums > 0) //判斷響次數(shù)
? ? ? ? {
? ? ? ? ? ? if(st_bz.bzflag == 0)?
? ? ? ? ? ? {//響的周期
? ? ? ? ? ? ? ? st_bz.bzflag = 1;
? ? ? ? ? ? ? ? PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, ENABLE ); //2700HZ PWM開,默認(rèn)低電平,高電平有效25%
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {//啞的周期
? ? ? ? ? ? ? ? st_bz.bzflag = 0;
? ? ? ? ? ? ? ? PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, DISABLE ); //2700HZ PWM關(guān),默認(rèn)低電平,高電平有效25%
? ? ? ? ? ? ? ? st_bz.bznums--; //一個周期后“響次數(shù)”減少一次
? ? ? ? ? ? }
? ? ? ? ? ? tmos_start_task(UsrTaskID, BZ_EVENT, st_bz.bzperi);
? ? ? ? }
? ? ? ? return events ^ BZ_EVENT;
}
//調(diào)用函數(shù)
bz(480, 1);? //300ms,150ms
調(diào)用該函數(shù),應(yīng)該響聲為150ms,但實(shí)際相聲遠(yuǎn)小于150ms,如果:
bz(480, 2);
第一響聲很短,第二響聲就正常150ms
這是怎么回事?