//蜂鸣器调用函数,输入响哑的周期和响次数
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);
}
//任务处理
if(events & BZ_EVENT) //BZ发生事件
{
if(st_bz.bznums > 0) //判断响次数
{
if(st_bz.bzflag == 0)
{//响的周期
st_bz.bzflag = 1;
PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, ENABLE ); //2700HZ PWM开,默认低电平,高电平有效25%
}
else
{//哑的周期
st_bz.bzflag = 0;
PWMX_ACTOUT( CH_PWM11, 255 / 4, Low_Level, DISABLE ); //2700HZ PWM关,默认低电平,高电平有效25%
st_bz.bznums--; //一个周期后“响次数”减少一次
}
tmos_start_task(UsrTaskID, BZ_EVENT, st_bz.bzperi);
}
return events ^ BZ_EVENT;
}
//调用函数
bz(480, 1); //300ms,150ms
调用该函数,应该响声为150ms,但实际相声远小于150ms,如果:
bz(480, 2);
第一响声很短,第二响声就正常150ms
这是怎么回事?