布鲁士 发表于 2026-3-5 11:32:27

小白请教 | qianwen.com

STC8G的PCA模块的寄存器PCA_PWMn的第一位和第二位EPCnH和EPCnL有什么作用?我看不懂手册里带的解释。

lcwswust 发表于 2026-3-5 12:04:34

某个寄存器有10位,低8位刚好放到一个字节,高两位放不下就放这里了。

狂热主宰 发表于 2026-3-5 15:04:31

可能EPCnH和EPCnL扩展了两位数据
比如2的8次方到2的10次方

DebugLab 发表于 2026-3-5 15:31:51

10位PWM程序供参考:

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位)
}

神农鼎 发表于 2026-3-5 22:09:36



www.qianwen.com
页: [1]
查看完整版本: 小白请教 | qianwen.com