zoukankan      html  css  js  c++  java
  • 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该如何配置了,具体参考数据手册,数据手册才是硬道理,其他都是虚的。

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

      

             

  • 相关阅读:
    String.Intern原来可以减少占用内存···
    一些话···
    javascript 闭包和原型 (转载)
    20100610
    jQuery选择头像
    20100611
    新的一天又开始了····
    13种常用按钮、文本框、表单等CSS样式
    心悸···
    我对她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了···
  • 原文地址:https://www.cnblogs.com/hanhuo/p/6663467.html
Copyright © 2011-2022 走看看