最近给别人做了一个小东西,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该如何配置了,具体参考数据手册,数据手册才是硬道理,其他都是虚的。
希望对大家有所帮助,以上