根据芯片手册854页中的描述,在不使用中断的情况下,PWMx-B9H/PWMx-B9L/PWMx-B8H/PWMx-B8L与CCAPxH/CCAPxL可以组合为10位的PWM输出,我在网上找了一个例程,但实际操作中无法实现,不知道有没有哪位大侠有做过这样的组合实现10位的PWM输出,请不吝赐教,谢谢!
例程如下:
#define PCA_PWM_10bit (3<<6)
void PCA_config(void);
void UpdatePwm(u8 PCA_id, u16 pwm_value);
void main(void)
{
PCA_config();
UpdatePwm(PCA0,800);
while (1)
{
}
}
void PCA_config(void)
{
CR = 0;
CH = 0;
CL = 0;
AUXR1 = (AUXR1 & ~(3<<4)) | PCA_P12_P11_P10; P1n_standard(0x07);
CMOD = (CMOD & ~(7<<1)) | PCA_Clock_12T;
CMOD &= ~1;
CCAPM0 = PCA_Mode_PWM;
PCA_PWM0 = (PCA_PWM0 & ~(3<<6)) | PCA_PWM_10bit;
CCAP0L = 0xff;
CCAP0H = 0xff;
CCAPM1 = PCA_Mode_PWM;
PCA_PWM1 = (PCA_PWM1 & ~(3<<6)) | PCA_PWM_10bit;
CCAP1L = 0xff;
CCAP1H = 0xff;
CR = 1;
}
void UpdatePwm(u8 PCA_id, u16 pwm_value)
{
if(pwm_value > 1024) return;
if(PCA_id == PCA0)
{
if(pwm_value == 0)
{
PCA_PWM0 |= 0x32;
CCAP0H = 0xff;
}
else
{
pwm_value = ~(pwm_value-1) & 0x3ff;
PCA_PWM0 = (PCA_PWM0 & ~0x32) | ((u8)(pwm_value >> 4) & 0x30);
CCAP0H = (u8)pwm_value;
CCAP0L = CCAP0H;
}
}
}
|