CH573,Peripheral例程的任務(wù)中用開斷PWM來控制蜂鳴器

//蜂鳴器調(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


這是怎么回事?


如果用下面進(jìn)行測試,是正常的;

PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, ENABLE );

mDelaymS(150);

PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, DISABLE );?



問題已解決??!


初始化PWM:

PWMX_CLKCfg(87);

PWMX_CycleCfg( PWMX_Cycle_255 );

PWMX_ACTOUT( BZ_PWM, 255 / 4, Low_Level, DISABLE );

即便是這樣的初始化,在啟動的時候,只有下面語句去打開是不可靠的

PWMX_ACTOUT( BZ_PWM, 255 / 4, Low_Level, ENABLE );


啟動的正確做法是:

PWMX_CLKCfg(87);

PWMX_CycleCfg( PWMX_Cycle_255 );

PWMX_ACTOUT( BZ_PWM, 255 / 4, Low_Level, ENABLE );




只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频