阐明:设置PWM 操作
经过以下过程将CCP 模块装备为PWM 形式:
1. 写入PR2 寄存器以设定PWM 周期。
2. 写入DCxB9:DCxB0 位以设置PWM 占空比。
3. 将相应的TRIS 位清零以将CCPx 引脚设为输出。
4. 写入T2CON 以设置TMR2 预分频比并使能Timer2。
5. 将CCP 模块装备为PWM 形式。
程序:
#include
#define uchar unsigned char
__CONFIG(0x3B31);
void initPWM();
void Delay1ms(uint time);
/******************************************
***主函数功用:PWM初始化,PWM占空比周期性改变
*******************************************/
void main()
{
uchar i;
initPWM();
while(1)
{
for(i=0;i<256;i++)
{
CCPR1L = i;
TMR2ON = 1;
Delay1ms(100);
TMR2ON = 0;
}
}
}
/******************************************************************
***函数功用:PWM初始化,设置PWM周期;
PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
=(255+1)*4*(1/4000000)*16 s = 4.096 ms
PWM占空比=(DCxB9:DCxB0)*Tosc*(TMR2预分频比)
=1024*(1/4000000)*16 s = 4.096 ms
留意:假如PWM占空比值大于PWM周期,CCPx 引脚将
不会被清零,这时占空比将到达100%;
*****************************************************************/
void initPWM()
{
INTCON = 0x00;//封闭总中止和外部中止
PR2 = 0xff;//写入PR2寄存器设置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
CCP1CON = 0x3C; //设置PWM占空比低2位为11,设置为PWM形式
CCPR1L = 0x00;//设置PWM占空比高8位
TRISC = 0xfb;//设置CCP1口为输出
T2CON = 0x02;//设置TMR2预分频为16;
}
void Delay1ms(uint time)
{
uint i,j;
for(i=time;i>0;i–)
for(j=110;j>0;j–);
}