找回密码
 立即注册
查看: 840|回复: 1

stc8g1k08a pwm请教

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-19 09:04:12

12

主题

33

回帖

202

积分

中级会员

积分
202
发表于 2023-12-14 20:06:24 | 显示全部楼层 |阅读模式
本帖最后由 单片机好难 于 2023-12-14 23:18 编辑

我用的是8位pwm 参考手册和范例程序是这么写的不知道对不对 请教各位师傅
初始化
void pwm_init(){

CCON = 0x00;
CMOD = 0x08;
CL = 0x00;
CH = 0x00;


CCAPM0 = 0x42;
PCA_PWM0 = 0x00;
CCAP0L = 0xff;
CCAP0H = 0xff;
CR=1;
}
强制输出低电平

PCA_PWM0 |= 0x3f;
CCAP0H = 0xff; 随后如果想输出任意占空比  PCA_PWM0 &= 0x00; CCAP0H =(0~255之间任意数字)

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-03 23:41:15

73

主题

5884

回帖

1万

积分

超级版主

积分
12085
发表于 2023-12-15 10:21:40 | 显示全部楼层
本帖最后由 梁工 于 2023-12-15 10:22 编辑

请参考、测试“01A-STC8G1K08A-8PIN-PCA-3路PWM-C语言”。

//========================================================================
// 函数: void PwmOutContinue(u8 id, u8 level)
// 描述: 设置PWM连续输出电平(高或低).
// 参数:    id: PCA序号, 0~2对应 PCA0 ~ PCA2
//                 level: 连续输出的电平,0为低电平, 1为高电平.
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void        PwmOutContinue(u8 id, u8 level)
{
        if(id == 0)
        {
                if(level == 0)        PWM0_OUT_0();
                else                        PWM0_OUT_1();
        }
        else if(id == 1)
        {
                if(level == 0)        PWM1_OUT_0();
                else                        PWM1_OUT_1();
        }
        else if(id == 2)
        {
                if(level == 0)        PWM2_OUT_0();
                else                        PWM2_OUT_1();
        }
}

//========================================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数:        id: PCA序号, 0~2对应 PCA0 ~ PCA2
//                 pwm_value: pwm值, 这个值是输出低电平的时间.
// 返回: none.
// 版本: V1.0, 2018-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;
        //        PWM0_NORMAL();
        }
        else if(id == 1)
        {
                PCA_PWM1 = (PCA_PWM1 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
                CCAP1H = (u8)pwm_value;
        //        PWM1_NORMAL();
        }
        else if(id == 2)
        {
                PCA_PWM2 = (PCA_PWM2 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
                CCAP2H = (u8)pwm_value;
        //        PWM2_NORMAL();
        }
}


PCA-PWM连续输出0或1的方法,以PCA0(PWM0-CCP0)为例:
PCA_PWM0 &= ~0x02;        // PWM0正常输出

PCA_PWM0 |= 0x3f, CCAP0H = 0xff, CCAP0L = 0xff;        // PWM0一直输出0
PCA_PWM0 &= 0xc0, CCAP0H = 0,    CCAP0L = 0;        // PWM0一直输出1



STC8G系列-PCA相关程序.rar (309.7 KB, 下载次数: 93)


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 00:34 , Processed in 0.103555 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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