版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiaomo_haa/article/details/84590040
在使用STC12C5A60S2系列单片机PCA输出PWM时需要设置PCA时钟源,如以下代码
链接地址:https://blog.csdn.net/Xiaomo_haa/article/details/84189798
void PCA_Init(void)
{
CCON = 0; //PCA初始化
CMOD = 0x00; //空闲时不计数,不产生中断,时钟源为Sysclk/12,PWM频率大约为4KHz
CL = 0x00; //PCA低8位清零
CH = 0x00; //PCA高8位清零
CCAPM0 = 0x42; //8位PWM模式,无中断
CCAP0H = 0xc0; //PWM0占空比(调节此处值调节PWM占空比)
CCAP0L = 0xc0; //PWM0占空比(调节此处值调节PWM占空比)
CCAPM1 = 0x42; //8位PWM模式,无中断
CCAP1H = 0x40; //PWM1占空比(调节此处值调节PWM占空比)
CCAP1L = 0x40; //PWM1占空比(调节此处值调节PWM占空比)
CR = 1; //启动PCA计数器
}
其中CMOD寄存器结构如下图所示:
其中CPS2、CPS1、CPS0为PCA计数脉冲源选择控制位。
PCA计数脉冲选择具体如下所示:
CPS2 | CPS1 | CPS0 | 选择PCA/PWM时钟源输入 |
0 | 0 | 0 | 0,系统时钟/12,SYSclk/12 |
0 | 0 | 1 | 1,系统时钟/2,SYSclk/2 |
0 | 1 | 0 | 2,定时器0的溢出脉冲。由于定时器0可以工作在1T模式,所以达到记一个时钟就溢出,从而达到最高频率CPU工作时钟SYSclk。通过改变定时器0的溢出率,可以实现可调频率的PWM输出。 |
0 | 1 | 1 | 3,ECI/P1.2(或P4.1)脚输入的外部时钟(最大速率 = SYSclk/2) |
1 | 0 | 0 | 4,系统时钟,SYSclk |
1 | 0 | 1 | 5,系统时钟/4,SYSclk/4 |
1 | 1 | 0 | 6,系统时钟/6,SYSclk/6 |
1 | 1 | 1 | 7,系统时钟/8,SYSc/8 |