找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于STC8G单片机的PCA_10PWM输出注意事项

查看数: 26509 | 评论数: 44 | 收藏 34
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-5-9 01:43

正文摘要:

这和资料上的最后一句话是不是冲突了。这算不算一个BUG呢。 在修改重装值前,先禁止PWM 输出,修改好后再打开。这能算无干扰吗??? 最后代码修改如下: //10位PWMPCA初始化 void PCA_Init() { & ...

回复

ID:1153607 发表于 2026-2-3 08:59
都这个年头了,换个芯片不就简单了吗?换8H吧。那个简单还好用。
ID:1146155 发表于 2026-1-30 12:23
#include "reg51.h"
#include "intrins.h"

sfr     CCON    =   0xd8;
sbit    CF      =   CCON^7;
sbit    CR      =   CCON^6;
sbit    CCF2    =   CCON^2;
sbit    CCF1    =   CCON^1;
sbit    CCF0    =   CCON^0;
sfr     CMOD    =   0xd9;
sfr     CL      =   0xe9;
sfr     CH      =   0xf9;
sfr     CCAPM0  =   0xda;
sfr     CCAP0L  =   0xea;
sfr     CCAP0H  =   0xfa;
sfr     PCA_PWM0 =  0xf2;
sfr     CCAPM1  =   0xdb;
sfr     CCAP1L  =   0xeb;
sfr     CCAP1H  =   0xfb;
sfr     PCA_PWM1 =  0xf3;
sfr     CCAPM2  =   0xdc;
sfr     CCAP2L  =   0xec;
sfr     CCAP2H  =   0xfc;
sfr     PCA_PWM2 =  0xf4;

sfr     P0M1    =   0x93;
sfr     P0M0    =   0x94;
sfr     P1M1    =   0x91;
sfr     P1M0    =   0x92;
sfr     P2M1    =   0x95;
sfr     P2M0    =   0x96;
sfr     P3M1    =   0xb1;
sfr     P3M0    =   0xb2;
sfr     P4M1    =   0xb3;
sfr     P4M0    =   0xb4;
sfr     P5M1    =   0xc9;
sfr     P5M0    =   0xca;

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    CCON = 0x00;
    CMOD = 0x08;                                //PCA时钟为系统时钟
    CL = 0x00;
    CH = 0x00;
//--6位PWM--
    CCAPM0 = 0x42;                              //PCA模块0为PWM工作模式
    PCA_PWM0 = 0x80;                            //PCA模块0输出6位PWM
    CCAP0L = 0x20;                              //PWM占空比为50%[(40H-20H)/40H]
    CCAP0H = 0x20;
//--7位PWM--
    CCAPM1 = 0x42;                              //PCA模块1为PWM工作模式
    PCA_PWM1 = 0x40;                            //PCA模块1输出7位PWM
    CCAP1L = 0x20;                              //PWM占空比为75%[(80H-20H)/80H]
    CCAP1H = 0x20;
//--8位PWM--
//  CCAPM2 = 0x42;                              //PCA模块2为PWM工作模式
//  PCA_PWM2 = 0x00;                            //PCA模块2输出8位PWM
//  CCAP2L = 0x20;                              //PWM占空比为87.5%[(100H-20H)/100H]
//  CCAP2H = 0x20;
//--10位PWM--
    CCAPM2 = 0x42;                              //PCA模块2为PWM工作模式
    PCA_PWM2 = 0xc0;                            //PCA模块2输出10位PWM
    CCAP2L = 0x20;                              //PWM占空比为96.875%[(400H-20H)/400H]
    CCAP2H = 0x20;
    CR = 1;                                     //启动PCA计时器

    while (1);
}
这个例程是三个IO同时输出吗 能只让一个IO输出吗
ID:958423 发表于 2025-7-2 15:59
别处看到了一个文章,里面说PCA_PWM寄存器必须整字节写入,不能位操作。我试了一下整字节是可以不停止pwm输出的情况下写入的。
ID:1136941 发表于 2025-6-21 16:35
参照16楼的,如下写呼吸灯正常了。
//设置脉冲宽度
void PWM0_Set_Duty(u16 Duty)   //P3.2
{
        PCA_PWM0&= ~(3<<4);        //清零重装值高2位
        PCA_PWM0 = (Duty>>4)&0x30|0xc0; //设置新的重装值高2位
        CCAP0H   = Duty;           //重装值低8位
}

//设置脉冲宽度
void PWM1_Set_Duty(u16 Duty)   //P3.3
{
        PCA_PWM1&= ~(3<<4);        //清零重装值高2位
        PCA_PWM1 = (Duty>>4)&0x30|0xc0; //设置新的重装值高2位
        CCAP1H   = Duty;           //重装值低8位
}
ID:1136941 发表于 2025-6-18 16:49
18701931930 发表于 2025-6-17 08:50
你写了寄存器数据也不会改变。

请教大佬,我用10位PWM的呼吸灯程序验证,不能正常是怎么回事?
ID:554500 发表于 2025-6-17 08:50
weilemin123 发表于 2023-10-27 15:11
这两个控制寄存器有影响么?没看懂啊, 为啥关一下,才能写,不关不让写呢

你写了寄存器数据也不会改变。
ID:554500 发表于 2025-6-16 09:34
vb2002 发表于 2025-3-1 02:28
两个 8位寄存器A和B,把 A的0和 1位,还有B的全部八位赋值给一个 16位的变量c,怎么写,还有怎么封装成函数

// reg_B高字节,reg_A低字节
uint16_t conv(uint8_t reg_A, uint8_t reg_B)
{
        uint16_t dat = reg_B;
        dat <<= 2;
        dat |= reg_A & 0x03;
        return dat;
}

// reg_A高字节,reg_B低字节
uint16_t conv1(uint8_t reg_A, uint8_t reg_B)
{
        uint16_t dat = reg_A & 0x03;
        dat <<= 8;
        dat |= reg_B;
        return dat;
}
ID:1130333 发表于 2025-3-1 02:28
两个 8位寄存器A和B,把 A的0和 1位,还有B的全部八位赋值给一个 16位的变量c,怎么写,还有怎么封装成函数
ID:961114 发表于 2024-4-7 14:39
xiaobendan001 发表于 2024-4-6 09:33
请问10位的PWM频率能到多少?

STC32G12K128, PWM的时钟源可以 144MHz/146MHz
ID:1109793 发表于 2024-4-6 09:33
请问10位的PWM频率能到多少?
ID:1115376 发表于 2024-4-4 15:22
大佬,我这个十位pwm电位器调节为何出这种波形
ID:1093740 发表于 2023-10-27 15:11
这两个控制寄存器有影响么?没看懂啊, 为啥关一下,才能写,不关不让写呢
ID:464755 发表于 2023-9-9 06:41
正好用到,PCA准备做Da输出。
ID:364201 发表于 2023-6-18 16:03
nsj21n 发表于 2023-4-24 17:00
感谢楼主分享。刚好也在玩PWM,同样10位的PWM参数写超过FF就没有输出了,刚好翻到你的帖子,帮我解决了一个 ...

高位是空的,不需要赋值吧!
ID:364201 发表于 2023-6-15 10:08
请教一下,如何控制同一个PCA模块让引脚输出不同占空比
ID:64089 发表于 2023-4-24 17:00
感谢楼主分享。刚好也在玩PWM,同样10位的PWM参数写超过FF就没有输出了,刚好翻到你的帖子,帮我解决了一个很大的问题,实测楼主的程序是可以用的,再次感谢!
ID:1067572 发表于 2023-3-21 11:36
有没有试过 CCAPM1   = 0xC2;           //使能PCA模块0_PWM输出  不是0X42
ID:652434 发表于 2022-11-6 15:32
感谢楼主分享详细调试过程,我学习了
ID:950218 发表于 2022-10-18 09:30
楼主你好!请问使用脚1(P5.4)输出PWM可以的吗?可以的话,有什么需要注意的吗?
ID:824308 发表于 2022-10-16 14:49
注释很详细, 感谢分享
ID:349729 发表于 2022-10-11 11:02

怪不得我的也不正常,谢谢了
ID:961114 发表于 2022-4-19 14:01
ID:879902 发表于 2022-4-19 11:22
我也是这个片子 PWM占空比修改遇到了问题
ID:514317 发表于 2022-2-7 16:38
STC8系列的PWM比老版本强   也多了很多寄存器   不看手册上的例程还真不一定能调通   用什么特殊功能之前还是需要看下例程的   
ID:140644 发表于 2022-2-5 12:33
还没有试过
ID:877543 发表于 2021-12-17 15:45
谢谢楼主,仿真成功了,中文注释也很详细
ID:907700 发表于 2021-12-15 14:32
怪不得我的也不正常,谢谢了
ID:518902 发表于 2021-11-21 22:25
好帖,喜欢~
ID:584195 发表于 2021-8-6 19:50
18701931930 发表于 2021-6-18 15:06
关键是有价无市,根本拿不到货。
去年stc8h1k17 ssop20 含税价1.35元
上个月从stc代理那里拿货,单价6 ...

有钱人呀
招不招人!
ID:120977 发表于 2021-8-6 10:47
PCA_PWM1= 0xc0|((Duty>>4)&0x30); //设置新的重装值高2位         CCAP1H   = Duty;           //重装值低8位
ID:554500 发表于 2021-7-11 16:08
420793043 发表于 2021-7-10 18:25
“//用电位器调节占空比”    ————    怎么用电位器调节占空比了?

电位器调节就用AD转换,模拟量对应想要的占空比
ID:893179 发表于 2021-7-10 18:25
“//用电位器调节占空比”    ————    怎么用电位器调节占空比了?
ID:927469 发表于 2021-6-29 23:04
楼主这个电路图能看看吗
ID:155507 发表于 2021-6-26 12:24
18701931930 发表于 2021-6-18 15:06
关键是有价无市,根本拿不到货。
去年stc8h1k17 ssop20 含 价1.35元
上个月从stc代理那里拿货,单价6 ...

某一个宝上的价格高一点,自己玩玩研究无所谓,量大还是要联系原厂订购。
ID:554500 发表于 2021-6-18 15:06
qq603599910 发表于 2021-6-18 14:38
STC8G1K08A 现在某一个宝行价5元以上吧,真心无法理解,1元不到的报价现在都5元过头,还怎么搞小项目开发STC怎 ...

关键是有价无市,根本拿不到货。
去年stc8h1k17 ssop20 含税价1.35元
上个月从stc代理那里拿货,单价6元,拿了3万个,花了我18万。
心在滴血啊。没办法,产品还得做。少赚点就少赚点。
ID:272119 发表于 2021-6-18 14:38
STC8G1K08A 现在某一个宝行价5元以上吧,真心无法理解,1元不到的报价现在都5元过头,还怎么搞小项目开发STC怎么用国产占领市场......
ID:554500 发表于 2021-6-18 09:25
yonnhor 发表于 2021-6-17 16:41
33.1776/2/1024=0.0162MHZ ==>16.2KHZ
请问一下,这里为什么要除以1024?

因为PWM是10位的
ID:332838 发表于 2021-6-17 16:41
33.1776/2/1024=0.0162MHZ ==>16.2KHZ
请问一下,这里为什么要除以1024?
ID:390307 发表于 2021-5-26 23:57
昨天正好也发现这个问题,感谢楼主踩坑分享

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

Powered by 单片机教程网

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