[STC单片机]

STC12C56AS02 PWM设置频率和占空比问题

[复制链接]
751|0
手机看帖
扫描二维码
随时随地手机跟帖
ks2ks2|  楼主 | 2016-1-26 14:11 | 显示全部楼层 |阅读模式
在做舵机驱动程序,用的是STC12C56AS02,舵机要求用20ms的时基脉冲,高电平时间最小0.5ms,最大2.5ms占空比从0.5增到2.5在减回0.5如此循环。现用单片机自带的PCA做PWM,我用的是T0做时钟源,(可以不用么?),程序如下,请教大神,问题出在哪了呢
#include <STC12C5A60S2.H>

void init_pwm()
{
        CMOD=0x04;//时钟源设置为 T0溢出率
        CCAPM0=0X42;//8位PWM波。无中断
        CH=0;//初值
        CL=0;//初值
        CR=1;//开启PWM
        CCAP0H=CCAP0L=0x07;//设置占空比
}
void init_timer0()//定时器T0
{
        TMOD|=0x01;//16位计时器T0
        EA=1;//开启总中断
        ET0=1;//开启定时器T0中断
        TR0=1;//开启定时器T0
        TH0=(65535-20000)/256;//每1ms溢出一次
        TL0=(65535-20000)%256;
}
void timer0() interrupt 1           //定时器0中断
{
        TH0=(65535-20000)/256;
        TL0=(65535-20000)%256;
        if(CCAP0H<=0x07)//   07/256=2.7% 20ms一个周期,则高电平时间为0.5秒左右
        {
        CCAP0H=CCAP0H+5;
  CCAP0L=CCAP0H;
        }
                if(CCAP0H>=0x40)//  32/256=12.5% 20ms一个周期,则高电平时间为12.5秒左右
        {
        CCAP0H=CCAP0H-5;
  CCAP0L=CCAP0H;
        }
}
void main()
{
        init_pwm();
         init_timer0();
        while(1);
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝