mian函数中pwm的初始化
void pwm5Init(void)
{
SetPWMClkDiv(24000); //这个分频很重要,分频太小了会出现led一直亮的现象
SetPWMCycle256Clk(); //PWM���� FREQ_SYS/4/256
SetPWM5Dat(0);//p23 23.58khz -80.5% ����Ч ���??�??�?� 20/256=7%
PWM_SEL_CHANNEL(0x20, Enable);
}
void main( )
{
CfgFsys( );
mDelaymS(20);
pwm5Init();//pwm波初始化
PWMInterruptEnable();//开pwm波中断,在中断里面修改占空比
while(1){
}
}
pwm中断配置
void PWMInterrupt( void ) interrupt INT_NO_PWMX using 1 //PWM0~8中断服务程序,使用寄存器组1
{
static UINT8 duty = 0;
static UINT8 dutyUp = 0;
static UINT8 dutyDown = 0;
PWM_CTRL |= bPWM_IF_END; //清除PWM中断
/* 重新配置占空比 */
if(0 == duty){
dutyUp = 1;
dutyDown = 0;
}
if(255 == duty){
dutyDown = 1;
dutyUp = 0;
}
/*为什么要这样做:目的是防止呼吸灯出现从最亮到熄灭会出现跳变的现象,整体的呼吸效果是0-255-0*/
if(1 == dutyUp){//占空比从0-255变化
SetPWM5Dat(duty);
duty += 1;
}
if(1 == dutyDown){//占空比从255-0变化
SetPWM5Dat(duty);
duty -= 1;
}
}
|