最近给别人做了一个小东西,MCU选的是STC12C5A60S2 ,需要用到PWM控制功能。

在网上找了一下,发现解释的不尽人意,无奈之下自己琢磨数据手册弄明白了。

  首先,STC12C5A60S2内置有两个 编程计数器阵列(PCA) 模块,分别用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制输出(PWM)。具体寄存器详见数据手册这里就不多累述了。

  这里就只讲PWM的实现,首先需要对PCA进行初始化配置,代码如下:

  

void Pwm0_init(void)    //PWM0初始化配置
{
CCON = 0x00; //
CL = ; //PCA计数器 低8位
CH = ; //PCA计数器 高8位
CMOD = 0x02; //选择时钟源为系统时钟源的1/2
CCAP0H = CCAP0L = 0x00; //设置占空比为 0
CCAPM0 = 0x42; //0100 0010 允许比较器,允许PWM0引脚输出
CR = ; //启动 PCA 计数器阵列
}

上述代码设置了 P1.3作为 PWM0的输出脚,并初始化了PWM0,当然初始化完成后,默认占空比为0。

接下来对占空比进行控制:

//占空比设置 0-255
void Pwm0_outset(u8 grad)
{
CR = 0;              //先关闭计数
CCAP0H=CCAP0L= grad;      //设置占空比,有 0-255 阶 
CR = 1;                   //计数打开
}

这样就完成PWM0控制部分的编写了,当然还有PWM1没有写,相信聪明的读者也已经明白PWM1该如何配置了,具体参考数据手册,数据手册才是硬道理,其他都是虚的。

  希望对大家有所帮助,以上

  

05-11 10:52