找回密码
 立即注册
查看: 285|回复: 9

8H1K08-TSSOP16怎么使用8G1K08A的pca功能

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-3-4 16:01:34 | 显示全部楼层 |阅读模式
8H1K08-TSSOP16怎么使用8G1K08A的pca类似的功能?

使用IC:8H1K08-TSSOP16
输出引脚P12
需求:初始化固定频率,12M自带内部晶振。输出3K-10K的pwm,占空比根据采集的数据输出0%-100%实时更新,从P12引脚输出。
为满足这个需求,参考那个例程比较好实现,或者通过哪个pwm功能可以实现。
(排除定时器计时,高频不稳)
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-4 16:03:00 | 显示全部楼层
STC8H1K08-TSSOP16虽然不具备STC8G1K08A的PCA功能,但可以通过其内置的PWM模块实现类似需求。建议使用定时器2(Timer2)结合PWM功能,配置步骤如下:

1. **时钟配置**:选择12MHz内部晶振作为系统时钟源。
2. **PWM频率设置**:根据需求(3K-10K),设置Timer2的自动重装载值(ARR)和预分频器(PSC),以生成目标频率。
3. **占空比控制**:通过修改比较寄存器(CCR)的值,实时调整占空比(0%-100%)。
4. **引脚配置**:将P12引脚配置为PWM输出模式。

参考STC8H1K08的PWM例程,初始化代码可基于手册中的寄存器配置,确保PWM输出稳定且占空比可动态调整。此方案无需依赖PCA模块,且能高效实现需求。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-4 16:08:00 | 显示全部楼层
STC8H1K08-TSSOP16与STC8G1K08A的PCA功能类似,可通过配置PCA模块实现PWM输出。首先,初始化PCA模块,选择12MHz内部晶振作为时钟源。配置PCA模式为PWM模式,设置PWM频率范围为3K-10KHz,具体频率可通过调整PCA时钟分频和计数周期实现。P12引脚作为PWM输出引脚,需配置相应的I/O模式。通过实时更新PCA捕获寄存器的值,可动态调整占空比(0%-100%)。建议参考STC官方提供的PCA例程,特别是PWM输出相关的代码段,以确保配置正确。排除定时器计时问题,PCA模块的硬件PWM输出更加稳定,适合高频应用。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2025-3-4 16:15:31 | 显示全部楼层
8H1K08无PCA
STC8H系列-高级PWM相关程序.rar (1.18 MB, 下载次数: 7)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-3-4 16:20:48 | 显示全部楼层

那我要达到我得需求,可以怎么实现呢?

点评

用16位高级PWM,P12是PWM2P,属于PWMA 初始化先使用PWMA_PS设置脚位,然后写CCMRx前必须先清零CCxE关闭通道(PWMA_CCER1=0x00),再写PWMA_CCMR1设置模式和输出使能和极性,再写PWMA_ARR设置周期时间(根据PWM输入时  详情 回复 发表于 2025-3-4 16:41
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-4 16:41:55 | 显示全部楼层
iyxe*** 发表于 2025-3-4 16:20
那我要达到我得需求,可以怎么实现呢?

用16位高级PWM,P12是PWM2P,属于PWMA
初始化先使用PWMA_PS设置脚位,然后写CCMRx前必须先清零CCxE关闭通道(PWMA_CCER1=0x00),再写PWMA_CCMR1设置模式和输出使能和极性,再写PWMA_ARR设置周期时间(根据PWM输入时钟和需要的频率计算),再写PWMA_ENO使能输出,再打开PWMA_BKR的最高位MOEA主输出使能,最后打开PWMA_CR1的CNEA位使能计数器
占空比使用PWMA_CCR1动态设置
初始化:
  1.         P_SW2|=EAXFR;
  2.         
  3.         P0M1=0x00;        P0M0=0x00;        //设置IO模式
  4.         P1M1=0x00;        P1M0=0x00;        //设置IO模式
  5.         P2M1=0x00;        P2M0=0x00;        //设置IO模式
  6.         P3M1=0x03;        P3M0=0x00;        //设置IO模式
  7.         P4M1=0x00;        P4M0=0x00;        //设置IO模式
  8.         P5M1=0x00;        P5M0=0x00;        //设置IO模式
  9.         P6M1=0x00;        P6M0=0x00;        //设置IO模式
  10.         P7M1=0x00;        P7M0=0x00;        //设置IO模式
  11.         
  12.         PWMA_CCER1 = 0x00;        //写 CCMRx 前必须先清零 CCxE 关闭通道
  13.         PWMA_CCMR1 = 0x60;        //通道模式配置
  14.         PWMA_CCER1 = 0x10;        //配置通道输出使能和极性
  15.         
  16.         PWMA_ARRH=(unsigned char)(arr>>8); //设置周期时间
  17.         PWMA_ARRL=(unsigned char)arr;
  18.         
  19.         PWMA_ENO=0x00;
  20.         PWMA_ENO|=0x04;                //使能输出
  21.         
  22.         PWMA_BKR=0x80;                //使能主输出
  23.         PWMA_CR1|=0x01;                //开始计时
复制代码
设置占空比:
  1.         PWMA_CCR1H = (unsigned char)(duty >> 8); //设置占空比时间
  2.         PWMA_CCR1L = (unsigned char)(duty);
复制代码

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-3-4 21:31:38 | 显示全部楼层
Debu*** 发表于 2025-3-4 16:41
用16位高级PWM,P12是PWM2P,属于PWMA
初始化先使用PWMA_PS设置脚位,然后写CCMRx前必须先清零CCxE关闭通 ...

如果我目前先让P12输出恒定的PWM这个程序是不是可以输出


#include "stc8h.h"
#include "intrins.h"
void main()
{
    P1M1=0xF1;//P10  AD高阻 P11-13 推挽  P14-17高阻 1111 0001
                P1M0=0x0E;//0000 1110
       
               
                P3M1 = 0xCC; //P37 p36开漏  P35 p34推挽  p33 P32开漏  P31 30双向    1100 1100
                P3M0 = 0xFC;//1111 1100
       
                P5M1 = 0x10;//p54高阻
                P5M0 = 0x00;

    P_SW2 = 0x80;
    PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式
    PWMA_CCER1 = 0x10;                          //使能CC1通道
    PWMA_CCR1 = 100;                            //设置占空比时间
    PWMA_ARR = 500;                             //设置周期时间
    PWMA_ENO = 0x04;                            //使能PWM1P端口输出
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1 = 0x01;                            //开始计时

    while (1);
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-3-5 10:05:34 | 显示全部楼层
  1. #include "stc8h.h"
  2. #include "intrins.h"
  3. void main()
  4. {
  5.     P1M1=0xF1;//P10  AD高阻 P11-13 推挽  P14-17高阻 1111 0001
  6.                 P1M0=0x0E;//0000 1110
  7.        
  8.                
  9.                 P3M1 = 0xCC; //P37 p36开漏  P35 p34推挽  p33 P32开漏  P31 30双向    1100 1100
  10.                 P3M0 = 0xFC;//1111 1100
  11.        
  12.                 P5M1 = 0x10;//p54高阻
  13.                 P5M0 = 0x00;
  14.     P_SW2 = 0x80;
  15.     PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
  16.     PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式
  17.     PWMA_CCER1 = 0x10;                          //使能CC1通道
  18.     PWMA_CCR1 = 100;                            //设置占空比时间
  19.     PWMA_ARR = 500;                             //设置周期时间
  20.     PWMA_ENO = 0x04;                            //使能PWM1P端口输出
  21.     PWMA_BKR = 0x80;                            //使能主输出
  22.     PWMA_CR1 = 0x01;                            //开始计时
  23.     while (1);
  24. }
复制代码


如果我目前先让P12输出恒定的PWM,这个程序是不是可以正确输出

点评

P12输出5KHz 50% PWM程序,供参考  详情 回复 发表于 2025-3-5 12:39
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-5 12:39:30 | 显示全部楼层
iyxe*** 发表于 2025-3-5 10:05
如果我目前先让P12输出恒定的PWM,这个程序是不是可以正确输出


P12输出5KHz 50% PWM程序,供参考
  1. #include <AI8H.H>
  2.         
  3. #define                FOSC                        12000000UL                                        //主时钟
  4. void Init(void)
  5. {
  6.         P_SW2|=EAXFR;
  7.         
  8.         P0M1=0x00;        P0M0=0x00;        //设置IO模式
  9.         P1M1=0x00;        P1M0=0x00;        //设置IO模式
  10.         P2M1=0x00;        P2M0=0x00;        //设置IO模式
  11.         P3M1=0x03;        P3M0=0x00;        //设置IO模式
  12.         P4M1=0x00;        P4M0=0x00;        //设置IO模式
  13.         P5M1=0x00;        P5M0=0x00;        //设置IO模式
  14.         P6M1=0x00;        P6M0=0x00;        //设置IO模式
  15.         P7M1=0x00;        P7M0=0x00;        //设置IO模式
  16.         
  17.         PWMA_PS=0x00;                        //高级 PWM 通道输出脚选择位
  18.         
  19.         PWMA_CCER1=0x00;                //写 CCMRx 前必须先清零 CCxE 关闭通道
  20.         PWMA_CCMR2=0x60;                //通道模式配置
  21.         PWMA_CCER1=0x10;                //配置通道输出使能和极性
  22.         
  23.         PWMA_ARRH=(unsigned char)(2400>>8); //设置周期时间
  24.         PWMA_ARRL=(unsigned char)2400;
  25.         
  26.         PWMA_ENO=0x00;
  27.         PWMA_ENO|=0x04;                        //使能输出
  28.         
  29.         PWMA_BKR=0x80;                        //使能主输出
  30.         PWMA_CR1|=0x01;                        //开始计时
  31.         
  32.         EA=1;                                        //启用总中断
  33. }
  34. void main(void)
  35. {
  36.         Init();
  37.         PWMA_CCR2H=(unsigned char)(1200 >> 8); //设置占空比时间
  38.         PWMA_CCR2L=(unsigned char)(1200);
  39.         while(1)
  40.         {
  41.                
  42.         }
  43. }
复制代码
AI8 12MHz P12 5KHz 50%.zip (7.7 KB, 下载次数: 6)
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-07 10:34:04
已绑定手机

3

主题

10

回帖

53

积分

注册会员

积分
53
发表于 2025-4-7 10:34:04 | 显示全部楼层
  1. void PWM_init()
  2. {
  3.     P_SW2 = 0x80;
  4.                 PWMA_PS=0x00;                        //高级 PWM 通道输出脚选择位
  5.     PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
  6.     PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式
  7.     PWMA_CCER1 = 0x01;                          //使能CC1通道
  8.     PWMA_CCR1 = 5;                            //设置占空比时间
  9.     PWMA_ARR = 60000;                             //设置周期时间
  10.     PWMA_ENO = 0x02;  
  11.     PWMA_BKR = 0x80;                            //使能主输出
  12.     PWMA_CR1|=0x01;                          //开始计时
  13. }
复制代码


STC8H1K08-TSSOP20  使用P11输出  下面的程序是否正确
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:38 , Processed in 0.160322 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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