找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 451|回复: 2
打印 上一主题 下一主题
收起左侧

关于STC15W4K32S4单片机的10位PWM问题

[复制链接]
跳转到指定楼层
楼主
ID:289218 发表于 2025-2-13 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
根据芯片手册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;
}
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1034262 发表于 2025-2-14 10:50 | 只看该作者
改变占空比本身是不需要用到中断的,任何地方都可以改变(包括在中断中改变)。在中断中改变占空比是为了处理数据,比如SPWM。

//========================================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数:        id: PCA序号, 0~1对应 PCA0 ~ PCA1
//                 pwm_value: pwm值, 这个值是输出低电平的时间.
// 返回: none.
// 版本: V1.0, 2014-5-10
//========================================================================
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;
        }

}
回复

使用道具 举报

板凳
ID:289218 发表于 2025-2-14 22:40 | 只看该作者
coody_sz 发表于 2025-2-14 10:50
改变占空比本身是不需要用到中断的,任何地方都可以改变(包括在中断中改变)。在中断中改变占空比是为了处 ...

感谢您的回复!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表