PIC16F877A单片机的PWM功能
通过以下步骤将CCP 模块配置为PWM 模式:
1. 写入PR2 寄存器以设定PWM 周期。
2. 写入DCxB9:DCxB0 位以设置PWM 占空比。
3. 将相应的TRIS 位清零以将CCPx 引脚设为输出。
4. 写入T2CON 以设置TMR2 预分频比并使能Timer2。
5. 将CCP 模块配置为PWM 模式。
程序:
#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--);
}
PIC16F877A单片机PWM功 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)