你写的程序很混乱,根据我对这个料的研究,你需要按以下的步骤仔细去做,我也在研究中。
void Pcapwm_Init(void)
{ //1初始化PCA模块的控制寄存器 CCON
CCON = 0x00;
//2初始化PCA模块的模式寄存器 CMOD
CMOD = 0x08; //初始化PCA模块时钟选择为SYS系统时钟
//3 初始化PCA模块的计数器(清空)
CL = 0;
CH = 0;
// 4 初始化PCA模块n模式控制寄存器CCAPMn, ECOMn和PWMn位必须置1
CCAPM0 |= 0x42; //0100 0010
CCAPM1 |= 0x42;
CCAPM2 |= 0x42;
CCAPM3 |= 0x42;
//5 设置 PCA模块n的PWM模式控制寄存器 PCA_PWMn的PWM模式
PCA_PWM0 |= 0x80; //6位PWM模式
PCA_PWM1 |= 0x40;// 7位PWM模式
PCA_PWM2 |= 0x00;// 8位PWM模式
PCA_PWM2 |= 0xC0;// 10位PWM模式
//6 设置PCA模块n模式捕获值/比较值寄存器CCAPnL, CCAPnH
CCAP0L = 0x20; //占空比50%
CCAP0H = 0x20;
CCAP1L = 0x20; //占空比75% 7位周期,那么最大是80H,那么高电平的时间为60H。
CCAP1H = 0x20;
CCAP2L = 0x20; //占空比87.5% 8位周期,那么最大是100H,那么高电平的时间为E0H。
CCAP2H = 0x20;
CCAP3L = 0x20; //占空比96.875% 8位周期,那么最大是400H,那么高电平的时间为3E0H。
CCAP3H = 0x20; //992/1024 = 96.875
// 7 开启PCA计数器允许
CR = 1;
}
|