首页 > 代码库 > STC12C系列单片机PWM脉宽调制
STC12C系列单片机PWM脉宽调制
最近给别人做了一个小东西,MCU选的是STC12C5A60S2 ,需要用到PWM控制功能。
在网上找了一下,发现解释的不尽人意,无奈之下自己琢磨数据手册弄明白了。
首先,STC12C5A60S2内置有两个 编程计数器阵列(PCA) 模块,分别用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制输出(PWM)。具体寄存器详见数据手册这里就不多累述了。
这里就只讲PWM的实现,首先需要对PCA进行初始化配置,代码如下:
void Pwm0_init(void) //PWM0初始化配置 { CCON = 0x00; // CL = 0; //PCA计数器 低8位 CH = 0; //PCA计数器 高8位 CMOD = 0x02; //选择时钟源为系统时钟源的1/2 CCAP0H = CCAP0L = 0x00; //设置占空比为 0 CCAPM0 = 0x42; //0100 0010 允许比较器,允许PWM0引脚输出 CR = 1; //启动 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该如何配置了,具体参考数据手册,数据手册才是硬道理,其他都是虚的。
希望对大家有所帮助,以上
STC12C系列单片机PWM脉宽调制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。