stc15f104e输出的PWM问题
我用stc15f104e输入航模接收机输出的PWM信号,转发PWM到舵机上,可是舵机不动,转发到电调上电调却可以驱动。舵机直接连接收机也可以驱动。这是怎么回事。我用逻辑分析仪看了频率,占空比,与接收机输出的是一样的。哪位高手知道这是怎么回事。 #define SYSclk 12000000L#define MODE1T //时间为为12T模式
#ifdef MODE1T
#define T1MS (65536-SYSclk/1000)
#else
#define T1MS (65536-SYSclk/12/1000)
#endif
sfr AUXR=0x8e;
sbit PWM=P3^3; //用于输出pwm信号
sbit P_IN=P3^2; //用于判断是否有高电平输入
void main()
{ // 12MHZ 计数1=1us
AUXR &= 0x7F; //定时器时钟12T模式 定时器0 用12T模式 用于输出pwm
TMOD &= 0xF0; //设置定时器模式 16位定时器0自动重载
AUXR &= 0xBF; //定时器时钟12T模式 定时器1 用12T模式
TMOD &= 0x0F; //设置定时器模式 16位定时器1自动重载 用于输入pwm
while(1)
{ /*PWM输入*/
if(P_IN==1) //p3.2用来判断外部的低电平变高电平
{
if(g==2) //关定时器
{ TR0=0;
N=0x0000;
N=TH0;
N=(N<<8)+TL0; //N就是一个周期的时间
}
g=1;
TH0=0x00; //对TH0 TL0 赋值
TL0=0x00;
TR0=1; //开始定时
}
if((P_IN==0)&&(g==1)) //高电平变低电平
{
g=2;
pwm_in=0x0000;
pwm_in=TH0;
pwm_in=(pwm_in<<8)+TL0;
// PWM=0;
}
pwm=pwm_in;
/*PWM输出 */
if(s==0) //输出高电平开始
{s=1;
TH1=0x00; //对TH0 TL0 赋值
TL1=0x00;
TR1=1; //计时开始
PWM=1; //输出高电平
}
if(s==1) // 计算这个时间定时器在高电平输出时走了多久
{ start=0x0000; start=TH1;
start= (start<<8)+TL1;
if((pwm)<=start) //当高电平持续时间达到要求的高电平输出时间 输出高电平结束进入低电平
{ TR1=0;
TH1=0x00; //对TH0 TL0 赋值
TL1=0x00;
TR1=1; //重新开始计时
PWM=0; //输出低电平
s=2;
}
}
if(s==2) //计算这个时间定时器在低电平输出时走了多久
{ start=0x0000; start=TH1;
start= (start<<8)+TL1;
if((N-pwm) <=start) //输出低电平时间到 结束一个周期 关闭计时器
{TR1=0;s=0;}
}
} 没有人遇到吗?
页:
[1]