ai8051u的PCA输出10位PWM 如何写高2位
我在使用ai8051u的PCA模块输出PWM时发现10位PWM的高2位 在手册中叫做XCCAPnL但在实际使用过程中未找到这个寄存器的名字 求助:我该如何写这两位寄存器
要不换一个?直接看看PWM? 我记得是16位的,还带16位的预分频 _奶咖君_ 发表于 2025-10-30 17:58
我记得是16位的,还带16位的预分频
PWMA和PWMB吗 这两个我用作编码器功能了 输出PWM好像会有问题 XCCAPnH是寄存器PCA_PWMn中的两个位
程序如下:
void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
{
unsigned char temp_l,temp_h,temp;
temp_l=pwm_0&0x00ff; //读pwm_0低8位赋值给temp_l
temp_h=(pwm_0&0x0300)>>4; //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0)位置,赋值给temp_h
temp=PCA_PWM0&0xcd; //读PCA_PWM0,XCCAP2H(PCA_PWM0)、EPC0H(PCA_PWM0)清零后赋值给temp
temp_h|=temp; //写其他位到temph
if(pwm_0==0x03ff) //如果pwm_0最大
temp_h|=0x02; //设置EPC0H(PCA_PWM0)为1
PCA_PWM0=temp_h; //写PCA_PWM0(先写高2位)
CCAP0H=temp_l; //写CCAP0H(再写低8位)
temp_l=pwm_1&0x00ff; //读pwm_1低8位赋值给temp_l
temp_h=(pwm_1&0x0300)>>4; //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1)位置,赋值给temp_h
temp=PCA_PWM1&0xcd; //读PCA_PWM1,XCCAP1H(PCA_PWM2)、EPC1H(PCA_PWM1)清零后赋值给temp
temp_h|=temp; //写其他位到temph
if(pwm_1==0x03ff) //如果pwm_1最大
temp_h|=0x02; //设置EPC1H(PCA_PWM1)为1
PCA_PWM1=temp_h; //写PCA_PWM1(先写高2位)
CCAP1H=temp_l; //写CCAP1H(再写低8位)
temp_l=pwm_2&0x00ff; //读pwm_2低8位赋值给temp_l
temp_h=(pwm_2&0x0300)>>4; //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2)位置,赋值给temp_h
temp=PCA_PWM2&0xcd; //读PCA_PWM2,XCCAP2H(PCA_PWM2)、EPC2H(PCA_PWM2)清零后赋值给temp
temp_h|=temp; //写其他位到temph
if(pwm_2==0x03ff) //如果pwm_2最大
temp_h|=0x02; //设置EPC2H(PCA_PWM2)为1
PCA_PWM2=temp_h; //写PCA_PWM2(先写高2位)
CCAP2H=temp_l; //写CCAP2H(再写低8位)
}
DebugLab 发表于 2025-10-30 21:10
XCCAPnH是寄存器PCA_PWMn中的两个位
程序如下:
感谢大佬{:ciya:}{:4_201:} 我是这样装载的:
//========================================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数: id: PCA序号, 0~2对应 PCA0 ~ PCA2
// pwm_value: pwm值, 这个值是输出低电平的时间.
// 返回: none.
// 版本: V1.0, 2024-12-17
//========================================================================
void UpdatePwm(u8 id, u16 pwm_value)
{
if(id == 0)
{
PCA_PWM0 = (PCA_PWM0 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP0H = (u8)pwm_value;
}
else if(id == 1)
{
PCA_PWM1 = (PCA_PWM1 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP1H = (u8)pwm_value;
}
else if(id == 2)
{
PCA_PWM2 = (PCA_PWM2 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
CCAP2H = (u8)pwm_value;
}
}
页:
[1]