新闻中心

EEPW首页>嵌入式系统>设计应用> PIC16F877A单片机的PWM功能

PIC16F877A单片机的PWM功能

作者: 时间:2016-11-11 来源:网络 收藏
说明:设置PWM 操作

通过以下步骤将CCP 模块配置为PWM 模式:
1. 写入PR2 寄存器以设定PWM 周期。
2. 写入DCxB9:DCxB0 位以设置PWM 占空比。
3. 将相应的TRIS 位清零以将CCPx 引脚设为输出。
4. 写入T2CON 以设置TMR2 预分频比并使能Timer2。
5. 将CCP 模块配置为PWM 模式。

本文引用地址://m.amcfsurvey.com/article/201611/316762.htm

程序:

#include
#define uint unsigned int
#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--);
}



评论


技术专区

关闭