270度舵机只转一下就不动了,怎么让舵机转起来

270度舵机只转一下就不动了,怎么让舵机转起来




#include <reg52.h>            //       头文件

sbit Sevro_moto_pwm=P2^0;           // 舵机信号线(橙色)

unsigned char pwm_val  = 0;//变量定义
unsigned char push_val = 14;//舵机归中,产生约,1.5MS 信号
                

void delay1ms(unsigned int k)   //延时1ms函数,k等于多少就延时多少ms
{
    unsigned int a,b,c,d;
    for(d=0;d<k;d++)
        for(c=1;c>0;c--)
            for(b=50;b>0;b--)
                for(a=2;a>0;a--);
}                                   


/**********************************************************************************************
**                              TIMER1中断服务子函数产生PWM信号
**********************************************************************************************/

     void time1()interrupt 3   using 2
{    
     TH1=(65536-100)/256;      //100US定时
     TL1=(65536-100)%256;
     pwm_val++;
     if(pwm_val<=push_val)      
           Sevro_moto_pwm=1;   //PWM信号高电平时间
    else 
           Sevro_moto_pwm=0;   //PWM信号高电平时间
    if(pwm_val>=100)
    pwm_val=0;
 }



/**********************************************************************************************
**                                       主函数
**********************************************************************************************/
void main(void)
{
    TMOD=0X10;
    TH1=(65536-100)/256;      //100US定时
    TL1=(65536-100)%256;
    TR1= 1;
    ET1= 1;
    EA = 1;

    push_val=13;      //舵机归中,机器执行指令有周期,所以PWM信号有误差
    delay1ms(1000);   //延时1S让舵机转到其位置,停留一下

    while(1)               /*无限循环*/
    { 
          push_val=4;      //舵机向正转约90度,机器执行指令有周期,所以PWM信号有误差
          delay1ms(500); //延时500MS让舵机转到其位置

          push_val=22;      //舵机向反转约90度,机器执行指令有周期,所以PWM信号有误差
          delay1ms(500);; //延时500MS让舵机转到其位置
       }

    }