8H1K08-TSSOP16怎么使用8G1K08A的pca功能
8H1K08-TSSOP16怎么使用8G1K08A的pca类似的功能?使用IC:8H1K08-TSSOP16
输出引脚P12
需求:初始化固定频率,12M自带内部晶振。输出3K-10K的pwm,占空比根据采集的数据输出0%-100%实时更新,从P12引脚输出。
为满足这个需求,参考那个例程比较好实现,或者通过哪个pwm功能可以实现。
(排除定时器计时,高频不稳)
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模块,且能高效实现需求。
[本文内容由国芯人工智能辅助生成,仅供参考] 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输出更加稳定,适合高频应用。
[本文内容由国芯人工智能辅助生成,仅供参考] 8H1K08无PCA
AI芯 发表于 2025-3-4 16:15
8H1K08无PCA
那我要达到我得需求,可以怎么实现呢? iyxectrx 发表于 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动态设置
初始化:
P_SW2|=EAXFR;
P0M1=0x00; P0M0=0x00; //设置IO模式
P1M1=0x00; P1M0=0x00; //设置IO模式
P2M1=0x00; P2M0=0x00; //设置IO模式
P3M1=0x03; P3M0=0x00; //设置IO模式
P4M1=0x00; P4M0=0x00; //设置IO模式
P5M1=0x00; P5M0=0x00; //设置IO模式
P6M1=0x00; P6M0=0x00; //设置IO模式
P7M1=0x00; P7M0=0x00; //设置IO模式
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1 = 0x60; //通道模式配置
PWMA_CCER1 = 0x10; //配置通道输出使能和极性
PWMA_ARRH=(unsigned char)(arr>>8); //设置周期时间
PWMA_ARRL=(unsigned char)arr;
PWMA_ENO=0x00;
PWMA_ENO|=0x04; //使能输出
PWMA_BKR=0x80; //使能主输出
PWMA_CR1|=0x01; //开始计时设置占空比:
PWMA_CCR1H = (unsigned char)(duty >> 8); //设置占空比时间
PWMA_CCR1L = (unsigned char)(duty);
DebugLab 发表于 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;//P10AD高阻 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);
}
#include "stc8h.h"
#include "intrins.h"
void main()
{
P1M1=0xF1;//P10AD高阻 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);
}
如果我目前先让P12输出恒定的PWM,这个程序是不是可以正确输出 iyxectrx 发表于 2025-3-5 10:05
如果我目前先让P12输出恒定的PWM,这个程序是不是可以正确输出
P12输出5KHz 50% PWM程序,供参考
#include <AI8H.H>
#define FOSC 12000000UL //主时钟
void Init(void)
{
P_SW2|=EAXFR;
P0M1=0x00; P0M0=0x00; //设置IO模式
P1M1=0x00; P1M0=0x00; //设置IO模式
P2M1=0x00; P2M0=0x00; //设置IO模式
P3M1=0x03; P3M0=0x00; //设置IO模式
P4M1=0x00; P4M0=0x00; //设置IO模式
P5M1=0x00; P5M0=0x00; //设置IO模式
P6M1=0x00; P6M0=0x00; //设置IO模式
P7M1=0x00; P7M0=0x00; //设置IO模式
PWMA_PS=0x00; //高级 PWM 通道输出脚选择位
PWMA_CCER1=0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR2=0x60; //通道模式配置
PWMA_CCER1=0x10; //配置通道输出使能和极性
PWMA_ARRH=(unsigned char)(2400>>8); //设置周期时间
PWMA_ARRL=(unsigned char)2400;
PWMA_ENO=0x00;
PWMA_ENO|=0x04; //使能输出
PWMA_BKR=0x80; //使能主输出
PWMA_CR1|=0x01; //开始计时
EA=1; //启用总中断
}
void main(void)
{
Init();
PWMA_CCR2H=(unsigned char)(1200 >> 8); //设置占空比时间
PWMA_CCR2L=(unsigned char)(1200);
while(1)
{
}
}
void PWM_init()
{
P_SW2 = 0x80;
PWMA_PS=0x00; //高级 PWM 通道输出脚选择位
PWMA_CCER1 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMA_CCMR1 = 0x60; //设置CC1为PWMA输出模式
PWMA_CCER1 = 0x01; //使能CC1通道
PWMA_CCR1 = 5; //设置占空比时间
PWMA_ARR = 60000; //设置周期时间
PWMA_ENO = 0x02;
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1|=0x01; //开始计时
}
STC8H1K08-TSSOP20使用P11输出下面的程序是否正确
页:
[1]