//*************************************************************// |-| |-| |-|// | | | | | |// __| |________| |_______|_|_____------>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 ); } }}