潘宁不一般 发表于 2022-4-24 21:58

51单片机控制舵机转动(不用按键)自动转动

整个程序不就是改变相应的timer1的值控制转动特定角度么,为什么无论我改变什么数,都旋转90度啊,而且有正90有负90,timer1=10的时候还会从-90到-27.6来回转是怎么回事,角度的正和负是怎么控制的

[*]// _nop_()延时一个机器周期


[*]

#include <reg52.h>


[*]

#include <intrins.h>


[*]

sbit PWM = P3^0;//设定PWM输出的I/O端口


[*]

unsigned char count = 0;


[*]

unsigned char timer1 ;


[*]

/*


[*]

对于180°舵机


[*]

t = 0.5ms——————-舵机会转动 0 °


[*]

t = 1.0ms——————-舵机会转动 45°


[*]

t = 1.5ms——————-舵机会转动 90°


[*]

t = 2.0ms——————-舵机会转动 135°


[*]

t = 2.5ms——————-舵机会转动180


[*]

*/


[*]




[*]




[*]




[*]

/*延时程序*/


[*]

void delay1s(void)   //误差 0us


[*]

{


[*]

    unsigned char a,b,c;


[*]

    for(c=167;c>0;c--)


[*]

      for(b=171;b>0;b--)


[*]

            for(a=16;a>0;a--);


[*]

    _nop_();//if Keil,require use intrins.h


[*]

}


[*]




[*]

/*定时器T0初始化*/


[*]

void Timer0_Init()         


[*]

{


[*]

    TMOD &= 0x00;


[*]

    TMOD |= 0x01; //定时器T0设置成方式1


[*]




[*]

    TH0 = 0xff;   //定时常数 0.1ms 晶振为11.0592MHz


[*]

    TL0 = 0xa4;


[*]




[*]

    ET0 = 1;      


[*]

    TR0 = 1;


[*]

        EA=1;


[*]

        }


[*]

       


[*]

/*T0中断初始化*/


[*]

void Time0_Init() interrupt 1


[*]

{


[*]

        TR0 = 0;


[*]

        TH0 = 0xff; // 0.1ms


[*]

        TL0 = 0xa4;


[*]

       


[*]

        if(count <= timer1) //5==0° 15==90°


[*]

        {


[*]

                PWM = 1;


[*]

        }


[*]

        else


[*]

        {


[*]

                PWM = 0;


[*]

        }


[*]

        count++;


[*]

        if (count >= 200) //T = 20ms清零


[*]

        {


[*]

                count = 0;


[*]

        }


[*]

        TR0 = 1; //开启T0


[*]

}


[*]

void main()


[*]

{


[*]

        Timer0_Init();


[*]

        while(1)


[*]

        {


[*]

               


[*]

                timer1 =5;//舵机恢复到0°的位置


[*]

                count=0;//让定时器重新计数


[*]

                delay1s();


[*]

                timer1 =10;


[*]

                count=0;


[*]

                delay1s();


[*]

        }


[*]

}







[*]

[*]收起



页: [1]
查看完整版本: 51单片机控制舵机转动(不用按键)自动转动