你寫的程序很混亂,根據我對這個料的研究,你需要按以下的步驟仔細去做,我也在研究中。
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;
}
|