ma99821 发表于 2025-3-6 12:08:59

8A8K64S 10位PCA出波形 PWM0_OUT_0() 不能一直输出低电平

#define                PWM0_NORMAL()      PCA_PWM0 &= ~2                                        /* PWM0正常输出(默认)      */
#define                PWM0_OUT_0()      PCA_PWM0 |=2, CCAP0H = 0xff      /* PWM0一直输出0                */
#define                PWM0_OUT_1()      PCA_PWM0 &= ~2, CCAP0H = 0                /* PWM0一直输出1                */

#define                PWM1_NORMAL()      PCA_PWM1 &= ~2                                        /* PWM1正常输出(默认)      */
#define                PWM1_OUT_0()      PCA_PWM1 |=2, CCAP1H = 0xff      /* PWM1一直输出0                */
#define                PWM1_OUT_1()      PCA_PWM1 &= ~2, CCAP1H = 0                /* PWM1一直输出1                */

#define                PWM2_NORMAL()      PCA_PWM2 &= ~2                                        /* PWM2正常输出(默认)      */
#define                PWM2_OUT_0()      PCA_PWM2 |=2, CCAP2H = 0xff      /* PWM2一直输出0                */
#define                PWM2_OUT_1()      PCA_PWM2 &= ~2, CCAP2H = 0                /* PWM2一直输出1                */

#define                PWM3_NORMAL()      PCA_PWM3 &= ~2                                        /* PWM3正常输出(默认)      */
#define                PWM3_OUT_0()      PCA_PWM3 |=2, CCAP3H = 0xff      /* PWM3一直输出0                */
#define                PWM3_OUT_1()      PCA_PWM3 &= ~2, CCAP3H = 0                /* PWM3一直输出1                */

问题: pca初始化后波形输出正常可以调节这时需要一直输出低电平 调用PWM0_OUT_0()使PCA0 一直输出低电平 不起作用。

国芯人工智能 发表于 2025-3-6 12:12:00

在STC8A8K64S微控制器中,PCA模块的10位PWM输出功能通过配置PCA_PWMx寄存器和CCAPxH寄存器实现。`PWM0_OUT_0()`宏定义为将PCA_PWM0的第1位置1,并将CCAP0H设置为0xFF,理论上应使PWM0输出持续低电平。然而,若实际输出不符合预期,可能原因如下:

1. **寄存器配置冲突**:PCA_PWM0和CCAP0H的配置可能与其他寄存器设置冲突,建议检查相关寄存器的完整配置。
2. **硬件限制**:某些情况下,PCA模块的硬件特性可能导致输出无法完全拉低,需参考数据手册确认是否存在此类限制。
3. **代码执行顺序**:确保在调用`PWM0_OUT_0()`前,PCA模块已正确初始化,且未在其他地方修改相关寄存器。

建议通过调试工具实时监控寄存器状态,验证配置是否生效,并结合数据手册深入排查问题。

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-6 12:18:00

在STC8A8K64S微控制器中,PCA模块的PWM输出模式通过`PCA_PWMx`寄存器进行配置。根据您的代码,`PWM0_OUT_0()`宏旨在实现PWM0输出持续低电平。然而,`PCA_PWM0 |= 2`将PWM0设置为“强制输出低电平”模式,而`CCAP0H = 0xff`则设置了比较寄存器的高字节,这可能导致PWM输出不完全符合预期。建议检查以下几点:

1. **寄存器配置**:确保`PCA_PWM0`和`CCAP0H`的配置与预期的输出模式一致。
2. **时钟源和计数器**:确认PCA模块的时钟源和计数器配置正确,以确保PWM波形生成正常。
3. **硬件连接**:验证PWM输出引脚是否正确连接,并排除硬件干扰。

若问题仍未解决,建议查阅STC8A8K64S的技术手册,确认寄存器配置细节,或联系技术支持进一步调试。

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-3-6 12:36:57

以下程序供参考:
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位)
}

梁工 发表于 2025-3-6 13:09:15

没有问题的,用得多了。

请先别修改程序,直接下载“01-PCA-4路PWM-C语言”里的“PCA.hex”测试,主频24MHz,PCA3-->P2.6输出间歇的PWM,示波器观察,想输出连续高低电平也是随心所欲!
程序:


PCA---P2.6波形:





页: [1]
查看完整版本: 8A8K64S 10位PCA出波形 PWM0_OUT_0() 不能一直输出低电平