芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

芯片解密STC8G单片机的PCA_10PWM输出

芯片解密STC8G1K08A单片机

这里说明下关于PWM寄存器:
  

芯片解密10位PWM重装值和比较值的高2位和低8位在两个寄存器,PCA_PWMn和CCAPnH。
以前写代码习惯了根据数据手册的寄存器从上往下配置,特殊寄存器除外。
以前配置8位PWM初始化代码如下:
//8位PWM_PCA初始化
void PCA_Init()
{
        CCON=0x00;  //关闭PCA计数器,清除相关标志位
        CMOD=PCA_SYSCLK2;  //PCA时钟源为系统时钟2分频  33.1776/2/1024=0.0162MHZ ==>16.2KHZ
        CL  =0x00;  //计数器清零
        CH  =0x00;
/*------------------------PWM0部分-----------------------------*/
        CCAPM0=0x42; //使能PCA模块0_PWM输出
        CCAP0L=0X00;    //捕获比较寄存器低8位,比较值
        CCAP0H=0X00;    //捕获比较寄存器高8位,重装值
        PCA_PWM0=0x00;  //8位PWM输出        
/*------------------------PWM1部分-----------------------------*/
        CCAPM1=0x42; //使能PCA模块0_PWM输出
        CCAP1L=0X00;    //捕获比较寄存器低8位,比较值
        CCAP1H=0X00;    //捕获比较寄存器高8位,重装值
        PCA_PWM1=0x00; //8位PWM输出

        CCON|=  1<<6;   //启动计数器
}


这样,调节自己想要的占空比就OK了,8位PWM正常使用。所以,觉得修改PWM位数就行了。
于是,10位PWM配置如下:
//10位PWM_PCA初始化
//用电位器调节占空比
void PCA_Init()
{
        CCON=0x00;  //关闭PCA计数器,清除相关标志位
        CMOD=PCA_SYSCLK2;  //PCA时钟源为系统时钟2分频  33.1776/2/1024=0.0162MHZ ==>16.2KHZ
        CL  =0x00;  //计数器清零
        CH  =0x00;
/*------------------------PWM0部分-----------------------------*/
        CCAPM0=0x42; //使能PCA模块0_PWM输出
        CCAP0L=0X00;    //捕获比较寄存器低8位,比较值
        CCAP0H=0X00;    //捕获比较寄存器高8位,重装值
        PCA_PWM0=0xC0;  //10位PWM输出        
/*------------------------PWM1部分-----------------------------*/
        CCAPM1=0x42; //使能PCA模块0_PWM输出
        CCAP1L=0X00;    //捕获比较寄存器低8位,比较值
        CCAP1H=0X00;    //捕获比较寄存器高8位,重装值
        PCA_PWM1=0xC0; //10位PWM输出

        CCON|=  1<<6;   //启动计数器
}


调节占空比的时候用示波器观察波形,发现波形不对,波形的确是10位的,这点可以肯定。数据手册看了一遍又一遍,觉得代码没问题啊。
实在没办法了。后来添加了串口功能,决定把相关寄存器通过串口发出来看看。
通过观察发现,PWM重装值高2位永远是00,低8位没问题,调节占空比的代码如下:
//设置脉冲宽度
void PWM0_Set_Duty(u16 Duty)
{
        //注意:在更新 10 位 PWM 的重载值时,必须先写高两位 XCCAPnH[1:0],再写低 8 位 CCAPnH[7:0]。
        PCA_PWM0&= ~(3<<4);        //清零重装值高2位
        PCA_PWM0|= (Duty>>4)&0x30; //设置新的重装值高2位
        CCAP0H   = Duty;           //重装值低8位
}


联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信