在做舵机驱动程序,用的是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);
} |