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

stc8g1k08a pwm请教

[复制链接]
  • TA的每日心情
    奋斗
    2023-12-15 09:52
  • 签到天数: 2 天

    [LV.1]初来乍到

    6

    主题

    17

    回帖

    96

    积分

    注册会员

    积分
    96
    发表于 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之间任意数字)

    回复 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2990

    回帖

    6741

    积分

    超级版主

    积分
    6741
    发表于 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, 下载次数: 24)


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-12 07:47 , Processed in 0.053613 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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