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

时间:20101223

显示效果让LED灯显示效果由亮到灭, 再到亮,再到灭。


代码
#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);
}

}
}

 

posted @ 2010-12-23 01:58  hnrainll  阅读(1698)  评论(0编辑  收藏  举报