标题: 51单片机舵机驱动程序 [打印本页]

作者: 17719495093    时间: 2017-4-19 14:17
标题: 51单片机舵机驱动程序
        #include<reg52.h>
        #include <intrins.h>
        sbit Sevro_moto_pwm  = P2^0        ;   //接舵机信号端输入PWM信号调节速度
        unsigned char push_val_left=0;
           int pwm_val_left  = 0;//变量定义
        int pwm_val_left1  = 0;//变量定义
        unsigned long S=0;
        unsigned long S1=0;
        unsigned long S2=0;
        unsigned long S3=0;
        unsigned long S4=0;
        unsigned int  time=0;                       //时间变量
        unsigned int  timer=0;                        //延时基准变量
        unsigned char timer1=0;                        //扫描时间变量                                       


/************************************************************************/
/*                    PWM信号产生控制舵机                               */
/************************************************************************/
/*                                                                      */
/*调节push_val_left的值改变电机转速,占空比            */
void delay(void)
{
unsigned int i,j;
for(i=0;i<=500;i++)
   for(j=110;j>0;j--);

}        

void pwm_Servomoto(void)
{  

    if(pwm_val_left<=push_val_left)        //0
               Sevro_moto_pwm=1;
        else
               Sevro_moto_pwm=0;
          if(pwm_val_left>=200)
           pwm_val_left=0;


}

void pwm_Servomoto1(void)
{  

    if(pwm_val_left1<=20)  //135
        
               Sevro_moto_pwm=1;
        else
               Sevro_moto_pwm=0;

         if(pwm_val_left1>=200)
           pwm_val_left1=0;

}


/***************************************************/
///*TIMER1中断服务子函数产生PWM信号*/
void time1()interrupt 3   using 2
{        
     TH1=(65536-100)/256;          //100US定时
         TL1=(65536-100)%256;
                          //定时器100US为准。在这个基础上延时
         pwm_val_left++;
         
         pwm_val_left1++;
      //         S1++;
     pwm_Servomoto();                  
    // pwm_Servomoto1();
         
}

/***************************************************/

void main(void)
{

        TMOD=0X11;
        TH1=(65536-100)/256;          //100US定时
        TL1=(65536-100)%256;
        TH0=0;
        TL0=0;  
        TR1= 1;
        ET1= 1;
        ET0= 1;
        EA = 1;

        
    //unsigned char push_val_left=15;          //舵机归中


        while(1)                       /*无限循环*/
        {
       push_val_left=5;
          // delay();        
           delay();
           
            push_val_left=20;
        //        delay();
                delay();
               
        }
         
         

}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1