PIC单片机增强型开发板产生两路PWM

//*************************************************************
//|-||-||-|
//| || || |
//__| |________| |_______|_|_____------>PWM1
//
//|----||----||----|
//||||||
//__||_____||____||_------>PWM2
//本实验利用PIC单片机的CCP模块功能产生PWM功能,PWM的周期为:
//(PR2+1)*4TOSC*(TMR2预分频值)
//了解CCP模块的CCP1CON寄存器功能,
//了解TMR2与CCP模块的之间关系,
//掌握对CCP模块的相关寄存器的初始化及设置
//软件平台: HT-PICC编程器与MPLAB集成开发环境
//作者:孙安青(Sun An-qing)
//利用CCP1模块产生的PWM信号由RC2引脚输出,
//同时利用CCP2模块产生的PWM信号由RC1引脚输出,两者都可用示波器即可
//观察到该PWM波形.
修改者:Leo
【PIC单片机增强型开发板产生两路PWM】时间:20101223
显示效果让LED灯显示效果由亮到灭, 再到亮,再到灭。




PIC单片机增强型开发板产生两路PWM
文章图片
PIC单片机增强型开发板产生两路PWM
文章图片
代码


#include < pic.h >

__CONFIG(HS & WDTDIS & LVPDIS & PWRTEN); // 对熔丝位进行设置
#define uint unsigned int
uint num = 0 ;

void delay1ms( uint DelayTime)
{
uint temp;
for (; DelayTime > 0 ; DelayTime -- )
{
for (temp = 0 ; temp < 270 ; temp ++ )
{; }
}
}
void main( void )
{
// ***********************************************************
CCP1M3 = 1 ; // Enable CPP1 Work as PWM mode
CCP1M2 = 1 ;
CCP1M1 = 1 ;
CCP1M0 = 1 ;
TRISC2 = 0 ; // Enable RC2 work as output
CCPR1L = 0x10 ; // PWM脉宽值,改变PWM的脉宽,只需改变CCPR1L中的值
CCP1X = 0 ; // 以及CCP1CON中的CCP1X和CCP1Y这两个位的值
CCP1Y = 0 ;

// ***********************************************************
CCP2M3 = 1 ; // Enable CPP2 Work as PWM mode
CCP2M2 = 1 ;
CCP2M1 = 1 ;
CCP2M0 = 1 ;
TRISC1 = 0 ; // Enable RC0 work as output
CCPR2L = 0x20 ; // PWM脉宽值,改变PWM的脉宽,只需改变CCPR2L中的值
CCP2X = 0 ; // 以及CCP2CON中的CCP2X和CCP2Y这两个位的值
CCP2Y = 0 ;

// ***********************************************************
TOUTPS3 = 0 ; // Enable TMR2--->1:1
TOUTPS2 = 0 ;
TOUTPS1 = 0 ;
TOUTPS0 = 0 ;
T2CKPS1 = 1 ; // Enable TMR2--->1:16
T2CKPS0 = 1 ;
TMR2ON = 1 ; // Enable TMR2 Working
TMR2 = 0 ;

while ( 1 )
{
for (; num <= 1023 ; num ++ )
{
PR2 = num; // PWM周期,改变PWM的周期,只需改变PR2中的值即可
delay1ms( 10 );
}

}
}

    推荐阅读